springMVC配置action

springMVC配置action

Spring org.springframework.web.servlet.mvc.multiaction.MultiActionController与Struts 的 DispatchAction都是通过

http://.../userAction.do?method=updateUser 的方式来指定执行哪个方法。  
1. public class UserController extends MultiActionController {
   2.     public ModelAndView updateUser(HttpServletRequest request,
   3.             HttpServletResponse response) {
   4.         System.out.println("updateUser");//方便于跟踪执行了哪个方法
   5.         return new ModelAndView("userList","from","updateUser");
   6.     }
   7.      
   8.     public ModelAndView deleteUser(HttpServletRequest request,
   9.             HttpServletResponse response) {
10.         System.out.println("deleteUser");//方便于跟踪执行了哪个方法
11.         return new ModelAndView("userList","from","deleteUser");
12.     }
13. }
Bean配置
<bean name="/updateUser.html" class="com.unmi.UserController"/>
<bean name="/deleteUser.html" class="com.unmi.UserController"/>

org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver类是根据URL样式解析方法名。
<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver"></bean>

这样配置Class用了两次,如果是N个方法那就是N次可以用org.springframework.web.servlet.handler.SimpleUrlHandlerMapping
来简化操作。
<bean id="simpleUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="mappings">
        <props>
            <prop key="/updateUser.html">updateController</prop>
            <prop key="/deleteUser.html">deleteController</prop>
        </props>
    </property>
</bean>
<bean id="updateController" class="com.xx.action.UpadateController" />
<bean id="deleteController" class="com.xx.action.DeleteController" />

通常情况下我们一个action类用来对应一个页面,所以可以使用通配符的方式来定义,例如两个页面group和user
<bean id="simpleUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

    <property name="mappings">
        <props>
            <prop key="/group/*.html">groupController</prop>
            <prop key="/user/*.html">userController</prop>
        </props>
    </property>
</bean>
<bean id="groupController" class="com.xx.action.GroupController" />
<bean id="userController" class="com.xx.action.UserController" />
另外提一下org.springframework.web.servlet.mvc.multiaction.InternalPathMethodNameResolver,我们可以写一个类在继承他,重写

protected String getHandlerMethodNameForUrlPath(String urlPath)方法。
    @Override
    protected String getHandlerMethodNameForUrlPath(String urlPath) {
        if (urlPath.endsWith("/")) {
            urlPath = urlPath.substring(0, urlPath.length() - 1);
        }
        return super.getHandlerMethodNameForUrlPath(urlPath);
    }
然后再将bean id="methodNameResolver" class改为继承InternalPathMethodNameResolver类的类比如com.xx.xx包下的A类,我们就写成

com.xx.xx.A就可以了。
别忘了在web.xml里面配置
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.htm</url-pattern>
    </servlet-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC 和 Struts 都是基于MVC架构的Web框架,但是它们的实现方式有所不同。在 Struts 中,使用 action 来处理请求,而在 Spring MVC 中则使用 handler mapping。 在 Spring MVC 中,handler mapping 是一个重要的组件,用于将请求映射到相应的处理程序。Handler mapping 可以根据请求的 URL、参数、请求头等信息来确定应该调用哪个处理程序来处理请求。 在处理 Struts action 时,可以通过自定义一个 HandlerMapping 来将 Struts action 映射到 Spring MVC 的处理程序中。具体实现方法如下: 1. 创建一个自定义的 HandlerMapping 类,并实现 Spring 的 HandlerMapping 接口。 2. 在自定义的 HandlerMapping 类中,重写 determineHandler 方法,根据请求中的 action 名称来确定应该调用哪个 Spring MVC 的处理程序。 3. 将自定义的 HandlerMapping 配置Spring MVC配置文件中。 示例代码如下: ```java public class StrutsActionHandlerMapping implements HandlerMapping { @Override public Object getHandler(HttpServletRequest request) throws Exception { String actionName = request.getParameter("action"); if ("login".equals(actionName)) { return new LoginController(); } else if ("register".equals(actionName)) { return new RegisterController(); } return null; } } ``` 在配置文件中,需要将自定义的 HandlerMapping 添加到 Spring MVC 的处理程序映射器中: ```xml <bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"> <property name="order" value="0" /> <property name="interceptors"> <list> <ref bean="localeChangeInterceptor" /> </list> </property> </bean> <bean id="strutsActionHandlerMapping" class="com.example.StrutsActionHandlerMapping" /> <bean id="loginController" class="com.example.LoginController" /> <bean id="registerController" class="com.example.RegisterController" /> <bean name="/index.jsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> ``` 在上面的配置中,首先配置了一个默认的 BeanNameUrlHandlerMapping,然后将自定义的 StrutsActionHandlerMapping 添加到处理程序映射器中。同时,还配置了 LoginController 和 RegisterController 的 Bean。最后,配置了一个视图解析器,用于解析 JSP 视图。 这样,当请求的 action 为 login 时,就会调用 LoginController 进行处理;当请求的 action 为 register 时,就会调用 RegisterController 进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值