【SpringMVC框架】非注解的处理器映射器和适配器
来源:互联网 发布:android 办公源码 编辑:程序博客网 时间:2024/04/24 05:58
非注解的处理器映射器和适配器
1.非注解的处理器映射器
之前的处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
介绍另一个映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
现在同时存在两个映射器,我们分别进行测试,发现访问/queryItems_test.action与访问/queryItems1.action与/queryItems2.action都可以得到正确视图
说明:
多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。
2.非注解的处理器适配器
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现 Controller接口。
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
要求编写的Handler实现 HttpRequestHandler接口。
测试:
先别忘记在springmvc.xml中配置Handler和处理器映射器
//使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
可以看到,其中BeanNameUrlHandlerMapping和HttpRequestHandlerAdapter咱们之前都用到过,
这些都是非注解的处理器映射器和适配器,那些DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter都是注解的处理器映射器和适配器
前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。
1.非注解的处理器映射器
之前的处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping
<!-- 配置Handler --><bean name="/queryItems_test.action" class="cn.edu.hpu.ssm.controller.ItemsController1" /><!-- 配置另外一个Handler --><!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 HandlerMapping接口。--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
介绍另一个映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
<!-- 配置Handler --><bean id="itemsController1" name="/queryItems_test.action" class="cn.edu.hpu.ssm.controller.ItemsController1" /><!-- 配置另外一个Handler --><!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url) 所有的映射器都实现 HandlerMapping接口。--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><!--简单url映射 --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><!-- 对itemsController1进行url映射,url是/queryItems1.action,1个bean可以配多个url --><prop key="/queryItems1.action">itemsController1</prop><prop key="/queryItems2.action">itemsController1</prop></property></bean>
现在同时存在两个映射器,我们分别进行测试,发现访问/queryItems_test.action与访问/queryItems1.action与/queryItems2.action都可以得到正确视图
说明:
多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。
2.非注解的处理器适配器
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现 Controller接口。
<!-- 处理器适配器 所有的处理器适配器都实现HandlerAdapter接口--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
要求编写的Handler实现 HttpRequestHandler接口。
<!-- 另一个非注解的适配器 --><bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>ItemsController2:
package cn.edu.hpu.ssm.controller;import java.io.IOException;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.HttpRequestHandler;import cn.edu.hpu.ssn.po.Items;//实现Contorller接口的适配器public class ItemsController2 implements HttpRequestHandler{@Overridepublic void handleRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//调用Service查找数据库,查询商品列表,这里使用静态数据模拟List<Items> itemsList=new ArrayList<Items>();//向List中填充静态数据Items items_1 = new Items();items_1.setName("联想笔记本");items_1.setPrice(6000f);items_1.setDetail("ThinkPad T430 联想笔记本电脑!");Items items_2 = new Items();items_2.setName("苹果手机");items_2.setPrice(5000f);items_2.setDetail("iphone6苹果手机!");itemsList.add(items_1);itemsList.add(items_2);//设置模型数据request.setAttribute("itemsList",itemsList);//设置转发视图request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);}}
测试:
先别忘记在springmvc.xml中配置Handler和处理器映射器
<!-- 配置另外一个Handler --><bean id="itemsController2" class="cn.edu.hpu.ssm.controller.ItemsController2" /><!--简单url映射 --><bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><!-- 对itemsController1进行url映射,url是/queryItems1.action,1个bean可以配多个url --><prop key="/queryItems1.action">itemsController1</prop><prop key="/queryItems2.action">itemsController1</prop><prop key="/queryItems3.action">itemsController2</prop></props></property></bean>
测试结果如图
新处理器适配器运行结果
//使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
<pre name="code" class="java">response.setCharacterEncoding("utf-8");response.setContentType("application/json;charset=utf-8");response.getWriter().write("json串");
现在脑子里应该慢慢清晰起来,处理器映射器就是根据URL来找Handler,处理器适配器就是按照它要求的规则(handler instanceof XXX接口)去执行Handler。但是我们发现有些麻烦的就是,一个Handler类中都是一个方法。下次我们就来说注解的映射器和适配器。
4.DispatcherSerlvet.properties
通过以前咱们写的样例,会发现,多个适配器和多个映射器可以并存但是其实你不在springmvc.xml中配置适配器,也可以正常运行程序。因为在SpringMVC的jar包中含有一个默认配置文件,如果没有在springmvc.xml配置,就默认使用DispatcherSerlvet.properties的配置如图
打开DispatcherSerlvet.properties:
# Default implementation classes for DispatcherServlet's strategy interfaces.# Used as fallback when no matching beans are found in the DispatcherServlet context.# Not meant to be customized by application developers.org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolverorg.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolverorg.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMappingorg.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapterorg.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolverorg.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslatororg.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolverorg.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
可以看到,其中BeanNameUrlHandlerMapping和HttpRequestHandlerAdapter咱们之前都用到过,
这些都是非注解的处理器映射器和适配器,那些DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter都是注解的处理器映射器和适配器
前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。
转载请注明出处:http://blog.csdn.net/acmman/article/details/46968939
0 0
- 【SpringMVC框架】非注解的处理器映射器和适配器
- 【SpringMVC框架】非注解的处理器映射器和适配器
- SpringMVC - 非注解的处理器映射器和适配器
- springmvc非注解的处理器映射器和适配器
- 【SSM-SpringMVC框架】非注解的处理器适配器和映射器
- 【SpringMVC框架】注解的处理器映射器和适配器配置
- 【SSM-SpringMVC框架】注解的处理器适配器和映射器
- 【SpringMVC框架】注解的处理器映射器和适配器配置
- 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)
- 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)
- SpringMVC_非注解(注解)的处理器映射器和适配器
- 非注解和注解的处理器映射器、适配器配置
- SpringMVC非注解的处理器的映射器和适配器的配置
- springmvc(二)非注解的处理器映射器和适配器
- springmvc学习笔记(2)-非注解的处理器映射器和适配器
- SpringMVC学习之非注解的处理器映射器和适配器
- springmvc(3)--非注解的处理器映射器和适配器
- springmvc学习笔记(2)-非注解的处理器映射器和适配器
- android的布局属性详解
- C#简单总结
- Java学习从入门到精通Java Learning Path
- marquee滚动
- [转]关于GET和POST的区别
- 【SpringMVC框架】非注解的处理器映射器和适配器
- Android开发学习笔记:手机震动控制浅析
- hdu 1814 Peaceful Commission(2-sat)
- 2012年5月SAT香港真题解析
- 职场中的十大低级错误
- Sql Express恢复带ndf文件的数据库
- php 数组转xml
- IOS:MD5加密
- zoj 1586 QS Network