SpringMVC学习(四)——处理器Handler的各种常用实现
代码:http://files.cnblogs.com/files/douJiangYouTiao888/MultiActionController.zip
在使用springMVC的开发过程中,Handler(就是Controller)是我们需要手动开发的主要内容,注解的配置方式比较固定,可以限定请求方式,请求映射到方法级,基本可以满足我们的日常需求。所以这里主要记录基于xml配置方式的各种Handler。
这里引用开涛SpringMVC PDF中的一张图片:

这里学习一下比较常用的几种实现方式:
Controller:最顶层的接口,也是最简单的,重写handleRequest()即可。
AbstractController:比较常用的一个接口,重写handleRequestInternal()即可。AbstractController接口实现了org.springframework.web.servlet.support.WebContentGenerator接口。提供了针对http请求的设定,在我的springMVC(二)示例代码中有体现,如:
supportedMethods:GET、POST等请求的设定
cacheSeconds:响应缓存时间
ServletForwardingController:将拦截的请求交由某个servlet来处理
MultiActionController:一个controller集成多个不同的请求,解决目前controller只能处理一个请求的问题。
这里主要说一下MultiActionController的使用:
类结构:
public class MultiActionController extends AbstractController implements LastModified{
...
/*
* 略过其他属性,直接看这个resolver是最重要的,由它来决定URL到Controller.method()的映射,默认实现为InternalPathMethodNameResolver
* 除此之外,还有两个比较常用的实现,稍后在下面介绍使用方式:
* ParameterMethodNameResolver:根据请求参数匹配method
* PropertiesMethodNameResolver:根据请求URL匹配method
*/
private MethodNameResolver methodNameResolver = new InternalPathMethodNameResolver();
...
}
MethodNameResolver类结构图:

