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

一.处理器映射器

1.BeanNameUrlHandlerMapping

<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>

Handler的实现:

<!-- 配置Handler -->
<bean name="/queryItems.action" class="com.MrChengs.controller.ItemsController"></bean>

2.SimpleUrlHandlerMapping

<!-- 处理器映射器2 -->
<bean id="itemsController" class="com.MrChengs.controller.ItemsController"></bean>
<bean  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/queryItems1.action">itemsController</prop><prop key="/queryItems2.action">itemsController</prop></props></property>
</bean>

  

此时可以访问一下两个都可以得到结果

queryItems1.action
queryItems2.action

 注意:   多个映射器可以并存,前端控制器判断能让那些映射器映射,就让正确的映射器处理。

 二.处理器适配器

1.SimpleControllerHandlerAdapter

<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>

注意: 要求是编写的Handler必须实现Controller接口

public class ItemsController implements Controller {
...
}

  

2.HttpRequestHandlerAdapter

<!-- 处理器适配器2 -->
<!-- 要求编写的Handler实现 HttpRequestHandler接口。 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

  

看源码:

可以看出这个类需要实现 HttpRequestHandler 接口

public class ItemsController2 implements HttpRequestHandler {@Overridepublic void handleRequest(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {List<Items> itemsList = new ArrayList<Items>();//向list中填充静态数据
           Items items_1 = new Items();items_1.setName("手机");items_1.setPrice(6000f);items_1.setDetail("这是一个新的手机");
//设置模型数据arg0.setAttribute("itemsList", itemsList);//设置转发视图arg0.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(arg0, arg1);}
}

在springmvc.xml

<!-- 处理器适配器2 -->
<!-- 要求编写的Handler实现 HttpRequestHandler接口。 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>
<bean id="itemsController2" class="com.MrChengs.controller.ItemsController2"></bean><bean  class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/queryItems1.action">itemsController</prop><prop key="/queryItems2.action">itemsController</prop>
                <prop key="/queryItems3.action">itemsController2</prop>
           </props></property>
</bean>

访问上面红色的地址即可得到正确的答案!!

使用此方法可以通过修改response,设置响应的数据格式,比如响应json数据
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

关于DispatcherServlet.properties

在springmvc中去除这些代码依然可以执行

<!-- 处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean>
<!-- 处理器适配器2 -->
<!-- 要求编写的Handler实现 HttpRequestHandler接口。 -->
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"></bean>

# 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

在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。
在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。
在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。
在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

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

 1.配置注解映射器/适配器

在springmvc.xml文件

<!-- 注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean>
<!-- 注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<!--
mvc:annotation-driven:
代替上面注解映射器&注解适配器的配置
其默认加载很多的参数绑定方法
实际开发使用mvc:annotation-driven
-->
<mvc:annotation-driven></mvc:annotation-driven>

2.Handler

@Controller
写在类的上面,标注其是一个注解
@Controller
public class ItemsController3{//商品查询@RequestMapping("/queryItemsByMapping")public ModelAndView queryItems() throws Exception{List<Items> itemsList = new ArrayList<Items>();//向list中填充静态数据
           Items items_1 = new Items();items_1.setName("手机");items_1.setPrice(6000f);items_1.setDetail("这是一个手机");
itemsList.add(items_1);ModelAndView modelAndView = new ModelAndView();//相当于request的setAttributemodelAndView.addObject("itemsList", itemsList);//指定视图modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");return modelAndView;}
}

//@RequestMapping实现 对queryItems方法和url进行映射,一个方法对应一个url
//一般建议将url和方法写成一样

3.在容器中加载Handler

<!-- 对于注解的Handler可以单独配置 -->
<!-- 建议使用组建扫描...... -->
<context:component-scan base-package="com.MrChengs"></context:component-scan>

测试时访问@RequestMapping("/queryItemsByMapping")中的queryItemsByMapping

源码追踪一探究竟:

小结:

前端控制器配置:
第一种:*.action,访问以.action结尾 由DispatcherServlet进行解析
第二种:/,所以访问的地址都由DispatcherServlet进行解析,对于静态文件的解析需
要配置不让DispatcherServlet进行解析使用此种方式可以实现 RESTful风格的url
<mvc:annotation-driven></mvc:annotation-driven>可以代替下边的配置:

<!--注解映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
<!--注解适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> 

实际开实际开发使用:mvc:annotation-driven

视图解析器配置前缀和后缀:

<!-- 视图显示器 -->
<!-- 解析jsp视图 -->
<!-- 默认使用jstl的包 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    <property name="prefix" value="/WEB-INF/jsp/items"></property><property name="suffix" value=".jsp"></property>
</bean>

@Controller
public class ItemsController3{@RequestMapping("/queryItemsByMapping")public ModelAndView queryItems() throws Exception{......//指定视图 modelAndView.setViewName("/itemsList");return modelAndView;}
}

  

到这里基本的就结束了...

转载于:https://www.cnblogs.com/Mrchengs/p/9940491.html

springmvc(2)处理器设配器和映射器相关推荐

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

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

  2. SSM-SpringMVC-07:SpringMVC中处理器映射器

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping BeanN ...

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

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

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

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

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

    非注解的处理器映射器和适配器 1.非注解的处理器映射器 之前的处理器映射器: org.springframework.web.servlet.handler.BeanNameUrlHandlerMap ...

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

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

  7. SpringMVC处理器映射器HandlerMapping

    前言 在SpringMVC中会有很多请求,每个请求都需要一个HandlerAdapter处理,具体接收到一个请求之后使用哪个HandlerAdapter进行处理呢,他们的过程是什么.本文将对此问题进行 ...

  8. springmvc自定义处理器映射器和处理器适配器

    springmvc通过处理器映射器(HandlerMapping)和处理器适配器(HandlerAdapter)来处理http请求,当一个请求经过DispatcherServlet后,Dispatch ...

  9. SpringMVC 处理器映射器详解

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

最新文章

  1. 矿Spring入门Demo
  2. [bbk2908]第4集 - Chapter 03 - 介绍RAC的体系结构
  3. 电商领袖战:马云虚,东哥实
  4. DOS 入侵、群发邮件、心脏起搏器……病毒攻击简史!
  5. Go WebSocket开发与测试实践【gorilla/websocket】
  6. matlab里面画离散信号怎么画_一、基本离散信号的MATLAB产生和图形实现
  7. 51单片机中外部中断使用示例(Protues仿真)
  8. Studio3T连接远程服务器上的mongo数据库
  9. 图灵奖得主都写过哪些书?
  10. [人脸关键点检测] Wing loss 论文解读
  11. Vimium --- 将你的Chrome变成Vim
  12. threejs 特效 自定义发光围栏,发光墙体,闪烁动画
  13. 2015合肥市第 32 届青少年信息学(计算机)奥林匹克竞赛小学组试题
  14. android 摄像头检测工具,检摄app下载-检摄软件(检测摄像头)下载 v1.0.7安卓版_5577安卓网...
  15. java.util.Date的getYear()
  16. 计算机窗口演示,认识电脑窗口
  17. Java基于springboot+vue的流浪动物救助收养平台 nodejs 前后端分离
  18. 聚类分析:原型K-Means/K-Means++聚类、层次聚类;密度聚类DBSCAN
  19. HTML入门---慕课网
  20. 服务器内存 知乎_内存的差距——服务器内存和普通PC内存的区别

热门文章

  1. osEye.Net:离别是为了将来的重逢
  2. WEB——LNMP服务搭建
  3. 在html里ff3d3d是什么颜色,HTML一些颜色方面的参考
  4. python docx 字体设置_python docx 中文字体设置
  5. 微信答题小程序开发功能概述
  6. linux常用面试题
  7. 微商相册服务器维护,微商相册
  8. 主板bios密码清除案例
  9. Ubuntu系统显示实时网速信息
  10. 通过puppet hiera配置bigtop大数据集群