Sun JDK1.6.0_13 ; MyEslipse10 ; Tomcat ; 谷歌浏览器 ;
本次操作将用springmvc通过输入网址,返回所需的网页,并在控制台打印输出信息(使用注解的方式)
网页输出:
控制台打印:
建立Springmvc框架,需如下步骤:
1. 导入所需jar包
1.1 导入spring以及springmvc所需jar包
spring所需jar包 百度网盘链接:spring-framework-3.2.13.RELEASE-dist.zip
最少需要导入如下6个jar包:
spring-beans-3.2.13.RELEASE.jar
spring-context-3.2.13.RELEASE.jar
spring-core-3.2.13.RELEASE.jar
spring-expression-3.2.13.RELEASE.jar
spring-web-3.2.13.RELEASE.jar
spring-webmvc-3.2.13.RELEASE.jar
jar包在压缩包解压后 spring-framework-3.2.13.RELEASE-dist文件夹 > spring-framework-3.2.13.RELEASE文件夹 > libs文件夹下寻找,将jar包复制到web项目中WebRoot > WEB-INF > lib文件夹下
1.2 导入日志文件所需jar包
log4j所需jar包 百度网盘链接:log4j所需jar包
将日志压缩包里的4个jar包复制到web项目中WebRoot > WEB-INF > lib文件夹下,然后在web项目下创建resources目录(Source Folder),将log4j.properties文件复制到resources文件夹下,此为log4j配置文件,备用
选中WebRoot > WEB-INF > lib文件夹下所有jar包,右击Build Path > Configure Build Path...
导入jar包步骤完成
2. 配置web.xml
springmvc也是一种servlet,所以需要通过配置web.xml文件,让项目去识别springmvc
打开WebRoot > WEB-INF 文件夹下的web.xml文件
然后我配置的代码如下,会在代码中进行分析:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- 下面是我的配置 -->
<!-- 因为springmvc也是servlet的一种,所以通过配置servlet让项目识别 -->
<servlet>
<!-- 因为本项目是springmvc,故servlet命名为springmvc,以供识别 -->
<servlet-name>springmvc</servlet-name>
<!--
命名为springmvc的servlet是DispatcherServlet类型的,
Ctrl+Shift+H搜索该类DispatcherServlet,赋予这个类的完全限定名,
DispatcherServlet也是springmvc的入口,这里不需要过深涉及
-->
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 设置初始化参数,将我们要配置的springmvc的配置文件地址导入 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 此处设置1,表示spring容器在启动的时候就要加载这个DispatcherServlet类型的servlet,即自启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<!-- servlet-mapping标签作用是截获请求的 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!-- /表示截获根目录下的所有请求 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
这段配置信息的作用是,在spring的容器启动的时候就加载这个springmvc,然后在有请求出现时,截获所有请求,交给springmvc-servlet.xml文件配置的controller(控制器)去处理,后面会涉及到,此处不做详解。
3. 下边我们开始编写springmvc-servlet.xml配置文件。
(1) 首先创建一个xml文件,在resources目录下右击New > File,命名为springmvc-servlet.xml。
(2) 在文件中导入头部约束配置,打开下载的spring压缩包文件夹,在以下路径:spring-framework-3.2.13.RELEASE-dist\spring-framework-3.2.13.RELEASE\docs\spring-framework-reference\html文件夹下,搜索文件mvc.html并用浏览器打开。在17.3.1下或Ctrl+F搜索关键词"17.3.1",这个目录下的代码片段,复制如下部分粘贴到springmvc-servlet.xml中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
</beans>
然后,再在mvc.html网页中搜索"xmlns:mvc",将定位到的代码中的如下代码插入上述代码中,按上述代码格式插入(后面有完整代码):
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
此时头部约束完成,我们开始编写配置文件。
(3) 此例中完整的springmvc-serlvet.xml配置文件如下(使用注解的方式):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--
配置扫描注解,将com.zb.controller目录下的注解扫描注册,
没有这句话,扫描不到注解,带有注解的JavaBean也将是普通的java代码
-->
<context:component-scan base-package="com.zb.controller" />
<!-- 该标签可以将url自动映射到controller上 -->
<mvc:annotation-driven />
<!--
配置视图解析器
基于InternalResourceViewResolver类,Ctrl+Shift+H寻找它的完整限定名,是servlet的
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--
此为前缀,
controller(控制器)的返回值将自动在前后加上前缀后缀,
此例中,controller返回index字符串,加上前后缀的完整url是:/WEB-INF/jsp/index.jsp,
成功定位到此jsp页面
-->
<property name="prefix" value="/WEB-INF/jsp/" />
<!-- 此为后缀 -->
<property name="suffix" value=".jsp" />
</bean>
</beans>
<mvc:annotation-driven>:会自动注册RequestMappingHandlerMapping与RequestMappingHandlerAdapter两个Bean,这是Spring MVC为@Controller分发请求所必需的,并且提供了数据绑定支持。
4. 编写controller(控制器)
新建一个类MyController,所在包com.zb.controller下,代码如下:
package com.zb.controller;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MyController {
private Logger logger = Logger.getLogger(MyController.class);
@RequestMapping("/welcome")
public ModelAndView index(){
("Hello,springmvc!");
return new ModelAndView("index");
}
}
@Controller:让springmvc-servlet.xml中的扫描到,并将此类识别为controller(控制器),并自动注册
@RequestMapping("/welcome"):此注解的作用为,将“/welcome”的请求识别并定位用此方法处理请求,使此次注解可以在这个类中写很多的处理方法,只要用此注解加以标示,就可以分清,不必要定义n多个类
("Hello,springmvc!"); : 在控制台打印日志,用来让我们知道程序运行到此方法
return new ModelAndView("index"); :此处直接返回字符串“index”,用于url拼接,寻找此将jsp页面
5. 发布运行
最后在项目目录/WEB-INF/下建立文件夹jsp,在jsp中建立名为index的jsp页面。完成最终编写
本例使用Tomcat,发布细节在此不再赘述。运行结果如本文开头所示。
本例使用的是注解的方式扫描controller,还有手动编写 配置处理器映射 HandlerMapping 标签的方式:
<!-- 配置处理器映射 HandlerMapping -->
<bean name="/welcome" class="com.zb.controller.MyController" />
而controller的编写如下:
package com.zb.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class MyController extends AbstractController {
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
// TODO Auto-generated method stub
return new ModelAndView("index");
}
}
此类方式,一句映射对应一个controller,在映射较多的情况下将非常繁琐,所以常用注解的方式