我有一个使用struts的web应用程序,可以通过将其输入URL来访问某个动作
localhost/project/index.action
但如果没有明确输入,它将不会重定向到此默认操作。
localhost/project/
给出错误
Error 404: SRVE0190E: File not found: {0}
我假设找不到该文件,因为我没有正确配置某些内容。
对于使用Struts 2获取此行为,有人能指出正确的方向吗?
这里的每个请求是我的struts.xml和web.xml
的web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" 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">
<display-name>Doc Parser</display-name>
<filter>
<filter-name>struts-prepare</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareFilter</filter-class>
</filter>
<filter>
<filter-name>struts-execute</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsExecuteFilter</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.sitemesh.webapp.SiteMeshFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts-prepare</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>/struts/*</url-pattern>
<url-pattern>/</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>/struts/*</url-pattern>
<url-pattern>/</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>struts-execute</filter-name>
<url-pattern>*.action</url-pattern>
<url-pattern>/struts/*</url-pattern>
<url-pattern>/</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class>
</listener>
<servlet>
<servlet-name>sitemesh-freemarker</servlet-name>
<servlet-class>org.apache.struts2.sitemesh.FreemarkerDecoratorServlet</servlet-class>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>sitemesh-velocity</servlet-name>
<servlet-class>org.apache.struts2.sitemesh.VelocityDecoratorServlet</servlet-class>
<init-param>
<param-name>default_encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>sitemesh-freemarker</servlet-name>
<url-pattern>*.ftl</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>sitemesh-velocity</servlet-name>
<url-pattern>*.vm</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
Strust.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<constant name="struts.freemarker.templatesCache" value="true" />
<constant name="site.framework.roles"
value="
free => http://security.site.com/service/mwstutorial/getItems,
loggedIn => http://security.site.com/service/mwstutorial/setItems" />
<package name="blank" extends="default">
</package>
答案 0 :(得分:2)
我发现
的过滤器映射 <url-pattern>*.action</url-pattern>
<url-pattern>/struts/*</url-pattern>
<url-pattern>/</url-pattern>
阻止重定向到我的欢迎文件。
的模式
<url-pattern>/*</url-pattern>
修复了问题。
答案 1 :(得分:2)
我的方法略有不同。无论是Struts 2还是java都没关系。
只需在执行重定向的Web应用程序的根目录中添加index.html。
<meta http-equiv="refresh" content="0; url="http://localhost/home.action" />
或者,您可以使用javascript。
<script type="text/javascript">
window.location.href = "http://localhost/home.action"
</script>
这样您就不必担心欢迎文件以及struts.xml配置。另外,您也可以在其他应用程序中使用此方法。
答案 2 :(得分:1)
对于defaut页面的操作,这对我有用
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
的index.jsp
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<s:action name="welcome21" namespace="/" executeResult="true" />
struts.xml(jsp结果不是tile)
<package name="default" namespace="/" extends="struts-default">
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<action name="welcome21" class="org.zzz.action.CommonAction" method="welcome">
<result>/jsp/welcome2.jsp</result>
</action>