论坛首页 Java企业应用论坛

MultiActionController与3种MethodNameResolver的配置

浏览 3895 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-02-22  
今天又被人问了MultiActionController与MethodNameResolver的配置,就贴出来.
  • ParameterMethodNameResolver
  • InternalPathMethodNameResolver
  • PropertiesMethodNameResolver

配置web.xml
	<servlet>
		<servlet-name>spring</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<load-on-startup>2</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>spring</servlet-name>
		<url-pattern>/spring/*</url-pattern>
	</servlet-mapping>



定义一个Controller继承与MultiActionController
package cn.iwoo.server.controller;

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 BController extends MultiActionController {
	public ModelAndView doSearch(HttpServletRequest request, HttpServletResponse response) throws Exception {
		System.out.println(this.getClass() + "." + "doSearch()");
		return new ModelAndView("");
	}
}

方法的定义必须符合下面的格式
public (ModelAndView | Map | String | void) actionName(HttpServletRequest request, HttpServletResponse response);


定义ViewResolver
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"><value>org.springframework.web.servlet.view.JstlView</value></property>
        <property name="prefix"><value>/WEB-INF/jsp/</value></property>
        <property name="suffix"><value>.jsp</value></property>
    </bean>


定义UrlHandlerMapping
    <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="urlMap">
			<map>
				<entry key="/b/*"><ref bean="bController"></ref></entry>
			</map>
		</property>
    </bean>


定义MethodNameResolver
一共定义了3个不同类型的MethodNameResolver.
	<!-- MethodNameResolver Definition -->
	<bean id="bMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
		<property name="paramName" value="method"></property>
		<property name="logicalMappings">
			<props>
				<prop key="doSearch">doSearch</prop>
			</props>
		</property>
	</bean>
	
	<bean id="cMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver">
	</bean>
		
	<bean id="dMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
	    <property name="mappings">
	        <value>
	            /b/page.html=doSearch
	        </value>
	    </property>
	</bean>


定义Controller
	<!-- Controller Definition -->
	<bean id="bController" class="cn.iwoo.server.controller.BController">
    	<!-- <property name="methodNameResolver"><ref local="bMethodNameResolver"/></property> -->
    	<!-- <property name="methodNameResolver"><ref local="cMethodNameResolver"/></property> -->
    	<property name="methodNameResolver"><ref local="dMethodNameResolver"/></property>
    </bean>


测试
下面是对应于不同MethodNameResolver的测试url.
  • http://localhost:9080/cn.iwoo/spring/b?method=doSearch
  • http://localhost:9080/cn.iwoo/spring/b/doSearch
  • http://localhost:9080/cn.iwoo/spring/b/page.html

注:/b/是我的controller的映射前缀,在PropertiesMethodNameResolver的mappings配置里面,网址必须是/b/开头,也就是controller的前缀也需要写进去. 这是我测试的结果,不知是否必须这样.

以上代码测试过,可用.
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics