【问题标题】:Struts 2 Default PageStruts 2 默认页面
【发布时间】:2014-05-13 22:06:06
【问题描述】:

我有一个使用 struts 2 的 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>

信任.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>

【问题讨论】:

  • 这可以通过处理 web.xml 和/或 struts.xml 来实现。显示您的两个文件以获得更好的帮助
  • 刚刚添加了它们,我想知道它是否与 标签有关?
  • 你在使用注解吗?
  • 尝试添加一个可以处理这种情况的约定插件。
  • 确实有效 :) 谢谢@RomanC​​pan>

标签: java url struts2 home-directory welcome-file


【解决方案1】:

我有一个稍微不同的方法。不管是 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】:

    我发现

    的过滤器映射
        <url-pattern>*.action</url-pattern>
        <url-pattern>/struts/*</url-pattern>
        <url-pattern>/</url-pattern>
    

    阻止重定向到我的欢迎文件。

    模式

        <url-pattern>/*</url-pattern>
    

    解决了问题。

    【讨论】:

      【解决方案3】:

      对于作为默认页面的操作,这对我有用

      <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 结果不是图块)

      <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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-18
        • 2013-10-07
        • 1970-01-01
        • 2013-12-25
        • 1970-01-01
        • 2018-02-17
        • 1970-01-01
        • 2010-09-07
        相关资源
        最近更新 更多