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中

posted @ 2020-10-19 20:04  蓝景钊  阅读(145)  评论(0)    收藏  举报