非注解的处理器映射器和适配器

1.非注解的处理器映射器
之前的处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping

[html] view plaincopy
  1. <!-- 配置Handler -->
  2. <bean name="/queryItems_test.action" class="cn.edu.hpu.ssm.controller.ItemsController1" />
  3. <!-- 配置另外一个Handler -->
  4. <!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url)
  5. 所有的映射器都实现 HandlerMapping接口。
  6. -->
  7. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />

介绍另一个映射器:
org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

[html] view plaincopy
  1. <!-- 配置Handler -->
  2. <bean id="itemsController1" name="/queryItems_test.action" class="cn.edu.hpu.ssm.controller.ItemsController1" />
  3. <!-- 配置另外一个Handler -->
  4. <!-- 处理器映射器 将bean的name作为url进行查找 ,需要在配置Handler时指定beanname(就是url)
  5. 所有的映射器都实现 HandlerMapping接口。
  6. -->
  7. <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
  8. <!--简单url映射  -->
  9. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  10. <property name="mappings">
  11. <props>
  12. <!-- 对itemsController1进行url映射,url是/queryItems1.action,1个bean可以配多个url -->
  13. <prop key="/queryItems1.action">itemsController1</prop>
  14. <prop key="/queryItems2.action">itemsController1</prop>
  15. </property>
  16. </bean>

现在同时存在两个映射器,我们分别进行测试,发现访问/queryItems_test.action与访问/queryItems1.action与/queryItems2.action都可以得到正确视图

说明:
多个映射器可以并存,前端控制器判断url能让哪些映射器映射,就让正确的映射器处理。

2.非注解的处理器适配器
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter
要求编写的Handler实现 Controller接口。

[html] view plaincopy
  1. <!-- 处理器适配器
  2. 所有的处理器适配器都实现HandlerAdapter接口-->
  3. <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter
要求编写的Handler实现 HttpRequestHandler接口。

[html] view plaincopy
  1. <!-- 另一个非注解的适配器 -->
  2. <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

ItemsController2:

[html] view plaincopy
  1. package cn.edu.hpu.ssm.controller;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import org.springframework.web.HttpRequestHandler;
  9. import cn.edu.hpu.ssn.po.Items;
  10. //实现Contorller接口的适配器
  11. public class ItemsController2 implements HttpRequestHandler{
  12. @Override
  13. public void handleRequest(HttpServletRequest request, HttpServletResponse response)
  14. throws ServletException, IOException {
  15. //调用Service查找数据库,查询商品列表,这里使用静态数据模拟
  16. List<Items> itemsList=new ArrayList<Items>();
  17. //向List中填充静态数据
  18. Items items_1 = new Items();
  19. items_1.setName("联想笔记本");
  20. items_1.setPrice(6000f);
  21. items_1.setDetail("ThinkPad T430 联想笔记本电脑!");
  22. Items items_2 = new Items();
  23. items_2.setName("苹果手机");
  24. items_2.setPrice(5000f);
  25. items_2.setDetail("iphone6苹果手机!");
  26. itemsList.add(items_1);
  27. itemsList.add(items_2);
  28. //设置模型数据
  29. request.setAttribute("itemsList",itemsList);
  30. //设置转发视图
  31. request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
  32. }
  33. }

测试:
先别忘记在springmvc.xml中配置Handler和处理器映射器

[html] view plaincopy
  1. <!-- 配置另外一个Handler -->
  2. <bean id="itemsController2" class="cn.edu.hpu.ssm.controller.ItemsController2" />
  3. <!--简单url映射  -->
  4. <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
  5. <property name="mappings">
  6. <props>
  7. <!-- 对itemsController1进行url映射,url是/queryItems1.action,1个bean可以配多个url -->
  8. <prop key="/queryItems1.action">itemsController1</prop>
  9. <prop key="/queryItems2.action">itemsController1</prop>
  10. <prop key="/queryItems3.action">itemsController2</prop>
  11. </props>
  12. </property>
  13. </bean>

测试结果如图

新处理器适配器运行结果

//使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据

[html] view plaincopy
  1. <pre name="code" class="java">response.setCharacterEncoding("utf-8");
  2. response.setContentType("application/json;charset=utf-8");
  3. response.getWriter().write("json串");

现在脑子里应该慢慢清晰起来,处理器映射器就是根据URL来找Handler,处理器适配器就是按照它要求的规则(handler instanceof XXX接口)去执行Handler。但是我们发现有些麻烦的就是,一个Handler类中都是一个方法。下次我们就来说注解的映射器和适配器。

4.DispatcherSerlvet.properties

通过以前咱们写的样例,会发现,多个适配器和多个映射器可以并存但是其实你不在springmvc.xml中配置适配器,也可以正常运行程序。因为在SpringMVC的jar包中含有一个默认配置文件,如果没有在springmvc.xml配置,就默认使用DispatcherSerlvet.properties的配置如图

