springmvc(2)处理器设配器和映射器
非注解的处理器 映射器 和 适配器
一.处理器映射器
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 {
@Override
public 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>
访问上面红色的地址即可得到正确的答案!!
关于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
注解的处理器映射器和适配器
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
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的setAttribute
modelAndView.addObject("itemsList", itemsList); //指定视图
modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp");
return modelAndView;
}
}
3.在容器中加载Handler
<!-- 对于注解的Handler可以单独配置 -->
<!-- 建议使用组建扫描...... -->
<context:component-scan base-package="com.MrChengs"></context:component-scan>
测试时访问@RequestMapping("/queryItemsByMapping")中的queryItemsByMapping
源码追踪一探究竟:
小结:
<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"/>
视图解析器配置前缀和后缀:
<!-- 视图显示器 -->
<!-- 解析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;
}
}
到这里基本的就结束了...
springmvc(2)处理器设配器和映射器的更多相关文章
- SpringMVC注解配置处理器映射器和处理器适配器
一.springmvc.xml中配置方式 <!--注解映射器 --> <bean class="org.springframework.web.servlet.mvc.me ...
- 【SpringMVC学习03】SpringMVC中注解和非注解方式下的映射器和适配器总结
从上一篇的springmvc入门中已经看到,springmvc.xml中的配置了映射器和适配器,是使用非注解的方式来配置的,这是非注解方式的一种,这里再复习一下: 1. 非注解方式 1.1 处理器适配 ...
- SpringMVC入门案例及请求流程图(关于处理器或视图解析器或处理器映射器等的初步配置)
SpringMVC简介:SpringMVC也叫Spring Web mvc,属于表现层的框架.Spring MVC是Spring框架的一部分,是在Spring3.0后发布的 Spring结构图 Spr ...
- 《SpringMVC从入门到放肆》四、SpringMVC配置式开发(处理器映射器)
上一篇我们讲解了DispatcherServlet的url-pattern配置详解,今天我们来真正对SpringMVC进行配置式开发.所谓配置式开发是指“处理器类是程序员自己定义的.实现了特定接口的类 ...
- SSM-SpringMVC-07:SpringMVC中处理器映射器
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping BeanN ...
- springMVC控制器,处理器,映射器,适配器
前端控制器DispatcherServlet <!--定义spring mvc 的前端控制器Servlet --><servlet> <!--Servlet的名称--&g ...
- SpringMVC的HandlerMapping(处理器映射器)
SpringMvc有四种HandlerMapping:BeanNameUrlHandlerMapping ,SimpleUrlHandlerMapping,ControllerClassNameHan ...
- SpringMVC处理器映射器和方法名称解析器
所谓配置式开发是指,“处理器类是程序员手工定义的,实现了特定接口的类,然后再在SpringMVC配置文件中对该类进行显式的,明确的注册”的开发方式” 1.处理器映射器HandlerMapping Ha ...
- springMVC非注解常用的"处理器映射器"、"适配器"、"处理器"
非注解处理器映射器1. org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping url 到bean name的映射2. or ...
随机推荐
- SEO 小技巧汇总
一.为了提高搜索点击率,还可以 1.为了增加关键词的密度,将关键字隐藏在页面里(将文字颜色定义成与背景颜色一样). 2.在图象的alt注释语句中加入关键字. 如:<IMG SRC=" ...
- asp get与post获取的区别
1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...
- Quartz.Net定时任务简单实用(实例)
一.Quartz.Net是什么? Quartz.Net是一个定时任务框架 二.有Timer了,为什么需要用Quartz.Net? Quartz.Net比Timer使用起来更灵活.例如:每个月最后一个星 ...
- heroku快速部署node应用
试了一下heroku,简直碉堡了,下面介绍如何简单几步实现弄得应用的部署访问: 1.首先https://dashboard.heroku.com/进行账号注册 2.github上push一个最新的no ...
- Springboot简单整合Rabbit
两个项目.分别是生产者和消费者项目 .首先引入依赖.两边pom都一样 第一次练习,启动生产者后,再启动消费者,一直报找不到 队列的声明. 后排查发现是 需要现在生产者这边浏览器访问一次生产消息的方法 ...
- JavaWeb之JSP原理
1.为什么需要JSP? 在很多动态网页中,绝大部分内容都是固定不变的,只有局部内容需要动态产生和改变.如果使用Servlet程序来输出只有局部内容需要改动的网页,其中所有的静态内容也需要程序员用jav ...
- Tomcat服务器使用(二)
1. 打包Javaweb应用 当开发人员在自己的开发机器上调试所有代码并通过后,为了进行产品发布,都需要将开发人员的源码打包成war包进行发布.之前已经了解了jar包,那么war包和jar包的区别是什 ...
- Linux pip 安装模块时,一直黄字错误:Could not find a version that satisfies the requirement
参考原文:https://blog.csdn.net/u012592062/article/details/51966649 这时我们用国内的镜像源来加速 pip install 包名-i http: ...
- JavaEE之Http协议和Tomcat服务器
Http协议 什么是Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol)是互联网上应用最为广泛的 一种网络协议.所有的WWW文件都必须遵守这 ...
- 【Android】10.0 UI开发——如何编写程序界面、常见控件的使用
************************ 转载请注明出处:https://www.cnblogs.com/xiaofu007/p/10331880.html ***************** ...