`
Inmethetiger
  • 浏览: 108460 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

spring mvc 之MultiActionController和MethodNameResolver--附带实例

阅读更多

首发地址:http://inmethetiger.iteye.com/blog/1678785

MultiActionController身兼数值,主要处理一组逻辑上相似的web请求,比如针对一个对象的CRUD操作或者针对同一个对象或者多个对象的一组查询操作。我们可以将这些web请求交个MultiActionController来同意处理。

  主要功能:

  1:请求参数到Command对象的绑定。

  2:通过Validatator的数据验证

  3:细化的异常处理方法

  实例代码:


public class MyMultiActionController extends MultiActionController{        
	public Map list(HttpServletRequest request,HttpServletResponse response){        
		return new HashMap();    
		}        
	public ModelAndView delete(HttpServletRequest request,HttpServletResponse response){        
		return new ModelAndView();    
		}        
	public ModelAndView update(HttpServletRequest request,HttpServletResponse response){        
		return new ModelAndView();    
		}        ..

 MultiActionController知道具体的Web请求进来之后,将由MethodNameResolver处理。即:MethodNameResolver帮助MultiActionController决定当前web请求应该交给哪个方法来处理。


  1:InternalPathMethodNameResolver:

  如果没有为MultiActionController明确指定任何MethodNameResolver,InternalPathMethodNameResolver将做为默认的MethodNameResolver实现。(类似于HandlerMapping中的BeanNameUrlHandlerMapping)(下面有用InternalPathMethodNameResolver与BeanNameUrlHandlerMapping组合实现的例子

  处理方法:

    提取URL最后一个(/)之后的部分,并去掉扩展名,作为返回的方法名称

    /xxxx/admin/admincontroller/login.do。交给login方法。

  2:PropertisMethodNameResolver,和InternalPathMethodNameResolver类似,但是可以在配置文件中进行灵活配置来确定web请求到具体方法处理之间的映射。(类似于SimpleUrlHandlerMapping)(下面有用PropertisMethodNameResolver与SimpleUrlHandlerMapping组合实现的例子)。

------------------------------------------------------------------实例-----------------------------------------------------

 InternalPathMethodNameResolver与BeanNameUrlHandlerMapping组合实现的例子


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class MyMutilActionController extends MultiActionController {
	public ModelAndView listing(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("list");
		return mv;
	}

	public ModelAndView delete(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("delete");
		return mv;
	}

	public ModelAndView update(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("update");
		return mv;
	}

	public ModelAndView insert(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("insert");
		return mv;
	}
}

 



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- HandlerMapping -->
	<!-- 帮助DispatchServlet进行web请求的url到具体处理类的匹配,默认为BeanNameUrlHandleMapping -->
	<bean id="handlerMapping"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="/listing.do">myMutioActionController</prop>
				<prop key="/delete.do">myMutioActionController</prop>
				<prop key="/update.do">myMutioActionController</prop>
				<prop key="/insert.do">myMutioActionController</prop>
			</props>
		</property>
	</bean>


	<!-- MethodNameResolver -->
	<!-- 解决MultiActionController决定web请求交给哪个方法 -->
	<!-- <bean id="propertiesMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"> 
		</bean> -->


	<!-- Controller -->
	<!-- 控制器,自己实现,收集参数,绑定参数到命令对象,调用业务对象,选择视图模型,返回视图,模型,数据 -->
	<!-- MutiActionController需要指定方法名解析器,因为我选用的不是默认的 -->
	<bean name="myMutioActionController" class="org.spring.controller.MyMutilActionController">
	</bean>



	<!-- ViewResover -->
	<!-- DispatcherServlet根据Controller中指定的逻辑视图查找相应的视图实现 -->

	<bean id="defaultViewResover"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

 注意注释,在控制器中并没有指明MethodNameResolver,所以,Spring mvc自动使用InternalPathMethodNameResolver。所以,控制器中的方法名必须和映射名一致。


刚开始HandlerMapping想使用默认的,但是试了一下,可是可以,但是不实际。因为,BeanNameUrlHandlerMapping,需要控制器的name和web请求一致,这就需要将同一个

控制器,声明四次配置方法如下


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">


	<!-- Controller -->
	<!-- 控制器,自己实现,收集参数,绑定参数到命令对象,调用业务对象,选择视图模型,返回视图,模型,数据 -->
	<!-- MutiActionController需要指定方法名解析器,因为我选用的不是默认的 -->
	<bean name="/listing.do" class="org.spring.controller.MyMutilActionController">
	</bean>
	<bean name="/insert.do" class="org.spring.controller.MyMutilActionController">
	</bean>
	<bean name="/delete.do" class="org.spring.controller.MyMutilActionController">
	</bean>
	<bean name="/update.do" class="org.spring.controller.MyMutilActionController">
	</bean>


	<!-- ViewResover -->
	<!-- DispatcherServlet根据Controller中指定的逻辑视图查找相应的视图实现 -->

	<bean id="defaultViewResover"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/view/"></property>
		<property name="suffix" value=".jsp"></property>
	</bean>
</beans>

 将InternalPathMethodNameResolver和BeanNameUrlHandlerMapping都已经省略。甚至可以将ViewResover都省略。只是这样的话,增删改查这四个jsp文件得放到WebContext下,而且控制器中返回的视图名称为xxx.jsp或者,jsp文件依然放在原来的位置,但是在控制器中将返回WEB-INF/view/xxx.jsp


-------------------------------------------------------------------------------------------------------------

PropertisMethodNameResolver+SimplUrlHandlerMapping+MultiActionController组合实现简单实例


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class MyMutilActionController extends MultiActionController {
	public ModelAndView listObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("list");
		return mv;
	}

	public ModelAndView deleteObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("delete");
		return mv;
	}

	public ModelAndView updateObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("update");
		return mv;
	}

	public ModelAndView insertObject(HttpServletRequest request,
			HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("insert");
		return mv;
	}
}

 注意控制器中的方法,和上面的不同,因为 PropertiesMethodNameResolver更灵活,只需在配置文件中指定

dispatch-servlet.xml


<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:mvc="http://www.springframework.org/schema/mvc"    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">


    <!-- HandlerMapping -->
    <!-- 帮助DispatchServlet进行web请求的url到具体处理类的匹配,默认为BeanNameUrlHandleMapping -->
    <bean id="handlerMapping"        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/listing.do">myMutioActionController</prop>
                <prop key="/update.do">myMutioActionController</prop>
                <prop key="/insert.do">myMutioActionController</prop>
                <prop key="/delete.do">myMutioActionController</prop>
            </props>
        </property>
    </bean>


    <!-- MethodNameResolver -->
    <!-- 解决MultiActionController决定web请求交给哪个方法 -->
    <bean id="propertiesMethodNameResolver"        class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
        <property name="mappings">
            <props>
                <prop key="/listing.do">listObject</prop>
                <prop key="/update.do">updateObject</prop>
                <prop key="/insert.do">insertObject</prop>
                <prop key="/delete.do">deleteObject</prop>
            </props>
        </property>
    </bean>

    <!-- Controller -->
    <!-- 控制器,自己实现,收集参数,绑定参数到命令对象,调用业务对象,选择视图模型,返回视图,模型,数据 -->
    <!-- MutiActionController需要指定方法名解析器,因为我选用的不是默认的 -->
    <bean name="myMutioActionController" class="org.spring.controller.MyMutilActionController">
        <property name="methodNameResolver" ref="propertiesMethodNameResolver"></property>
    </bean>



    <!-- ViewResover -->
    <!-- DispatcherServlet根据Controller中指定的逻辑视图查找相应的视图实现 -->
    <bean id="defaultViewResover"        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/view/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean></beans>

 

 

分享到:
评论

相关推荐

    Spring MVC MultiActionController---多动作控制器

    Spring MVC MultiActionController---多动作控制器 博客介绍: http://blog.csdn.net/sunshine_love/article/details/8842261 更换web.xml中web-config.xml即可尝试不同方法解析器,如有问题,请博客回复。欢迎交流...

    spring mvc MultiActionController配置方法源码

    spring mvc MultiActionController配置方法源码,可以部署到tomcat中访问

    Spring MVC框架 多动作控制器详解 spring mvc 2.5

    本代码使用了Spring MVC框架(spring2.5架包) 演示了(Controller接口的试用方法)和 MultiActionController多动作控制器 数据库连接试用Spring JDBC 并且着重介绍了MultiActionController多动作控制器的两种方法名...

    springMVC3学习(五)--MultiActionController(源码)

    springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091

    Spring-Reference_zh_CN(Spring中文参考手册)

    2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6 .3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 ...

    spring mvc_03

    MultiActionController

    spring mvc_04

    MultiActionController静态访问

    spring chm文档

    2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring 2.0 2.7.1. 一些变化 2.8. 更新的...

    Spring 2.0 开发参考手册

    2.5.1. Spring MVC的表单标签库 2.5.2. Spring MVC合理的默认值 2.5.3. Portlet 框架 2.6. 其他特性 2.6.1. 动态语言支持 2.6.2. JMX 2.6.3. 任务规划 2.6.4. 对Java 5(Tiger)的支持 2.7. 移植到Spring ...

    SpringMVC - MultiActionController

    SpringMVCMultiActionController的使用最简化教程

    Spring中文帮助文档

    2.5.1. Spring MVC合理的默认值 2.5.2. Portlet 框架 2.5.3. 基于Annotation的控制器 2.5.4. Spring MVC的表单标签库 2.5.5. 对Tiles 2 支持 2.5.6. 对JSF 1.2支持 2.5.7. JAX-WS支持 2.6. 其他 2.6.1. 动态...

    Spring API

    2. Spring 2.0和 2.5的新特性 2.1. 简介 2.2. 控制反转(IoC)容器 2.2.1. 新的bean作用域 2.2.2. 更简单的XML配置 2.2.3. 可扩展的XML编写 2.2.4. Annotation(注解)驱动配置 2.2.5. 在classpath中自动搜索组件...

    spring 2.0表单绑定实例

    自己写的spring表单绑定的小例子,分别使用SimpleFormController,MultiActionController,spring的form tag和validator。 还在MultiActionController里面实现了表单的绑定

    开源框架 Spring Gossip

    Spring MVC 入门 从一个最简单的 Spring Web 应用程式,来看看 Spring MVC 框架的架构与 API 组成元素。 第一个 Spring MVC 程式 WebApplicationContext Handler Mapping Handler ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    SPRING API 2.0.CHM

    MultiActionController MultipartActionRequest MultipartException MultipartFile MultipartFilter MultipartHttpServletRequest MultipartResolver MutablePersistenceUnitInfo MutablePropertyValues ...

    《程序天下:J2EE整合详解与典型案例》光盘源码

    2.3.2 使用MVC模式的不足之处 2.4 目前市场上常见的轻量级J2EE开发容器 2.5 小结 第二篇 建立和使用J2EE的开发平台 第三章 建立Java的开发平台 3.1 建立Java的开发环境 3.1.1 下载JDK 3.1.2 安装JDK 3.1.3 设定Path...

    springmvcdemo

    4 使用MultiActionController 5 所有service利用spring注入到controller中,利用注解 6 数据库连接串单独在properties文件配置 7 在spring中配置数据源,属性使用properties文件中的配置 8 利用JdbcTemplate操作...

Global site tag (gtag.js) - Google Analytics