web-applications - Struts 2 迁移到 Spring MVC

标签 web-applications spring-mvc struts2 migration

我正处于将 Struts 2 应用程序迁移到 spring mvc 框架的早期阶段。我已经向项目添加了几个 spring 模块,包括 spring core、spring security,现在我将尝试放弃 struts,转而使用 spring 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 页面,它是上面定义的操作的 View 。我已经为此 View 创建了一个 Controller 类(基本上只是将实现从操作中取出,并将其移至常规 Controller 类中):

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

...

    public String getAllRerunEvents() {

        ...
        return ActionSupport.SUCCESS;
    }    


...
}

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

  1. 我不知道如何使 struts 遵循 struts.xml 中定义的映射(我仍然希望支持剩余的 struts 操作,因为我将把这些操作一一移动到 Controller 中。

  2. 我不知道如何正确配置从命名空间到 Controller 的映射以进行查看。

这是我尝试过的 -

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 应该自动找到我的 Controller ,因为它存在于这个包中

<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 错误,指出“没有为命名空间/和操作名称工具映射的操作”

这显然是正确的,但我觉得我已经设置了 spring mvc 应该拾取的映射。

有人可以向我指出一些有关如何正确执行此操作/变得更好并指出我的错误的信息吗?

最佳答案

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

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

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

关于web-applications - Struts 2 迁移到 Spring MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314240/

相关文章:

javascript - 突出显示图像和文本

javascript - Lighthouse 错误地指出我尚未注册 Service Worker

java - 如何在 java spring 中读取具有相同前缀的多个属性?

java - 在Spring MVC中,如何映射/settings/、/settings/users/、/settings/users/delete等嵌套URL?

java - Struts2 在 JSP 中从 session 映射迭代

javascript - jqGrid 显示 'edit' 图标用于行内编辑

java - Web 应用程序中的 Jboss 共享库

perl - perl中可以实现Paros代理功能的最佳模块是什么

spring-mvc - @RequestParam 和 @QueryParam 注解有什么区别

java - 如何在Struts 2 Action类中接收由jquery的getJSON()发送的json请求数据?