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注解定义的控制器有如 ...
随机推荐
- 学习python 3 入门知识
1.安装 http://www.runoob.com/python3/python3-install.html https://www.python.org/ 2.使用 工具一:IDLE IDLE 是 ...
- spark第九篇:Spark操作ES
spark操作es需要elasticsearch-hadoop-xxx.jar,版本需同es版本.从5.0版本开始,支持spark2.0. 把elasticsearch-hadoop-xxx.jar放 ...
- dubbo序列化hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决
dubbo序列化,hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决 转载声明: ...
- ios 得到每周的星期一开始和星期天结束的日期
得到每周 星期一零点(即本周的开始) 和星期天 24 点(即本周的结束和下一周的开始)的时间 NSDate *now = [NSDate date]; NSCalendar *calendar = [ ...
- IdentityServer4授权模式应用场景
OpenID 和 OAuth 的区别 IdentityServer4,NET Core下的安全框架 客户端模式(Client Credentials) 密码模式(resource owner pass ...
- 如何在不接入微信API的情况下自定义分享内容(图片、链接、标题)
方法如下: 1.设置分享title:动态改变document.title值即可: document.title = 'test' 2.设置分享图片:在页面隐藏一张尺寸大于290*290的图(图片需要容 ...
- Hbuilder编辑App时,ajax跨域访问失败问题
今天试着用Hbuilder写app的前段显示页面,在第一步时就被打住了,ajax异步调用服务器的登录接口时,报错, 显示这样的错误 XMLHttpRequest cannot loadhttp://w ...
- 资料汇总--Web前端
01.前端技能汇总 02.gitHub优秀前端资料分享 03.大前端 HTML Doctype作用?严格模式与混杂模式如何区分?它们有何意义? 1. <!DOCTYPE> 声明位于文档中的 ...
- 记录日志好习惯——Log4net入门(WCF篇)
本篇是在学习了“编码之道”的Log4net入门(WCF篇)http://www.cnblogs.com/yonghuacui/p/6181864.html之后,总结了一些自认为比较重要的细节.顺便把创 ...
- C3P0数据库连接池的java实现
1.配置准备 导入jar包 c3p0-0.9.2-pre1.jar mchange-commons-0.2.jar 数据库驱动包,如:mysql-connector-java-5.1.28-bin.j ...