主要进行了如下配置:
1、 前端控制器DispatcherServlet;
2、 HandlerMapping
3、 HandlerAdapter
4、 ViewResolver
5、 处理器/页面控制器
6、 视图
Spring Web MVC处理请求的流程
具体执行步骤如下:
1、 首先用户发送请求————>前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把请求委托给它,即以前的控制器的控制逻辑部分;图2-1中的1、2步骤;
2、 页面控制器接收到请求后,进行功能处理,首先需要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,然后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的3、4、5步骤;
3、 前端控制器收回控制权,然后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤6、7;
4、 前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束。
例子
1、配置web.xml
<?xml version="1.0"encoding="UTF-8"?> <web-appxmlns:xsiweb-appxmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"> <servlet> <servlet-name>hello</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
<!-- 下面这个配置,解决post中文乱码问题 --> <filter> <filter-name>CharacterFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
load-on-startup:表示启动容器时初始化该Servlet;
url-pattern:表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。
2、配置Hello-servlet.xml管理Spring的配置
(名称必须与web.xm文件中的servlet-name相同,放到web-inf下)
prefix前缀:处理后转到/WEB-INF/jsp/目录下的jsp页面
surfix后缀:视图页面是以.jsp结尾的jsp文件
<?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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<bean name="welcome.html" class="zttic.itat.controller.WelcomeController"></bean>
<bean class="org.springframework.web.servlet.view.InternalResuorceViewResolver"
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name= "surfix", value=".jsp"/>
</bean>
</beans>
<bean name="welcome.html" class="zttic.itat.controller.WelcomeController"></bean>
当用户在客户端请求访问welcome.html时,对应的Controller处理器处理这个请求,并转到相应页面
3、新建一个Controller类:WelcomeController.java
package zttc.itat.controller;
import javax.servlet.http.HttpServletRequest;
public class WelcomeController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(httpServletRequest request,
httpServletResponse response) throws Exception{
System.out.println("welcome");
return new ModelAndView("welcome");
}
}
return new ModelAndView("welcome"):就是转到/WEB-INF/jsp/目录下welcome.jsp页面
4、在WEB-INF目录下新建一个jsp文件夹,在jsp文件夹下新建一个welcome.jsp文件
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
</head>
<body>
<h1>welcome!!</h1>
</body>
二、使用注解annotation开发(推荐这种方式)
1、web.xml
同上
2、hello-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-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
//这两句是打开annotation
<context:component-scan base-package="zttc.itat.controller">
<mvc:annotation-driven/>
//<bean name="welcome.html" class="zttic.itat.controller.WelcomeController"></bean>
<bean class="org.springframework.web.servlet.view.InternalResuorceViewResolver"
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name= "surfix", value=".jsp"/>
</bean>
</beans>
3、创建控制器,新建HelloController.java
在这里完成controller和viewer的映射
package zttc.itat.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloController{
//RequestMapping表示用哪个URL来对应
@RequestMapping{{"/hello","/"}}
public String hello(){
System.out.println("hello");
return "hello";
}
@RequestMapping{{"/welcome"}}
public String welcome(){
System.out.println("welcome");
return "welcome";
}
}
@Controller:
用于标识是处理器类;
@RequestMapping:
请求到处理器功能方法的映射规则;
4、jsp目录下创建hello.jsp