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注解定义的控制器有如 ...
随机推荐
- (C语言逻辑运算符!)&&两种定义字符串的方法&&局部变量、全局变量&&内部函数、外部函数。(新手基础知识备忘录)
(一) 四个逻辑运算符:!(逻辑非) ||(或) &&(与) ^ (异或) 位运算:&(与) |(位或) (二) 如何定义字符串: 1,字符串常量 ...
- selenium 之Ran 0 tests in 0.000s
from selenium import webdriverfrom time import ctime,sleepimport unittestclass TestLogin(unittest.Te ...
- 【云计算】impala建表,文件关联,查询
[cloudil@hadoop164 caixianfeng]$ hdfs dfs -mkdir -p /csv-pig/tab1 /csv-pig/tab1 tab1.csv: 1,true,123 ...
- 解决重装 Oracle 出现的 INS-32025 问题,完全卸载 Oracle11g
如果您要重装 Oracle,并且安装程序正在运行,请先关闭它. 完全卸载: 1.停止所有 Oracle 服务 2.通过开始菜单 Oracle Installation Products -> U ...
- 通过Jscript中@cc_on 语句识别IE浏览器及版本的代码
激活条件编译支持. @cc_on 备注 @cc_on 语句激活脚本引擎中的条件编译. 强烈推荐在注释中使用 @cc_on 语句,以使不支持条件编译的浏览器将您的脚本视为有效语法而接受它: /*@cc_ ...
- hibernate 学习笔记3
1. 多对多关联: 在双方都要用一个类型为Set的属性保存对方的信息,并在映射配置文件中指定这个属性的名字,并指定中间表.还需要通过<key column=””>来指定自己在中间表中对应的 ...
- 跨文件代码跳转插件:Ctags
1.通过package control搜索Ctags 2.Enter安装,等待其安装完成 3.下载ctags可执行程序,链接:https://pan.baidu.com/s/1jIINAxo 密码:4 ...
- Python下ImportError: DLL load failed: 找不到指定的模块
环境:Anaconda3 Python3.7 scarpy1.5 版本似乎都能对的上.但是在cmd下报错 如下截图. 从以上错误来看,应该是lxml包有异常. pip uninstall lxml包. ...
- [android] 界面切换的简单动画
1. 新建个位移动画的xml文件 Activity中开启动画 使用AnimationUtils类加载动画资源文件 left_to_right.xml <?xml version="1. ...
- 四层协议和Socket编程
<四层协议图> <Soclet编程模型图>