-1

全部,

我进行了搜索和研究,但找不到将现有项目从 Tomcat 7.x 迁移到 WebSphere 8.0 所缺少的内容。我已经为这个问题创建了一个解决方法,但我的好奇心越来越好,因为我不明白为什么。我的问题是,当我第一次将项目加载到 WebSphere 时,我得到了There is no Action mapped for namespace [/] and action name [] associated with context path. 我研究并发现了一些可以尝试的方法。我添加了

com.ibm.ws.webcontainer.removetrailingservletpathslash=true
com.ibm.ws.webcontainer.mapFiltersToAsterisk=true
com.ibm.ws.webcontainer.invokefilterscompatibility=true

无济于事,最终我添加了一个重定向到欢迎页面的空操作,一切都很好。但是,我个人认为这是一种解决方法,而不是解决方法。所以,我想我的问题是为什么它不属于欢迎文件列表?我在设置/转移项目时错过了什么吗?我是否误解了过滤器的工作原理?

我在我的 struts2 解决方法、web.xml 和文件结构下面包含了。感谢你们可以提供任何帮助。

杰夫

web.xml 片段

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>    

<filter-mapping>
    <filter-name>securityContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

struts.xml 片段

<package name="dst" extends="struts-default" namespace="/">

<!-- Added as a workaround to the problem -->
<action name="">
    <result>/index.jsp</result>
</action>
</package>

正在使用的文件结构

web
----WEB-INF
--------jsp (Folder holding jsps)
--------lib (Extra jars being used)
--------web.xml
----index.jsp

编辑

按要求

索引.jsp

<%@ page language="java" import="java.util.*" %>
<%@ include file="/WEB-INF/jsp/include/taglib.jsp" %> 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="pragma" content="no-cache">
        <meta http-equiv="cache-control" content="no-cache">
        <meta http-equiv="expires" content="0">
    </head>

    <body>
        <div> Test Page</div>       
    </body>
</html>
4

2 回答 2

2

struts.action.extension最简单的方法是action在 struts.properties 文件中设置常量。这样,DefaultActionMapper只尝试映射*.action模式,将默认的空白请求留给/底层服务器处理。

我猜你也可以重写DefaultActionMapperto makegetMapping方法来返回nullfor /。您需要将常量设置struts.mapper.class为新类的限定名称。

值得一提的是,tomcat 中不存在同样的问题,因为在访问 struts 2 过滤器之前, tomcat 会替换/为欢迎文件(例如/become )。/index.jsp

于 2017-11-06T09:27:58.213 回答
0

在遵循一些 Struts2 教程后,我遇到了同样的事情,我无法弄清楚为什么它没有index.jsp返回<welcome-file-list>.

我发现问题出在我们的web.xml文件中。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>    

<filter-mapping>
    <filter-name>securityContextFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>

过滤器映射的<url-pattern>/*</url-pattern>意思是,包括默认空白请求在内的所有请求都应过滤到 struts2。这就是为什么返回 index.jsp 文件或任何欢迎文件的原因。

如果您编辑/删除过滤器映射并再次运行,它将加载欢迎文件。

似乎这只是对过滤器如何应用于根目录的误解。

于 2016-12-05T22:01:58.623 回答