SpringMVC学习(四)——处理器Handler的各种常用实现
2017-04-13 22:19
471 查看
代码: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的使用:
类结构:
MethodNameResolver类结构图:
配置方式:
一、根据请求URL匹配method,默认实现:InternalPathMethodNameResolver
二、根据请求参数匹配method:ParameterMethodNameResolver
三、根据请求URL匹配method:PropertiesMethodNameResolver
controller:
在使用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()"); } }
相关文章推荐
- 常用的各种排序算法的JAVA实现
- 常用的各种排序算法的JAVA实现
- [算法学习]常用排序算法实现
- (csdn内转载)使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置
- HandlerThread实现多线程操作_个人学习小结
- 常用的各种排序算法的JAVA实现。
- 第六章、SpringMVC学习- 注解式控制器详解(1)-注解式控制器运行流程及处理器定义
- 使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置
- 常用的各种排序算法(C语言实现)
- 数组游标实现对数组的各种操作(PHP学习)
- 常用的各种排序算法的JAVA实现
- [EntLib]微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
- 各种基本算法实现小结(七)—— 常用算法
- 使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置
- 使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置
- 常用的各种排序算法的JAVA实现
- 常用的各种排序算法的JAVA实现
- 微软企业库5.0 学习之路——第五步、介绍EntLib.Validation模块信息、验证器的实现层级及内置的各种验证器的使用方法——上篇
- 使用ControllerClassNameHandlerMapping实现SpringMVC的CoC配置
- 第五章、SpringMVC学习-处理器拦截器详解