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

非注解的处理器映射器

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

  2. 另一种非注解的处理器映射器:
    org.springframework.web.servlet.handler.SimpleUrlHandlerMapping

    <!-- 配置Handler --><bean id="itemsController1" class="com.huihui.controller.ItemsController1" /><!-- 配置简单url处理器映射器 --><bean
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"><property name="mappings"><props><prop key="/queryItems1.action">itemsController1</prop><prop key="/queryItems2.action">itemsController1</prop></props></property></bean>

进行这个配置之后,访问
http://localhost:8080/SpringMVCFirst/queryItems1.action

http://localhost:8080/SpringMVCFirst/queryItems2.action
都会进入商品列表的jsp页面。

非注解的处理器适配器

  1. 之前的入门Demo中使用的就是非注解的处理器适配器:
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,
    查看该适配器的源码:

    可以发现,所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean通过此适配器进行适配、执行才可以。
  2. 另一种处理器适配器:
    org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,
    查看该适配器的源码:

    可以发现,所有实现了org.springframework.web.HttpRequestHandler 接口的Bean通过此适配器进行适配、执行才可以。
    这种处理器适配器的Handler实现如下:
public class ItemsController1 implements HttpRequestHandler{@Overridepublic 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("/jsp/items/itemsList.jsp").forward(request, response);}
}

从上边可以看出此适配器的handleRequest方法类似于原始的Servlet,通过这种方式可以设置response响应内容,比如返回json数据:

response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

DispatcherSerlvet.properties

如果不配置springmvc.xml文件,应用程序照样可以正常运行。原因是:
在web.xml中配置的前端控制器org.springframework.web.servlet.DispatcherServlet的包中存在DispatcherSerlvet.properties。

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

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

在spring3.1之前和spring3.1之后的版本中使用的注解方式的处理器映射器和处理器适配器有所不同:

  1. 注解方式使用的处理器映射器:
    在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping注解映射器。
    在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping注解映射器。

  2. 注解方式使用的处理器适配器:
    在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter注解适配器。
    在spring3.1之后使用org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter注解适配器。

第一步:配置注解的映射器和适配器

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

注意:
springmvc使用<mvc:annotation-driven>自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在springmvc.xml配置文件中使用<mvc:annotation-driven>替代上面配置的注解处理器和适配器的配置。
<mvc:annotation-driven>默认还加载很多的参数绑定方法,比如json转换解析器就默认加载了。实际开发中我们一般使用<mvc:annotation-driven>

第二步:开发Handler(使用注解的方式)


使用@Controller注解标识它是一个控制器。也就相当于之前没有使用注解开发的Hander中的:

@Controller
public class ItemsController2 {//商品查询列表//@RequestMapping实现对queryItmes方法和url进行映射,一个方法对应一个url。一般建议将url和方法名写成一样@RequestMapping("/queryItems")public ModelAndView queryItems() throws Exception{//调用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);//返回ModelAndViewModelAndView modelAndView = new ModelAndView();//相当于request的setAttribute()方法,以后在jsp页面中可以通过itemsList取数据modelAndView.addObject("itemsList", itemsList);//指定视图modelAndView.setViewName("/jsp/items/itemsList.jsp");return modelAndView;}
}

第三步:配置Handler

第一种方式:
可以使用与原来的配置Handler的方式一样,一个一个的在springmvc.xml中配置Handler。

<!-- 配置Handler --><bean class="com.huihui.controller.ItemsController2"/>

但是这种方式存在一个问题:如果开发了很多个Handler,那么就要挨个在springmvc.xml中进行配置,非常的繁琐。下面这种方式解决了这个问题。

第二种方式:
组件扫描器可以扫描controller、service……
使用组件扫描器省去在spring容器配置每个controller类的繁琐。使用<context:component-scan/>自动扫描标记@controller的控制器类,配置如下:

    <!-- 扫描controller注解,base-package指定要扫描的包。多个包中间使用半角逗号分隔 --><context:component-scan base-package="com.huihui.controller"/>

第四步:部署访问

非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)相关推荐

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

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

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

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

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

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

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

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

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

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

  6. springMVC学习笔记(二)-----注解和非注解入门小程序

    阅读目录 一:基础环境准备 二:非注解的处理器和映射器 三:注解的处理器映射器和适配器 四:springmvc.xml中的内容以及项目工程目录 最近一直在做一个电商的项目,周末加班,忙的都没有时间更新 ...

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

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

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

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

  9. 处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)

    非注解 处理器映射器 和 处理器适配器 处理器映射器: 第一种: BeanNameUrlHandlerMapping <!-- 配置Handler --> <bean id=&quo ...

最新文章

  1. Hibernate 缓存
  2. Keras深度学习框架介绍(结束)
  3. mysql查询语句4,MySQL(4):CRUD语句(2)——基本查询
  4. matlab实现二项分布
  5. 开发人员转售前工程师_工程师和营销人员可以从中学到什么
  6. FreeTextBox使用详解
  7. 菜鸟进阶Linux高手之路——第四天(下)
  8. Java来做马里奥[0]—让精灵再次舞动
  9. android 主题是什么,什么是Android中的AppCompat主题?
  10. MAYA安装未完成,某些产品无法安装的解决方法
  11. Vue Router系列之 route 和 router 的区别
  12. android中RecyclerView添加下划线
  13. 2021-04-15 三级管npn和pnp的区别
  14. [译]基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
  15. 一文看尽 CVPR 2022 最新 20 篇 Oral 论文
  16. 电脑记账最简单的方法
  17. iOS 根据银行卡号判断银行名称
  18. 2018年秋季校招投递记录
  19. IDEA打字冒火花教程
  20. 使用fiddler手机微信小程序抓包

热门文章

  1. iview中嵌套使用tabs注意事项
  2. .attr()与.removeAttr()
  3. 多个独立的forEach循环, 内部处理条件是一样,代码优化方案
  4. 分享一个关于Java调用百度、高德API、ArcGIS地图获取逆地理的代码
  5. boost多线程使用简例
  6. php中qq授权登录,ThinkPHP利用QQ互联实现网站第三方登录(QQ登录)
  7. 授人以鱼不如授人以渔——CPU漏洞的Symantec解决之道
  8. Vagrant+VirtualBox版本的坑
  9. shell 与 空格
  10. tpshop防止sql注入补丁