SpringMVC注解的映射器和适配器
来源:互联网 发布:python 函数自动补全 编辑:程序博客网 时间:2024/04/25 07:14
注解的处理器映射器和注解适配器
首先我们来看一下DispatcherServlet默认加载的配置文件信息。
# 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.FixedThemeResolver//默认配置的处理器映射器,一个是按照bean的name作为url查找,一个是注解//默认使用的注解处理器映射器已经过时了。默认使用的是SpringMVC3.1之前的。org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\ org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping//默认配置了两个适配器,一个是要实现Controller接口的适配器,一个是要实现HttpRequestHandler接口的适配器。当然还有注解类。//默认使用的注解适配器已经过时了,默认使用的是SpringMVC3.1之前的。org.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
注解处理器映射器
在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注解适配器。
配置注解映射器和注解适配器
在SpringMVC核心配置文件(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 默认加载很多的参数绑定方法, 比如json转换解析器就默认加载了,如果使用 mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter 实际开发时使用 mvc:annotation-driven--><mvc:annotation-driven></mvc:annotation-driven>
开发注解Handler
使用注解的映射器和注解的适配器。(注解的映射器和注解的适配器必须配对使用)
//这里使用Controller标识它是一个控制器@Controllerpublic class ItemsListControllerByAnnotation { /** * @RequestMapping 实现对showItemsListByAnnotation方法和url进行映射,一个方法对应一个url * 一般建议将url和方法写成一样 * 如果想要/showItemsListByAnnotation进行访问,你必须把Servlet的url-pattern值设置为"/",并且@RequestMapping的值为"/showItemsListByAnnotation" * @return * @throws Exception */ @RequestMapping("/showItemsListByAnnotation.action") public ModelAndView showItemsListByAnnotation() throws Exception{ /* * 调用service查找数据库,查询商品列表,这里使用静态数据模拟。 */ List<Item> items=new ArrayList<Item>(); items.add(new Item("FireLang", 456.65, "技匠", null, new Date())); //创建ModelAndView ModelAndView modelAndView=new ModelAndView(); //相当于 request 的 setAttribut,在jsp页面通过itemsList获取数据。 modelAndView.addObject("itemsList", items); //指定跳转视图 //为了安全起见(必须在我们的允许范围内访问视图),所以我们把视图放在了WEB-INF目录下。 modelAndView.setViewName("/WEB-INF/content/itemsList.jsp"); return modelAndView; }}
/* * 在Handler里面 @RequestMapping 不仅可以写在方法上面也可以写在类上面。这样就是在访问类里面的每个 * 方法url时,都必须加上类上@RequestMapping的value定义的前缀。通常类中的@RequestMapping也要加"/",如"/user" */
如果想要限定请求方式来访问Handler可以这样写注解:
//这里使用Controller标识它是一个控制器@Controllerpublic class ItemsListControllerByAnnotation { /** * RequestMapping 实现对showItemsListByAnnotation方法和url进行映射,一个方法对应一个url * 一般建议将url和方法写成一样 * @return * @throws Exception */ @RequestMapping(value="/showItemsListByAnnotation.action",method={RequestMethod.POST}) //看这里!!!!!!!!!!!!!!!!!!! public ModelAndView showItemsListByAnnotation() throws Exception{ /* * 调用service查找数据库,查询商品列表,这里使用静态数据模拟。 */ List<Item> items=new ArrayList<Item>(); items.add(new Item("FireLang", 456.65, "技匠", null, new Date())); //创建ModelAndView ModelAndView modelAndView=new ModelAndView(); //相当于 request 的 setAttribut,在jsp页面通过itemsList获取数据。 modelAndView.addObject("itemsList", items); //指定跳转视图 //为了安全起见(必须在我们的允许范围内访问视图),所以我们把视图放在了WEB-INF目录下。 modelAndView.setViewName("/WEB-INF/content/itemsList.jsp"); return modelAndView; }}
如果你是直接转发返回一个页面或者转发一个url路径,你可以这样写:
@RequestMapping(value="/showItemsListByAnnotationInsert.action",method={RequestMethod.GET}) public String showItemsListByAnnotationInsert() throws Exception{ /* * 返回一个视图的路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View,所以你可以通过"forward:"或者"redirect:"指定是返回页面方式是转发还是重定向。 */ return "/WEB-INF/content/itemsList.jsp"; }
转发一个url路径:
@RequestMapping(value="/showItemsListByAnnotationInsert.action",method={RequestMethod.GET}) public String showItemsListByAnnotationInsert() throws Exception{ /* * 返回一个视图的路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View,所以你可以通过"forward:"或者"redirect:"指定是返回页面方式是转发还是重定向。 */ return "/showItemsListByAnnotation.action"; }
另外说一下,在SpringMVC核心配置文件中的url通配符,在这里也是管用的:
@RequestMapping(value="/showItemsListByAnnotationUpdate*.action",method={RequestMethod.GET})//这里有两种通配符,一种是*,用来匹配>=0个字符,一个是?用来匹配一个字符,注意这一个字符是必须匹配一个!!! public String showItemsListByAnnotationUpdate() throws Exception{ /* * 返回一个视图的路径,通过视图解析器解析该字符串成一个视图对象。也就是说该路径就是ModelAndView中的View */ return "/showItemsListByAnnotation.action"; }
/* * 下面来几个示例: * langx*.action是拦截 以langx为前缀的.action请求!!! * *.action是拦截所有的.action请求,如果在xml中进行配置,你需要把该配置放在处理器映射器的第一位。 * user/*/*.action 是拦截所有的 user/的请求,但是有个规则:你必须 user/这里的字符大于等于1个/*.action ,所以最多拦截一层user请求,而且也是必须拦截一层请求!!! * user/**/*.action 是拦截一切的user路径请求,不论层级关系。如:user/sdfs/*.action或者user/sdfsd/sdfgfg/sdfdsfs/*.action都是可以的!!! */
在spring容器中加载Handler
<!-- 对于注解的Handler可以单个配置 实际开发中建议使用组件扫描--><!-- <bean class="cn.domarvel.controller.ItemsListControllerByAnnotation"/> --><!-- 可以扫描Controller、Service、Component等注解 这里扫描Controller,首先指定JavaBean的包 --> <context:component-scan base-package="cn.domarvel.controller"></context:component-scan>
注意:
通过注解来进行处理器的处理器映射和处理器适配的时候,必须通过@Controller注解来生成JavaBean对象。也就是说,我们通过@RequestMapping("/showItemsListByAnnotation.action")
配置了该处理器的处理器映射和处理器适配,我们就必须通过@Controller注解来生成JavaBean对象。
为什么必须是@Controller这个注解??而不是@Component,@Service等创建bean对象的注解??
答:因为注解是一个标记,标记懂吧!!而我们用注解时,Handler根本就没有实现任何接口,继承任何类,所以为什么用@Controller这个标记就很明白了,因为Spring只会找有@Controller这个标记的类作为Handler。然后通过注解的处理器映射器找到处理器,再通过注解的适配器执行该Handler!!
1 0
- SpringMVC注解的映射器和适配器
- springmvc 注解的适配器和映射器的配置
- springmvc 注解的适配器和映射器的配置
- springmvc注解映射器和适配器配置
- 【SpringMVC框架】非注解的处理器映射器和适配器
- 【SpringMVC框架】注解的处理器映射器和适配器配置
- springmvc(三)注解的处理器映射器和适配器
- 【SSM-SpringMVC框架】注解的处理器适配器和映射器
- 【SpringMVC框架】非注解的处理器映射器和适配器
- 【SpringMVC框架】注解的处理器映射器和适配器配置
- SpringMVC - 非注解的处理器映射器和适配器
- SpringMVC - 注解的适配器和映射器配置
- SpringMVC非注解的处理映射器和适配器
- springMVC的前端控制器、注解适配器和映射器
- springmvc非注解的处理器映射器和适配器
- springmvc注解的处理器映射器和适配器
- springmvc(4)--注解的处理器映射器和适配器
- 非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)
- python之小错误2
- iBatis学习教程(经典)
- Hadoop完全分布式搭建 【可行】
- 腾讯后台实习面试
- 字符串包含,java
- SpringMVC注解的映射器和适配器
- codeVS 1031 质数环
- 【HTML5学习笔记】5:表格元素的使用
- 手把手教你开发基于深度学习的人脸识别【考勤/签到】系统
- redis源码安装
- 【GraphViz】GraphViz的使用以及Java调用GraphViz生成结构化图(windows)
- 43. 「Loi57 test 2017.4.22」单词
- n-1位数
- cogs896 圈奶牛(凸包)