【SpringMVC框架】非注解的处理器映射器和适配器
非注解的处理器映射器和适配器
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{
- @Override
- public 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.AcceptHeaderLocaleResolver
- org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver
- org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\
- org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
- org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\
- org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\
- org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
- org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerExceptionResolver,\
- org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\
- org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver
- org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator
- org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver
- org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager
可以看到,其中BeanNameUrlHandlerMapping和HttpRequestHandlerAdapter咱们之前都用到过,
这些都是非注解的处理器映射器和适配器,那些DefaultAnnotationHandlerMapping、AnnotationMethodHandlerAdapter都是注解的处理器映射器和适配器
前端控制器从上边的文件中加载处理映射器、适配器、视图解析器等组件,如果不在springmvc.xml中配置,使用默认加载的。
【SpringMVC框架】非注解的处理器映射器和适配器相关推荐
- 【SpringMVC框架】注解的处理器映射器和适配器配置
下面我们来探讨注解的处理器映射器和适配器 1.注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.De ...
- SpringMVC - 非注解的处理器映射器和适配器
为什么80%的码农都做不了架构师?>>> 一.非注解的处理器映射器 提供的处理器有两个属性.一个是id属性,一个是name属性.分别对应两种不同的映射器. <bean i ...
- 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)
非注解的处理器映射器和适配器 非注解的处理器映射器 之前的入门Demo中使用的就是非注解的处理器映射器: org.springframework.web.servlet.handler.BeanNam ...
- SpringMVC学习记录二——非注解和注解的处理器映射器和适配器
3 非注解的处理器映射器和适配器 3.1 非注解的处理器映射器 处理器映射器: org.springframework.web.servlet.handler.BeanNameUr ...
- 管理springmvc组件——前端控制器、控制器映射器和适配器、视图解析器、文件上传的、拦截器||消息转化
管理springmvc组件 概述 在使用springmvc时要配置哪些东西 前端控制器 控制器映射器和适配器 映射器 Map<Set<String>,Object> Set& ...
- SpringMVC 配置注解的映射器、适配器(重点)
开发中实际用到的方式,是配置注解的映射器适配器. >配置 mvc:annotation-driven元素 在3.1之后的注解的处理器映射器.适配器添加了很多的优化以及参数设置,所以在开发时,推荐 ...
- SpringMvc 03 非注解形式下的映射器与适配器
1,映射器 1.1 ControllerBean +BeanNameUrlHandlerMapping 其中ControllerBean 需要指明name(url)通 ...
- SpringMVC 处理器映射器详解
0x00:介绍 关于 SPring MVC 的详细介绍可参考之前的文章,SpringMVC 工作原理. 在 SpringMVC 中,处理器映射器有两种配置方式,一种是基于 XML 的资源配置,也就是常 ...
- SpringMvc 04 基于注解的映射器与适配器配置
SpringMvc的两种基于注解的映射器与适配器配置: 1.通过显式的配置映射器与适配器,并通过自动扫描标签去加载Controller类. <?xml version="1.0&quo ...
最新文章
- 在Ubuntu 14.04 64上安装gevent_zeromq-0.2.5
- iOS OC和Swift混编
- 解决“由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题”(转贴)...
- OpenCV之imgproc 模块. 图像处理(3)霍夫线变换 霍夫圆变换 Remapping 重映射 仿射变换
- Android --- 怎么把其他类型的数据转换成 Json 字符串
- morlet小波matlab代码,morlet小波matlab程序
- Android-JSNative交互的几种可行性方案H5白屏问题解决方式
- vb 数组属性_VB中菜单编辑器的使用讲解及实际应用
- 哪些专业是毕业即失业?
- 【转】虚拟机下安装小红帽Linux9.0图解
- BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*
- opencv多摄像头配准_CV 两幅图像配准
- 袁亚湘院士上《开讲啦》变数学魔术啦!
- 谷歌浏览器开启深色模式
- Event representations with tensor-based compositions笔记
- joc杂志影响因子2019_2020 年公布的 SCI 期刊影响因子排名有哪些亮点和槽点?
- windows7在安装vc14的时候报错(0x80240017)
- html如何设置网页的背景图片,使放大或缩小浏览器时,页面排版和背景可以随浏览器放大缩小而排版不会改变,
- 找出100以内的素数
- ie11 java 下载文件_Javaweb实现上传下载文件的多种方法
热门文章
- web前端技术亮点_Web前端开发职业技术要求规划
- 基于prometheus + grafana + mysql + Telegram 监控告警
- NGUI的输入框的校验(input filed script)
- PHP利用PDO从mysql读取大量数据处理(可做大量数据集的导出,业务调整等)
- django处理静态文件
- Php连接及读取和写入mysql数据库的常用代码
- javascript frame框架间函数变量的相互引用 frame间相互传值
- win7 lnk 图标丢失——图片缓存问题
- 2012-01-09_1
- 2018.09.17-2018.09.23