配置方式:
一、根据请求URL匹配method,默认实现:InternalPathMethodNameResolver
<!--
InternalPathMethodNameResolver,可以不配置methodNameResolver,
如果需要prefix和suffix可以配置methodNameResolver,调用controller.${prefix}**${suffix}
请求/paramAction/add,调用Controller.padds()
-->
<bean name="/paramAction/**" class="com.wang.controller.MultiController">
<property name="methodNameResolver">
<bean
class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
<property name="prefix" value="p"></property>
<property name="suffix" value="s"></property>
</bean>
</property>
</bean>
二、根据请求参数匹配method:ParameterMethodNameResolver
<!-- ParameterMethodNameResolver -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/paramMulti.do">paramAction</prop>
</props>
</property>
</bean> <bean id="paramMultiResolver"
class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
<!-- 指定参数key映射方法,即xxx?action=sb,执行Controller的sb() -->
<property name="paramName" value="action" />
<!-- 未指定action参数时,默认执行的方法,即xxx?a=1,执行execute() -->
<property name="defaultMethodName" value="execute"></property>
<!-- 请求参数包含list、create、update时默认会执行Controller.list()、create()、update(),
但是配置logicalMappings后会将create()映射为createLogical(), 如:http://localhost:8088/paramMulti.do?action=add&create
执行createLogical() -->
<property name="methodParamNames" value="list,create,update"></property>
<!-- 方法映射,action=add时,映射到Controller.addLogical();action=list,映射到list() -->
<property name="logicalMappings">
<props>
<prop key="add">add</prop>
<prop key="list">list</prop>
<prop key="create">createLogical</prop>
<prop key="update">update</prop>
<prop key="execute">sbExecute</prop>
</props>
</property>
</bean> <bean id="paramAction" class="com.wang.controller.MultiController">
<!-- 通过参数调用方法:ParameterMethodNameResolver -->
<property name="methodNameResolver" ref="paramMultiResolver"></property>
</bean>
三、根据请求URL匹配method:PropertiesMethodNameResolver
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/propertiesMulti/**">paramAction</prop>
</props>
</property>
</bean> <!-- PropertiesMethodNameResolver -->
<bean id="propertiesMultiResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/propertiesMulti/add">add</prop>
<prop key="/propertiesMulti/list">list</prop>
<prop key="/propertiesMulti/update">update</prop>
<prop key="/propertiesMulti/create">create</prop>
<prop key="/**">execute</prop>
</props>
</property>
</bean>
<bean id="paramAction" class="com.wang.controller.MultiController">
<!-- 通过URL调用方法:PropertiesMethodNameResolver -->
<property name="methodNameResolver" ref="propertiesMultiResolver"></property>
</bean>
controller:
/**
* 继承MultiActionController类,并自定义方法
* 方法格式:public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response, [,HttpSession session] [,AnyObject]);
* @author wlyfree
*
*/
public class MultiController extends MultiActionController{ public ModelAndView add(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController add()");
ModelAndView mv = new ModelAndView();
mv.addObject("message","add");
mv.setViewName("add");
return mv;
} public ModelAndView padds(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController add()");
ModelAndView mv = new ModelAndView();
mv.addObject("message","add");
mv.setViewName("add");
return mv;
} public void addLogical(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController addLogical()");
}
public void createLogical(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController createLogical()");
}
public void list(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController list()");
}
public void create(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController create()");
}
public void update(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController update()");
}
public void execute(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController execute()");
}
public void sbExecute(HttpServletRequest request,HttpServletResponse response){
System.err.println("MultiController select()");
}
}
SpringMVC学习(四)——处理器Handler的各种常用实现的更多相关文章
- (转)SpringMVC学习(四)——Spring、MyBatis和SpringMVC的整合
http://blog.csdn.net/yerenyuan_pku/article/details/72231763 之前我整合了Spring和MyBatis这两个框架,不会的可以看我的文章MyBa ...
- SpringMVC学习--异常处理器
简介 springmvc在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑. 异常处理思路 系统中异常包括两类:预期异常和运行时异常RuntimeExc ...
- SpringMVC 学习笔记(处理器映射器的配置)
前端控制器(dispatchServlet) 在web.xml中配置前端控制器,在服务器启动时就被创建,用来对请求和响应进行接收 和 分发处理,其在配置时可以设置一个初始化参数,用来定位SpringM ...
- SpringMVC学习四(@ModelMap @RequestBody等等的说明)
参考如下 http://www.cnblogs.com/HD/p/4107674.html http://www.cnblogs.com/qiankun-site/p/5774325.html @re ...
- springMVC学习 四 请求的中文乱码解决
在使用SpringMVC时,同样有前端向后端发送请求,请求参数中有中文,需要解决中文乱码问题,在Spring中也是向java web中一样,通过一个过滤器来解决中文乱码. 这个过滤器在spring-w ...
- SpringMVC学习总结(四)——基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是 DispatcherServlet,DispatcherServlet负责转发每一个Request ...
- (转)SpringMVC学习(五)——SpringMVC的参数绑定
http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...
- springMVC学习记录1-使用XML进行配置
SpringMVC是整个spring中的一个很小的组成,准确的说他是spring WEB这个模块的下一个子模块,Spring WEB中除了有springMVC还有struts2,webWork等MVC ...
- springmvc学习笔记(常用注解)
springmvc学习笔记(常用注解) 1. @Controller @Controller注解用于表示一个类的实例是页面控制器(后面都将称为控制器). 使用@Controller注解定义的控制器有如 ...
随机推荐
- 剑指offer——面试题25:合并两个 排序的链表
自己答案: ListNode* MergeTwoSortedList(ListNode* pHead1,ListNode* pHead2) { if(pHead1==nullptr&& ...
- AWS S3
Amazon Simple Storage Service (Amazon S3) Amazon S3 提供了一个简单 Web 服务接口,可用于随时在 Web 上的任何位置存储和检索任何数量的数据.此 ...
- 第七次 Scrum Meeting
第七次 Scrum Meeting 写在前面 会议时间 会议时长 会议地点 2019/4/11 22:00 10min 大运村1号楼6F 附Github仓库:WEDO 例会照片 工作情况总结(4.11 ...
- IONIC 打包安卓apk详细过程
参照以下链接: https://blog.csdn.net/qq_20264891/article/details/79319408 当 cordova 项目安装的 android 平台版本 与 系统 ...
- HTML5开发手机项目-个人总结(转)
让网页的宽度自适应屏幕<meta name="viewport" content="width=device-width"/> 1)html上 ...
- linux mint 18.1 安装nvidia显卡驱动
原文地址 http://www.gamersonlinux.com/forum/threads/updating-nvidia-drivers-mint.1746/ 主要步骤很简答 就是将ppa仓库地 ...
- Bash编程(5) Shell方法
shell的方法在相同的进程内执行,与调用它的脚本一致.对于方法来说,脚本中的所有变量均可见,且不需要执行export.方法中可以创建局部变量,且不影响正在调用的脚本. 1. 定义语法 (1) Kor ...
- GridView 基本使用
项目中实例一 <asp:GridView ID="gvBatchReceive" runat="server" AutoGenerateColumns=& ...
- [转]Web API Introduction to OData Services using ASP.NET Web API
本文转自:http://mahedee.net/tag/web-api/ What is OData? OData Stands for Open Data Protocol. It is a dat ...
- Magento 2中文文档教程 - Magento 2.1.x 系统需求
Magento 2.1.x 系统需求 操作系统 (Linux x86-64) Linux发行版如红帽企业Linux(RHEL),CentOS,Ubuntu,Debian,等等 内存需求 升级的应用程序 ...