首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Struts 2迁移到spring

Struts 2迁移到spring
EN

Stack Overflow用户
提问于 2012-11-09 18:58:46
回答 1查看 7.9K关注 0票数 2

我正处于将Struts 2应用程序迁移到spring框架的非常早期阶段。我已经在这个项目中添加了几个spring模块,包括spring核心、spring安全性,现在我将尝试离开struts,转而支持spring。

不过,我遇到了一些困难--我正试图把我的一些支撑动作重新映射到豆子上。下面是一个例子:

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

代码语言:javascript
复制
<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控制器类中):

代码语言:javascript
复制
@Controller
@RequestMapping("/tools")
class RerunEventsController {

...

    public String getAllRerunEvents() {

        ...
        return ActionSupport.SUCCESS;
    }    


...
}

现在我想弄清楚如何把这两条线连接起来,这就是我遇到困难的地方。

  1. 我不知道如何使struts延迟到在我的struts.xml中定义的映射(我仍然希望支持剩下的struts操作,因为我将一个接一个地将这些操作移动到控制器中。
  2. 我不知道如何正确配置从名称空间到控制器到视图的映射。

我试过的是-

web.xml:

代码语言:javascript
复制
<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应该会自动找到我的控制器,因为它存在于这个包中

代码语言:javascript
复制
<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过滤器和过滤器映射,如下所示:

代码语言:javascript
复制
<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应该进行的映射。

有人能告诉我一些关于如何正确地做这件事的信息吗?更好地指出我的错误?

EN

回答 1

Stack Overflow用户

发布于 2012-11-09 19:34:28

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

代码语言:javascript
复制
<constant name="struts.action.excludePattern" value="/tools"/>

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13314240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档