`
Inmethetiger
  • 浏览: 111267 次
  • 性别: 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配置方法源码

    尽管如此,理解`MultiActionController`的配置和工作原理对于理解Spring MVC的历史以及如何向更现代的实践迁移仍然是有益的。 `MultiActionController`是Spring MVC中的一个抽象类,它继承自`AbstractController`。...

    spring-ext-handler-mapping.rar_ext_spring ext_spring mvc

    本资源"spring-ext-handler-mapping"着重于扩展Spring的地址映射功能,使得开发者在使用Spring MVC进行Web开发时能够更加灵活和高效。 1. **扩展Spring HandlerMapping** Spring MVC默认提供了一些内置的...

    计算机外文翻译-Spring的web-MVC-构架模式.docx

    【Spring的Web MVC构架模式】是Spring框架中的核心组件之一,主要负责处理Web应用程序的模型、视图和控制器的交互。Spring MVC以其高度模块化和可配置性,为开发者提供了一种优雅的方式来构建Web应用。 1. **构架...

    毕设 外文文献翻译--Spring的web-MVC-构架模式

    Spring框架的Web MVC架构模式以其灵活性、可扩展性和强大的功能特性而著称。相较于Struts和WebWork等早期框架,Spring提供了更多样的选择和更简洁的开发方式,极大地提高了开发效率和代码质量。无论是对于初学者还是...

    计算机外文翻译-Spring的web-MVC-构架模式.pdf

    - Spring MVC提供多种类型的控制器,如AbstractController、AbstractCommandController、MultiActionController、SimpleFormController等,帮助开发者处理不同复杂度的控制逻辑。 - 与Struts相比,Spring MVC允许...

    spring mvc_04

    尽管在现代Spring MVC应用中,我们通常会推荐使用基于注解的@Controller或@RestController,但理解MultiActionController的工作原理仍然对学习Spring MVC的历史和演进有所帮助。 **1. MultiActionController介绍** ...

    外文翻译-Spring的web-MVC-构架模式 (2).pdf

    【Spring的Web-MVC构架模式】是Spring框架的核心组件之一,主要负责处理Web应用程序的请求和响应。本文档是对Spring Web MVC模式的外文翻译,深入解析了Spring如何在Web开发中提供灵活且可扩展的架构。 1. **Spring...

    Spring MVC

    ### Spring MVC 框架详解 ...同时,Spring MVC 提供了丰富的扩展性和定制能力,使得开发者能够根据项目需求灵活选择合适的实现方式。无论是新手还是有经验的开发人员,Spring MVC 都是一个值得深入研究和使用的框架。

    计算机外文翻译-Spring的web-MVC-构架模式 (2).pdf

    Spring MVC的设计理念是提供一种灵活且可扩展的架构,让开发者能够更好地分离业务逻辑和表示层,从而提高代码的可重用性和可测试性。 1. **组件介绍** - **DispatcherServlet**: Spring MVC的核心组件,它作为一个...

    spring mvc_03

    然而,随着Spring MVC的发展,`MultiActionController`逐渐被更现代、更灵活的`@Controller`注解和基于方法的映射所取代。现在,我们通常推荐使用`@RequestMapping`来定义请求映射,它可以更精确地控制HTTP方法(GET...

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

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

    使用 Spring 2.5 基于注解驱动的 Spring MVC.doc

    这与传统的实现 `org.springframework.web.servlet.mvc.Controller` 接口或者继承 `SimpleFormController` 或 `MultiActionController` 不同,`@Controller` 注解使得我们的类变成了一个纯粹的 POJO,无需额外的接口...

    Spring MVC 例子

    本示例将深入探讨`SimpleFormController`和`MultiActionController`这两种控制器在Spring MVC中的应用。 首先,`SimpleFormController`是Spring MVC早期版本中提供的一个抽象控制器,主要用于处理表单提交。它内置...

    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 ...

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

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

    外文翻译-Spring的web-MVC-构架模式讲解学习 (2).pdf

    Spring的Web MVC构架模式是其核心特性之一,它为构建基于Java的Web应用程序提供了一种强大而灵活的解决方案。本文将深入探讨Spring Web MVC框架的设计理念、特点以及与Struts和WebWork等其他框架的区别。 1. Spring...

Global site tag (gtag.js) - Google Analytics