`
<冫茖>
  • 浏览: 35604 次
  • 性别: 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 MVC框架 多动作控制器详解 spring mvc 2.5

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

    21道Java Spring MVC综合面试题详解含答案(值得珍藏)

    Spring MVC是Spring框架中的一部分,全称是Spring Web MVC,主要用于实现MVC设计模式的Web框架。它分离了控制器、模型对象、过滤器以及处理程序对象的角色,使得它们更容易进行定制。 Spring MVC的优点包括: 基于...

    详解Spring mvc ant path的使用方法

    详解Spring mvc ant path的使用方法 概要: 任何一个WEB都需要解决URL与请求处理器之间的映射,spring MVC也是一样,但Spring MVC就像Spring所作的一切一样(灵活,可以配置各种东西,但是也造成了很多复杂性),肯定...

    详解Spring MVC如何测试Controller(使用springmvc mock测试)

    主要介绍了详解Spring MVC如何测试Controller(使用springmvc mock测试),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    Spring MVC学习(四)-------Controller接口控制器详解1

    Spring MVC学习(四)-------Controller接口控制器详解1

    Spring MVC学习(四)-------Controller接口控制器详解3

    Spring MVC学习(四)-------Controller接口控制器详解3

    Spring中MVC模块代码详解

    主要介绍了Spring中MVC模块代码详解,涉及Controller的简单介绍,具有一定借鉴价值,需要的朋友可以参考下。

    Java之Spring Boot详解

    (2)在 web.xml 文件中配置 Spring mvc 的前端控制器 (3)创建一个 spring mvc 的配置文件 (4)在 spring mvc 的配置文件中进行相关配置   1) 配置注解扫描路径   2)配置处理器映射器   3)配置处理器...

    SpringMVC教程

    第一章 Web MVC简介.pdf 第二章 Spring MVC入门 .pdf 第三章 DispatcherServlet详解.pdf 第四章 Controller接口控制器详解(1).pdf 第四章 Controller接口控制器详解(2).pdf 第四章 Controller接口控制器详解(3...

    关于Spring MVC在Controller层中注入request的坑详解

    主要给大家介绍了关于Spring MVC在Controller层中注入request的坑的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

    SpringMVC Controller 返回值的可选类型详解

    本篇文章主要介绍了SpringMVC Controller 返回值的可选类型详解 ,spring mvc 支持如下的返回方式:ModelAndView, Model, ModelMap, Map,View, String, void,有兴趣的可以了解一下

    跟我学SpringMVC 教程

    第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者请求限定 第六章 注解式控制器详解 SpringMVC强大的数据绑定(1) 第六章 注解式控制器详解 SpringMVC强大的数据绑定(2) 第七章 注解式控制器的...

    跟我学SpringMVC

    第六章 注解式控制器详解 Spring MVC 3.1新特性 生产者、消费者请求限定 第六章 注解式控制器详解 SpringMVC强大的数据绑定(1) 第六章 注解式控制器详解 SpringMVC强大的数据绑定(2) 第七章 注解式控制器的数据...

    Java Spring MVC 上传下载文件配置及controller方法详解

    主要介绍了Java Spring MVC 上传下载文件配置及controller方法详解,本文介绍的非常详细,具有参考借鉴价值,需要的朋友可以参考下

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

    10.5 Spring的控制器(Controller) 10.5.1 Controller接口 10.5.2 命令控制器(BaseCommandController) 10.5.3 表单控制器(SimpleFormController) 10.5.4 多动作控制器(MultiActionController) 10.6 Spring的...

    详解利用SpringMVC拦截器控制Controller返回值

    主要介绍了详解利用SpringMVC拦截器控制Controller返回值,通过定义一个StringResult注解,在访问方法的时候返回StringResult中的内容,有兴趣的可以了解一下。

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

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. ...

    Spring中文帮助文档

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 ...

    spring mvc 组合mybatis框架实例详解

    本项目采用 maven 结构,主要演示了 spring mvc + mybatis,controller 获取数据后以json 格式返回数据。对spring mvc 组合mybatis的方法感兴趣的朋友可以参考下本

    java Spring MVC4环境搭建实例详解(步骤)

    spring WEB MVC框架提供了一个MVC(model-view-controller)模型-视图-控制器的结构和组件,利用它可以开发更灵活、松耦合的web应用。MVC模式使得整个服务应用的各部分(控制逻辑、业务逻辑、UI界面展示)分离开来,使...

Global site tag (gtag.js) - Google Analytics