打开DispatcherSerlvet.properties:

[plain] view plaincopy
  1. # Default implementation classes for DispatcherServlet's strategy interfaces.
  2. # Used as fallback when no matching beans are found in the DispatcherServlet context.
  3. # Not meant to be customized by application developers.
  4. org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver
  5. org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
  6. org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
  7. org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
  8. org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
  9. org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
  10. org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
  11. org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
  12. org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
  13. org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
  14. org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
  15. org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
  16. org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

可以看到,其中BeanNameUrlHandlerMapping和HttpRequestHandlerAdapter咱们之前都用到过,

这些都是非注解的处理器映射器和适配器,那些DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter都是注解的处理器映射器和适配器

前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。

【SpringMVC框架】非注解的处理器映射器和适配器相关推荐

  1. 【SpringMVC框架】注解的处理器映射器和适配器配置

    下面我们来探讨注解的处理器映射器和适配器 1.注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.De ...

  2. SpringMVC - 非注解的处理器映射器和适配器

    为什么80%的码农都做不了架构师?>>>    一.非注解的处理器映射器 提供的处理器有两个属性.一个是id属性,一个是name属性.分别对应两种不同的映射器. <bean i ...

  3. 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)

    非注解的处理器映射器和适配器 非注解的处理器映射器 之前的入门Demo中使用的就是非注解的处理器映射器: org.springframework.web.servlet.handler.BeanNam ...

  4. SpringMVC学习记录二——非注解和注解的处理器映射器和适配器

    3      非注解的处理器映射器和适配器 3.1      非注解的处理器映射器 处理器映射器: org.springframework.web.servlet.handler.BeanNameUr ...

  5. 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化

    管理springmvc组件 概述 在使用springmvc时要配置哪些东西 前端控制器 控制器映射器和适配器 映射器  Map<Set<String>,Object> Set& ...

  6. SpringMVC 配置注解的映射器、适配器(重点)

    开发中实际用到的方式,是配置注解的映射器适配器. >配置 mvc:annotation-driven元素 在3.1之后的注解的处理器映射器.适配器添加了很多的优化以及参数设置,所以在开发时,推荐 ...

  7. SpringMvc 03 非注解形式下的映射器与适配器

        1,映射器 1.1 ControllerBean +BeanNameUrlHandlerMapping              其中ControllerBean 需要指明name(url)通 ...

  8. SpringMVC 处理器映射器详解

    0x00:介绍 关于 SPring MVC 的详细介绍可参考之前的文章,SpringMVC 工作原理. 在 SpringMVC 中,处理器映射器有两种配置方式,一种是基于 XML 的资源配置,也就是常 ...

  9. SpringMvc 04 基于注解的映射器与适配器配置

    SpringMvc的两种基于注解的映射器与适配器配置: 1.通过显式的配置映射器与适配器,并通过自动扫描标签去加载Controller类. <?xml version="1.0&quo ...

最新文章

  1. 在Ubuntu 14.04 64上安装gevent_zeromq-0.2.5
  2. iOS OC和Swift混编
  3. 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”(转贴)...
  4. OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
  5. Android --- 怎么把其他类型的数据转换成 Json 字符串
  6. morlet小波matlab代码,morlet小波matlab程序
  7. Android-JSNative交互的几种可行性方案H5白屏问题解决方式
  8. vb 数组属性_VB中菜单编辑器的使用讲解及实际应用
  9. 哪些专业是毕业即失业?
  10. 【转】虚拟机下安装小红帽Linux9.0图解
  11. BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*
  12. opencv多摄像头配准_CV 两幅图像配准
  13. 袁亚湘院士上《开讲啦》变数学魔术啦!
  14. 谷歌浏览器开启深色模式
  15. Event representations with tensor-based compositions笔记
  16. joc杂志影响因子2019_2020 年公布的 SCI 期刊影响因子排名有哪些亮点和槽点?
  17. windows7在安装vc14的时候报错(0x80240017)
  18. html如何设置网页的背景图片,使放大或缩小浏览器时,页面排版和背景可以随浏览器放大缩小而排版不会改变,
  19. 找出100以内的素数
  20. ie11 java 下载文件_Javaweb实现上传下载文件的多种方法

热门文章

  1. web前端技术亮点_Web前端开发职业技术要求规划
  2. 基于prometheus + grafana + mysql + Telegram 监控告警
  3. NGUI的输入框的校验(input filed script)
  4. PHP利用PDO从mysql读取大量数据处理(可做大量数据集的导出,业务调整等)
  5. django处理静态文件
  6. Php连接及读取和写入mysql数据库的常用代码
  7. javascript frame框架间函数变量的相互引用 frame间相互传值
  8. win7 lnk 图标丢失——图片缓存问题
  9. 2012-01-09_1
  10. 2018.09.17-2018.09.23