Struts 2迁移到spring mvc

时间:2012-11-09 18:58:47

标签: web-applications spring-mvc struts2 migration

我正处于将Struts 2应用程序迁移到spring mvc框架的最初阶段。我已经在项目中添加了几个弹簧模块,包括弹簧芯,弹簧安全性,现在我将试图摆脱支柱弹簧mvc。

我遇到了困难 - 我正在尝试将我的一些struts动作重新映射到bean。这是一个例子:

我在struts.xml文件中配置了一个操作:

<package name="default" extends="struts-default">
    <result-types>
            <result-type name="json" class="org.apache.struts2.json.JSONResult" />
    </result-types>
    ...
    <action name="tools" class="com.carfax.pb.dashboard.processing.action.RerunEventsAction" method="getAllRerunEvents">
        <result name="success">/WEB-INF/jsp/tools/home.jsp</result>
    </action>
    ...
</package>

所以基本上我有一个tools.home jsp页面,它是上面定义的动作的视图。我为这个视图创建了一个控制器类(基本上只是将实现从动作中移除并将其移动到一个groovy控制器类中):

@Controller
@RequestMapping("/tools")
class RerunEventsController {

...

    public String getAllRerunEvents() {

        ...
        return ActionSupport.SUCCESS;
    }    


...
}

现在我正在试图弄清楚如何连接这两个,这就是我遇到困难的地方。

  1. 我不知道如何使struts延迟我的struts.xml中定义的映射(我仍然希望支持剩余的struts操作,因为我将逐个将操作移动到控制器中。

  2. 我不知道如何正确配置从命名空间到控制器到视图的映射。

  3. 这是我试过的 -

    的web.xml:

    <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/PBDashboard/*</url-pattern>
    </servlet-mapping>
    

    servlet.xml中:

    // Spring应该自动找到我在这个包中存在的控制器

    <context:component-scan base-package="com.carfax.pb.dashboard.processing.action" />
    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/WEB-INF/jsp/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
    

    我的web.xml同时设置了Struts2过滤器和过滤器映射:

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
    </filter>
    
    <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    当我导航到appname / tools时,我收到一个struts错误,说“没有为名称空间/动作名称工具映射动作”

    这显然是正确的,但我觉得我已经设置了一个春天mvc应该选择的映射。

    有人能指出一些关于如何正确地做到这一点的信息,甚至更好地指出我的错误吗?

2 个答案:

答案 0 :(得分:3)

如果我是正确的,你的web.xml也应该有/ *的Struts过滤器。然后,您可以将DispatcherServlet映射为默认servlet(/),并使用以下内容排除struts.xml中的迁移操作:

<constant name="struts.action.excludePattern" value="/tools"/>

然后,Struts应处理除/ tools之外的所有请求,并将/ tools URL保留为Spring。

答案 1 :(得分:1)

我们将看到将struts中的Web应用程序迁移到spring mvc。我们将逐步完成Spring迁移的Struts。在这里,我将逐步分享您使用注释将应用程序从Struts迁移到Spring的过程。

  1. 用弹簧库替换struts库。
  2. 对struts进行弹簧迁移的web.xml文件所做的更改
  3. 将struts的配置文件替换为spring迁移
  4. JSP更改struts到spring迁移
  5. 针对弹簧迁移的struts的操作类更改
  6. struts对春季迁移的验证更改
  7. 首先在GeekOnJava

    上定义了六个步骤