非注解和注解的处理器映射器和适配器---SpringMVC学习笔记(三)
非注解的处理器映射器和适配器
非注解的处理器映射器
之前的入门Demo中使用的就是非注解的处理器映射器:
org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping另一种非注解的处理器映射器:
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页面。
非注解的处理器适配器
- 之前的入门Demo中使用的就是非注解的处理器适配器:
org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,
查看该适配器的源码:
可以发现,所有实现了org.springframework.web.servlet.mvc.Controller 接口的Bean通过此适配器进行适配、执行才可以。 - 另一种处理器适配器:
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之后的版本中使用的注解方式的处理器映射器和处理器适配器有所不同:
注解方式使用的处理器映射器:
在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注解适配器。
第一步:配置注解的映射器和适配器
<!-- 配置注解方式的处理器映射器 --><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学习笔记(三)相关推荐
- 【SpringMVC框架】非注解的处理器映射器和适配器
非注解的处理器映射器和适配器 1.非注解的处理器映射器 之前的处理器映射器: org.springframework.web.servlet.handler.BeanNameUrlHandlerMap ...
- SpringMVC学习记录二——非注解和注解的处理器映射器和适配器
3 非注解的处理器映射器和适配器 3.1 非注解的处理器映射器 处理器映射器: org.springframework.web.servlet.handler.BeanNameUr ...
- 【SpringMVC框架】注解的处理器映射器和适配器配置
下面我们来探讨注解的处理器映射器和适配器 1.注解的处理器映射器和适配器 在spring3.1之前使用org.springframework.web.servlet.mvc.annotation.De ...
- SpringMVC - 非注解的处理器映射器和适配器
为什么80%的码农都做不了架构师?>>> 一.非注解的处理器映射器 提供的处理器有两个属性.一个是id属性,一个是name属性.分别对应两种不同的映射器. <bean i ...
- SpringMVC 配置注解的映射器、适配器(重点)
开发中实际用到的方式,是配置注解的映射器适配器. >配置 mvc:annotation-driven元素 在3.1之后的注解的处理器映射器.适配器添加了很多的优化以及参数设置,所以在开发时,推荐 ...
- springMVC学习笔记(二)-----注解和非注解入门小程序
阅读目录 一:基础环境准备 二:非注解的处理器和映射器 三:注解的处理器映射器和适配器 四:springmvc.xml中的内容以及项目工程目录 最近一直在做一个电商的项目,周末加班,忙的都没有时间更新 ...
- SpringMvc 03 非注解形式下的映射器与适配器
1,映射器 1.1 ControllerBean +BeanNameUrlHandlerMapping 其中ControllerBean 需要指明name(url)通 ...
- SpringMvc 04 基于注解的映射器与适配器配置
SpringMvc的两种基于注解的映射器与适配器配置: 1.通过显式的配置映射器与适配器,并通过自动扫描标签去加载Controller类. <?xml version="1.0&quo ...
- 处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)
非注解 处理器映射器 和 处理器适配器 处理器映射器: 第一种: BeanNameUrlHandlerMapping <!-- 配置Handler --> <bean id=&quo ...
最新文章
- Hibernate 缓存
- Keras深度学习框架介绍(结束)
- mysql查询语句4,MySQL(4):CRUD语句(2)——基本查询
- matlab实现二项分布
- 开发人员转售前工程师_工程师和营销人员可以从中学到什么
- FreeTextBox使用详解
- 菜鸟进阶Linux高手之路——第四天(下)
- Java来做马里奥[0]—让精灵再次舞动
- android 主题是什么,什么是Android中的AppCompat主题?
- MAYA安装未完成,某些产品无法安装的解决方法
- Vue Router系列之 route 和 router 的区别
- android中RecyclerView添加下划线
- 2021-04-15 三级管npn和pnp的区别
- [译]基于Vue JS, Webpack 以及Material Design的渐进式web应用 [Part 1]
- 一文看尽 CVPR 2022 最新 20 篇 Oral 论文
- 电脑记账最简单的方法
- iOS 根据银行卡号判断银行名称
- 2018年秋季校招投递记录
- IDEA打字冒火花教程
- 使用fiddler手机微信小程序抓包