如果您的應用程式的規模越來越大,若您為每一個請求的處理撰寫一個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 来... AbstractController MultiActionController 与 ParameterMethodNameResolver MultiActionController 与 PropertiesMethodNameResolver ParameterizableViewController ...
spring mvc MultiActionController配置方法源码,可以部署到tomcat中访问
Spring MVC MultiActionController---多动作控制器 博客介绍: http://blog.csdn.net/sunshine_love/article/details/8842261 更换web.xml中web-config.xml即可尝试不同方法解析器,如有问题,请博客回复。欢迎交流...
springMVC3学习(五)--MultiActionController(源码) 文章地址:http://blog.csdn.net/itmyhome1990/article/details/25988091
SpringMVCMultiActionController的使用最简化教程
MultiActionController
并且着重介绍了MultiActionController多动作控制器的两种方法名解析方法ParameterMethodNameResolver方法和PropertiesMethodNameResolver 文章详解:http://www.anbyke.com/project/2012/0628133299200.html
MultiActionController静态访问
web项目log4j简单案例 只需下载导入即可!方便易学习。
自己写的spring表单绑定的小例子,分别使用SimpleFormController,MultiActionController,spring的form tag和validator。 还在MultiActionController里面实现了表单的绑定
使用 MultiActionController 实现查询,保存,带上传文件功能
4 使用MultiActionController 5 所有service利用spring注入到controller中,利用注解 6 数据库连接串单独在properties文件配置 7 在spring中配置数据源,属性使用properties文件中的配置 8 利用JdbcTemplate操作...
cotroller继承MultiActionController,不用写dopost doget方法,直接在controller中写方法,方法名称来源于请求带过来的value值,请求格式如下, <form action="/Login.do"> <button type="submit" name=...
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 小结 第十一章 ...
All Classes ...ParameterMethodNameResolver ParameterNameDiscoverer ParsedSql ParserContext ParseState ParseState.Entry PassThroughSourceExtractor PasswordInputTag PathMap PathMatcher ...
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. ...
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 小结 第十一章 ...
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. ...
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 小结 第十一章 ...
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 小结 第十一章 ...