`

MultiActionController 与 ParameterMethodNameResolver

 
阅读更多
如果您的應用程式的規模越來越大,若您為每一個請求的處理撰寫一個Controller類別,很快的,您發現到Web應用程式中有越來越多的 Controller類別,而事實上當中的一些職責是可以組織在一個類別,例如與資料庫操作相關的list()、add()、delete()等方法,就可以組織在一個類別來加以管理。

您可以使用AbstractController類別的一個子類別: org.springframework.web.servlet.mvc.multiaction.MultiActionController。它可以讓您在一個Controller類別中定義多個方法,並根據使用者的請求來呼叫當中的某個方法來執行。

要使用MultiActionController,您要配合一個 org.springframework.web.servlet.mvc.multiaction.MethodNameResolver的實例, MultiActionController預設使用的MethodNameResolver類別是 org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver,這個類別可以根據您所給的網址最後的檔案名稱來判斷要執行Controller中的哪一個方法,例如若請求的/test.do的請求會執行test (HttpServletRequest, HttpServletResponse)方法,但通常不會使用InternalPathMethodNameResolver,因為這就失去了使用 MultiActionController的一些優點,像是依使用者所附帶的請求參數來決定所要呼叫的方法。

通常在使用MultiActionController時會搭配使用 org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver 或是 org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver,兩個類別都是根據一個請求參數,以參數來決定要執行Controller類別中的哪一個方法,這邊先以 ParameterMethodNameResolver為例,例如可以在Bean定義檔中這麼撰寫:

    * mvc-config.xml

<beans>
    <bean id="urlMapping"
          class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/book.do">bookController</prop>
            </props>
        </property>
    </bean>
  
    <bean id="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>



    <bean id="paraMethodResolver"
          class="org.springframework.web.servlet.mvc.
                    → multiaction.ParameterMethodNameResolver">
        <property name="paramName">
            <value>action</value>
        </property>
        <property name="defaultMethodName">
            <value>list</value>
        </property>
    </bean>
      
    <bean id="bookController" class="onlyfun.caterpillar.BookController">
        <property name="methodNameResolver">
            <ref bean="paraMethodResolver"/>
        </property>
        <property name="testPage">
            <value>test</value>
        </property>
    </bean>
</beans>


在paraMethodResolver的Bean定義中,使用"paramName"屬性定義在HTTP請求中使用"action"參數來指定所要呼叫的方法,若是請求中沒有指定"action"參數,則會使用"defaultMethodName"屬性所指定的方法,這邊指定的是list()方法。

BookController是個繼承MultiActionController的類別,當中可以定義在"action"參數指定下所要呼叫的方法,例如:

    * BookController.java

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


public class BookController extends MultiActionController {
    private String testPage;
  
    public ModelAndView list(HttpServletRequest req, HttpServletResponse res) {
        return new ModelAndView(this.getTestPage(),"executed", "list");
    }
  
    public ModelAndView add(HttpServletRequest req, HttpServletResponse res) {
        return new ModelAndView(this.getTestPage(),"executed", "add");
    }
  
    public ModelAndView delete(HttpServletRequest req, HttpServletResponse res) {
        return new ModelAndView(this.getTestPage(),"executed", "delete");
    }
  
    public String getTestPage() {
        return testPage;
    }
  
    public void setTestPage(String testPage) {
        this.testPage = testPage;
    }
}


注意到在定義的方法中,必須包括HttpServletRequest與HttpServletResponse的參數,您也可以使用帶有第三個參數HttpSession的版本。

以上所定義的BookController類別只是一個簡單的範例,用於測試MultiActionController的運作,它所作的處理只是設定一個字串,表示目前所執行的方法名稱,可以設計一個測試用的JSP網頁,用以顯示使用者所請求的方法,例如:

    * test.jsp

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>MultiAction Test Page</title>
    </head>
    <body>
        <H1> "${executed}" method is executed.</H1>
    </body>
</html>
分享到:
评论

相关推荐

    开源框架 Spring Gossip

    认识 Spring 来... AbstractController MultiActionController 与 ParameterMethodNameResolver MultiActionController 与 PropertiesMethodNameResolver ParameterizableViewController ...

    spring mvc MultiActionController配置方法源码

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

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

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

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

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

    SpringMVC - MultiActionController

    SpringMVCMultiActionController的使用最简化教程

    spring mvc_03

    MultiActionController

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

    并且着重介绍了MultiActionController多动作控制器的两种方法名解析方法ParameterMethodNameResolver方法和PropertiesMethodNameResolver 文章详解:http://www.anbyke.com/project/2012/0628133299200.html

    spring mvc_04

    MultiActionController静态访问

    web项目log4j简单案例

    web项目log4j简单案例 只需下载导入即可!方便易学习。

    spring 2.0表单绑定实例

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

    springMVC带上传文件

    使用 MultiActionController 实现查询,保存,带上传文件功能

    springmvcdemo

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

    springmvc_150814

    cotroller继承MultiActionController,不用写dopost doget方法,直接在controller中写方法,方法名称来源于请求带过来的value值,请求格式如下, &lt;form action="/Login.do"&gt; &lt;button type="submit" name=...

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

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

    SPRING API 2.0.CHM

    All Classes ...ParameterMethodNameResolver ParameterNameDiscoverer ParsedSql ParserContext ParseState ParseState.Entry PassThroughSourceExtractor PasswordInputTag PathMap PathMatcher ...

    spring chm文档

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. ...

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

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

    Spring 2.0 开发参考手册

    13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. 处理器映射(handler mapping) 13.4.1. BeanNameUrlHandlerMapping 13.4.2. SimpleUrlHandlerMapping 13.4.3. 拦截器(HandlerInterceptor) 13.5. ...

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

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

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

    10.5.4 多动作控制器(MultiActionController) 10.6 Spring的视图映射机制 10.6.1 分发器(DispatcherServlet) 10.6.2 视图映射 10.7 Spring的模型(Model) 10.7.1 模型简介 10.7.2 模型封装 10.8 小结 第十一章 ...

Global site tag (gtag.js) - Google Analytics