Struts2 操作扩展设置为空时出现 404 错误
404 error when Struts2 action extension is set to empty
我想删除 Struts2 应用程序中的操作后缀扩展。
已将 <constant name="struts.action.extension" value=""/>
添加到 struts.xml
但是 Apache 服务器抛出 404 错误。
HTTP Status 404 - There is no Action mapped for namespace [/] and action
name [login.jsp] associated with context path [/Ideck_V3].
我在 web.xml
中使用 welcome-file-list
作为第一页。
这里是web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.hbs.ideck.common.Struts2Dispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
这是struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value=""/>
<include file="user.xml"/>
<include file="vendor.xml"/>
<include file="settings.xml"/>
</struts>
我该如何解决这个问题?
由于您没有为您的操作设置任何扩展名,因此“/*”(请参阅您的 web.xml)中的所有内容都会被拦截。如果您想过滤所有内容并且不设置任何扩展名,那么所有内容都将是 struts.
的操作
您可以尝试只过滤一条路径
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/actions/*</url-pattern>
</filter-mapping>
或者您必须设置扩展名
<constant name="struts.action.extension" value="action" />
或排除一些模式
<constant name="struts.action.excludePattern" value="A REGEX"/>
默认的扩展名映射是 ",,action"
。这意味着您可以使用映射到带 .action
后缀和不带后缀的动作名称,因此如果您想删除动作后缀扩展,您需要在 struts.xml
中将其指定为
<constant name="struts.action.extension" value=","/>
请注意,没有动作后缀的动作映射仍然存在。它允许解析 url 中的扩展,例如 .jsp
,并且不要将其与操作名称混淆。
我想删除 Struts2 应用程序中的操作后缀扩展。
已将 <constant name="struts.action.extension" value=""/>
添加到 struts.xml
但是 Apache 服务器抛出 404 错误。
HTTP Status 404 - There is no Action mapped for namespace [/] and action name [login.jsp] associated with context path [/Ideck_V3].
我在 web.xml
中使用 welcome-file-list
作为第一页。
这里是web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<filter>
<filter-name>struts2</filter-name>
<filter-class>com.hbs.ideck.common.Struts2Dispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
这是struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<constant name="struts.action.extension" value=""/>
<include file="user.xml"/>
<include file="vendor.xml"/>
<include file="settings.xml"/>
</struts>
我该如何解决这个问题?
由于您没有为您的操作设置任何扩展名,因此“/*”(请参阅您的 web.xml)中的所有内容都会被拦截。如果您想过滤所有内容并且不设置任何扩展名,那么所有内容都将是 struts.
的操作您可以尝试只过滤一条路径
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/actions/*</url-pattern>
</filter-mapping>
或者您必须设置扩展名
<constant name="struts.action.extension" value="action" />
或排除一些模式
<constant name="struts.action.excludePattern" value="A REGEX"/>
默认的扩展名映射是 ",,action"
。这意味着您可以使用映射到带 .action
后缀和不带后缀的动作名称,因此如果您想删除动作后缀扩展,您需要在 struts.xml
中将其指定为
<constant name="struts.action.extension" value=","/>
请注意,没有动作后缀的动作映射仍然存在。它允许解析 url 中的扩展,例如 .jsp
,并且不要将其与操作名称混淆。