SpringMVC框架二
一、处理器映射器和处理器适配器
1、处理器映射器分类
1、BeanNameUrlHandlerMapping :通过对比url和bean的name找到对应的对象
2、SimpleUrlHandlerMapping :也是直接配置url和对应bean,比BeanNameUrlHandlerMapping功能更多。
4、ControllerClassNameHandlerMapping :这个实际上是去掉控制器中的Controller后,将剩余的部分跟URL匹配(不建议使用)
5、DefaultAnnotationHandlerMapping:在spring3.1版本之前用的针对注解配置,针对@RequestMapping 生效
6、RequestMappingHandlerMapping :针对注解配置@RequestMapping起作用
2、处理器适配器分类
1、HttpRequestHandlerAdapter:要求handler实现HttpRequestHandler接口
2、SimpleControllerHandlerAdapter:要求handler实现Controller接口
3、AnnotationMethodHandlerAdapter:是在spring3.1版本之前用的,针对@RequestMapping 生效
4、RequestMappingHandlerAdapter:针对@RequestMapping 生效
举例:BeanNameUrlHandlerMapping与SimpleControllerHandlerAdapter
spring-config.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 <bean name="/hello" class="com.gec.controller.HelloController"/> 6 7 <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> 8 9 <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" /> 10 11 <!--视图解释器--> 12 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> 13 14 </beans>
Handler实现Controller接口代码:
1 package com.gec.controller; 2 3 import org.springframework.web.servlet.ModelAndView; 4 import org.springframework.web.servlet.mvc.Controller; 5 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 public class HelloController implements Controller { 10 11 @Override 12 public ModelAndView handleRequest(HttpServletRequest httpServletRequest 13 , HttpServletResponse httpServletResponse) throws Exception { 14 15 ModelAndView modelAndView=new ModelAndView(); 16 17 modelAndView.addObject("username","root"); 18 19 modelAndView.setViewName("/WEB-INF/jsp/hello.jsp"); 20 return modelAndView; 21 } 22 }
举例:SimpleUrlHandlerMapping与HttpRequestHandlerAdapter
spring-config.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 5 6 <bean id="helloId" class="com.gec.controller.Hello2Controller"/> 7 <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 8 <property name="mappings"> 9 <props> 10 <prop key="/hello">helloId</prop> 11 </props> 12 </property> 13 </bean> 14 15 <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/> 16 17 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> 18 19 </beans>
Handler实现HttpRequestHandler的接口:
1 package com.gec.controller; 2 3 import org.springframework.web.HttpRequestHandler; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 import java.io.IOException; 9 10 public class Hello2Controller implements HttpRequestHandler { 11 12 @Override 13 public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException { 14 httpServletRequest.setAttribute("username","root"); 15 httpServletRequest.getRequestDispatcher("/WEB-INF/jsp/hello.jsp").forward(httpServletRequest,httpServletResponse); 16 } 17 }
举例:RequestMappingHandlerMapping与RequestMappingHandlerAdapter
spring-config.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 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"> 6 7 <context:component-scan base-package="com.gec.controller"/> 8 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> 9 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> 10 11 <!--视图解释器--> 12 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> 13 14 </beans>
Controller中(Handler类)的代码:
1 package com.gec.controller; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.servlet.ModelAndView; 6 7 @Controller 8 public class Hello3Controller { 9 @RequestMapping("/dohello") 10 public ModelAndView doHello(){ 11 ModelAndView modelAndView=new ModelAndView(); 12 modelAndView.addObject("username","root"); 13 modelAndView.setViewName("/WEB-INF/jsp/hello.jsp"); 14 return modelAndView; 15 } 16 }
二、常用注解
1、@RequestMapping
简介
是一个用来处理请求地址映射的注解,可用于类或方法上。用于类
上,表示类中的所有响应请求的方法都是以该地址作为父路径
2、@RequestParam
简介
注解用于绑定请求中的参数到处理方法的参数中
3、@RequestHeader
简介
用于将请求的头信息区数据映射到功能处理方法的参数上
4、@CookieValue
简介
用于将请求的Cookie数据映射到功能处理方法的参数上。
5、@PathVariable
简介
带占位符的URL是Spring3.0新增的功能,通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable("xxx") 绑定到操作方法的入参中。
6、Model和ModelMap
简介
ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于 request对象的setAttribute方法 的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:如何使用可以直接定义到方法参数
7、@SessionAttributes
简介
如果希望在多个请求之间公用某个模型属性数据,则可以在控制器类标注一,@SessionAttributes,SpringMVC会将模型中对应的属性暂存到HttpSerssion中

浙公网安备 33010602011771号