`
<冫茖>
  • 浏览: 36755 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

详解Spring Web MVC中的Controller(下)

阅读更多

3. MultiActionController

     Spring提供了一个多动作控制器MultiActionController,开发人员藉此可以将多个动作聚合在同一个控制器之内,实现功能集成, 从而不必为控制器定义多个入口点。例如对商品信息进行查询、增删改等操作,这个动作可以用一个Contoller来实现。

     这个多动作控制器是Spring中一个独立的Java类包,即
org.springframework.web.servlet.mvc.multiaction,它能将客户请求与处理方法名字映射起来,并触发正确的方法。MultiActionController事实上是AbstractController的一个子类,而在应用中,MultiActionController的实现方式有两种:其一是继承MultiActionController,其二是在配置文件中定义一个代理bean,由它来定义哪个控制器是多动作的。
    
     对于控制器中的多个方法,MultiActionController是通过MethodNameResolver来选择执行的。MultiActionController中的MethodNameResolver包括:

1.InternalPathMethodNameResolver:这是MultiActionController缺省的MethodNameResolver,它是根据URL样式来解析方法名的,实际上就是根据URL中的“文件名”决定的,例如请求“http://www.springframework.org/testing.view ”将令MultiActionController调用testing(HttpServletRequest,HttpServletResponse)方法。
2.ParameterMethodNameResolver:根据请求中的参数来解析并执行方法名,例如请求“http://www.springframework.org/index.view?testParam=testIt ”将令MultiActionController调用testIt(HttpServletRequest, HttpServletResponse)方法。
3.PropertiesMethodNameResolver:根据查询一个key/value列表来解析并执行方法名。

     对于多动作控制器的使用,我们看一个简单的例子,并利用Eclipse和Tomcat来完成。

     第一步,定义web.xml。web.xml放置在WEB-INF目录下。


摘自:http://moonstone2007.blog.ccidnet.com/blog-htm-do-list-uid-46968-type-blog-y-2007-m-4-page-2.html
<?xml version="1.0" encoding="ISO-8859-1"?>


<web-app xmlns="http://java.sun.com/xml/ns/j2ee "
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd "
  version="2.5">

<servlet>
     <servlet-name>dispatcherServlet</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
           <param-name>contextConfigLocation</param-name>
           <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
     <servlet-name>dispatcherServlet</servlet-name>
     <url-pattern>*.do</url-pattern>
</servlet-mapping>

</web-app>
     servlet-mapping定义所有以”.do”结尾开头的url请求都会被Spring 的dispatcherServlet处理转发。默认情况下DispatcherServlet会读取<servlet- name>-servlet.xml文件的配置信息初始化,该文件中urlMapping的定义决定当前请求转发给哪个controller来处理,这里则定义了一个 dispatcherServlet-servlet.xml文件。

     第二步,定义 dispatcherServlet-servlet.xml文件


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"
"http://www.springframework.org/dtd/spring-beans-2.0.dtd ">

<beans>
     <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
            <property name="mappings">
                 <props>
                       <prop key="sample.do">sampleMultiActionController</prop>
                 </props>
            </property>
     </bean>

     <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass">
                 <value>org.springframework.web.servlet.view.InternalResourceView</value>
            </property>
            <property name="prefix">
                 <value>/WEB-INF/jsp/</value>
            </property>
            <property name="suffix">
                 <value>.jsp</value>
            </property>
     </bean>
    
     
     <bean id="sampleMultiActionController" class="com.test.SampleMultiMActionController">
           <property name="methodNameResolver">
                 <ref bean="paraMethodResolver"/>
           </property>

     <!--viewName属性将依赖注入sampleMultiActionController类-->
           <property name="viewName">
                 <value>showme</value>
           </property>
     </bean>
    
     <bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
           <property name="paramName" value="whichMethod"/>
     </bean>
</beans>
    
     其中,urlMapping定义客户端的sample.do请求由名字为 sampleMultiActionController 的控制器来处理,由于是多动作处理器,所以需要定义MethodNameResolver来通知web.xml中定义的 dispatcherServlet应该调用sampleMultiActionController 的哪个方法。这里用的是InternalPathMethodNameResolver,本例说明了 sampleMultiActionController将在/WEB-INF/jsp/目录下的寻找一个showme.jsp文件作为显示model的视图。

     第三步,定义一个SampleMultiActionController类,它是MultiActionController的子类,并有insert、update、delete三个,其源代码如下:


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import org.apache.log4j.Logger;
import org.springframework.web.bind.*;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class SampleMultiActionController extends MultiActionController {
     private Logger logger=Logger.getLogger(this.getClass().getName());
     private String viewName;

     //依赖注入一个名为viewName的参数,例如一个JSP文件,作为展示model的视图
     public String getViewName (){
           return this.viewName;
     }

     public void setViewName (String viewName){
           this. viewName =viewName;
     }
    
    
     public ModelAndView insert(HttpServletRequest req,
                 HttpServletResponse res) throws ServletRequestBindingException, IOException {
           Map model = new HashMap();
           model.put("dataList", "新增数据...");
           return new ModelAndView(getViewName(),model);
     }
    
     public ModelAndView update(HttpServletRequest req,
                 HttpServletResponse res) throws ServletRequestBindingException, IOException {
           Map model = new HashMap();
           model.put("dataList", "修改数据...");
           return new ModelAndView(getViewName(),model);
     }
    
     public ModelAndView delete(HttpServletRequest req,
                 HttpServletResponse res) throws ServletRequestBindingException, IOException {
           Map model = new HashMap();
           model.put("dataList", "删除数据...");
           return new ModelAndView(getViewName(),model);
     }
}

     第四步,定义视图,此例中即是/WEB-INF/jsp/showme.jsp


<%@page contentType="text/html;charset=GBK"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt " %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jstl/fmt "%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>MuiltiActionController示例</head>
<body>
  <c:out value="${model.dataList}"/>
</body>
</html>

     第五步,测试。在Eclipse内启动Tomcat,在浏览器地址栏内分别输入,便可看到相应的页面输出信息:
http://localhost:8080/sample.do?whichMethod=insert
http://localhost:8080/sample.do?whichMethod=update
http://localhost:8080/sample.do?whichMethod=delete

搞自:http://moonstone2007.blog.ccidnet.com/blog-htm-do-list-uid-46968-type-blog-y-2007-m-4-page-2.html


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/yxl2005play/archive/2009/08/11/4435953.aspx

分享到:
评论
1 楼 binghejinjun 2011-04-27  
楼主,你在sampleMultiActionController 这个控制器里决定调用哪个方法是用的ParameterMethodNameResolver这种解析方法,而不是你说的InternalPathMethodNameResolver这种解析方法吧?

相关推荐

    spring-webmvc-portlet-3.1.1.RELEASE.jar.zip

    《Spring Web MVC Portlet 框架详解及应用实践》 Spring Web MVC Portlet是Spring框架的一个重要组件,专门用于构建portlet应用。Portlet是一种在门户服务器上运行的小型应用程序,能够提供交互式用户界面。在本文...

    深入浅出学Spring_Web_MVC

    **Spring Web MVC** 是一种轻量级的、基于MVC(Model-View-Controller)设计模式的Web应用框架,是Spring框架的重要组成部分之一。它为开发者提供了构建可维护性高、易于扩展的Web应用程序的强大工具。 ##### ...

    spring-webmvc-portlet.rar

    在Java企业级开发中,Spring Web MVC和Portlet框架的应用广泛且深入,它们各自在不同的场景下发挥着重要作用。Spring Web MVC是Spring框架的重要组成部分,用于构建高性能、灵活的Web应用程序,而Portlet则是portlet...

    Spring web MVC和spring 2.0 form tag解说

    **Spring Web MVC与Spring 2.0 Form Tag详解** 在Web开发领域,Spring Web MVC作为一款强大的MVC框架,被广泛应用于构建企业级的Web应用。它提供了模型(model)、视图(view)和控制器(controller)的分离,使得开发者...

    精通Spring_Web_MVC优秀框架.pdf

    - **注解式控制器开发详解**:Spring Web MVC支持注解式的开发方式,通过`@Controller`、`@RequestMapping`等注解简化控制器的编写。了解如何定义控制器类、处理请求映射、REST风格的支持等。 - **数据类型转换**:...

    详解Spring mvc的web.xml配置说明

    下面我们将详细探讨`web.xml`中涉及Spring MVC的主要配置项。 1. **监听器(Listener)** `web.xml`中的监听器允许我们在特定事件发生时执行代码,例如应用程序启动或关闭。在Spring MVC中,`org.springframework....

    spring3.0MVC中文教材

    ### Spring 3.0 MVC框架知识点详解 #### 一、Spring 3.0 MVC框架概述 **Spring 3.0 MVC**是Spring框架的一个重要组成部分,专注于构建Web应用程序。相较于之前的版本,Spring 3.0 MVC引入了许多重要的改进和新特性...

    Spring Framework Reference 4.1.x Web MVC部分 pdf

    ### Spring Framework 4.1.x Web MVC框架知识点详解 #### 一、Spring Web MVC框架概述 **Spring Web MVC**框架是Spring框架中的一个重要组成部分,它主要用于处理基于HTTP协议的请求,构建灵活且易于扩展的Web应用...

    外文翻译Spring的MVC构架模式-CSDN下载

    Spring MVC是Spring框架中的一个核心组件,主要用于构建Web应用程序的模型-视图-控制器(Model-View-Controller)架构。它为开发者提供了灵活且强大的工具来处理HTTP请求、数据绑定、验证和视图渲染。本文将深入探讨...

    Spring3 MVC 深入研究

    Spring3 MVC是Spring框架的重要组成部分,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本篇文章将深入探讨Spring3 MVC的核心概念、工作原理以及如何在实际项目中应用。 一、Spring3 MVC...

    spring-webmvc-tiles2.rar

    《Spring Web MVC与Tiles2整合详解》 Spring Web MVC是Spring框架的重要组成部分,它提供了一个用于构建Web应用程序的全面模型视图控制器(MVC)架构。而Tiles2是一个视图框架,它允许开发者将Web页面分解成可重用...

    springweb3.0MVC注解(附实例)

    ### Spring Web 3.0 MVC 注解详解及实例 #### 一、概述 Spring Web MVC 是 Spring Framework 的一部分,提供了一种强大而灵活的方式来构建基于 Web 的应用。随着 Spring 3.0 的发布,框架引入了一系列重要的改进,...

    spring-mvc-demo

    【Spring MVC 框架详解】 Spring MVC 是 Spring 框架的一部分,它是一个轻量级的、基于模型-视图-控制器(MVC)设计模式的 Web 应用开发框架。Spring MVC 提供了丰富的功能,使得开发者可以快速、高效地构建高质量...

    Spring MVC框架实例

    - **Controller**: 处理业务逻辑,通常是一个实现了 `org.springframework.web.servlet.mvc.Controller` 或者 `org.springframework.web.bind.annotation.ControllerAdvice` 接口的类。 - **Model**: 表示应用程序的...

    Spring_MVC详解学习

    Spring MVC是Spring框架中的一个核心模块,它遵循了MVC(Model-View-Controller,模型-视图-控制器)设计模式。Spring MVC允许开发者构建灵活且可维护的Web应用程序。配置Spring MVC框架是确保Web应用程序能够高效...

    Spring MVC3构建Web应用详解

    在这个配置中,我们定义了包`com.adobocode.controller`作为Spring MVC控制器的扫描基包,并设置了视图解析器,使得JSP文件可以在`/WEB-INF/views/`目录下找到。 通过以上步骤,我们完成了Spring MVC 3 Web应用的...

    spring mvc过程详解

    Spring MVC 是 Spring 框架的一部分,提供了一种清晰分离模型(Model)、视图(View)和控制器(Controller)的方法来构建 Web 应用程序。它不仅简化了 Web 开发,而且提供了强大的功能来满足复杂的应用需求。 **...

    Spring+MVC3构建Web应用详解

    在本文中,我们将深入探讨如何使用Spring框架与MVC3构建高效的Web应用程序。Spring MVC是Spring框架的一个核心组件,主要用于构建可维护、可扩展且松耦合的Web应用。Java开发者广泛采用Spring MVC来实现业务逻辑和...

    Spring+MVC+3.0.5+Spring+3.0.5+MyBatis3.0.4全注解实例详解

    在本教程中,我们将深入探讨如何使用Spring、Spring MVC 3.0.5以及MyBatis 3.0.4这三个流行的Java框架构建一个全注解的Web应用程序。这个实例详解将帮助开发者理解如何有效地集成这三个组件,实现高效的数据访问和...

Global site tag (gtag.js) - Google Analytics