Struts2,Guice和index.jsp

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2,Guice和index.jsp相关的知识,希望对你有一定的参考价值。

使用GuiceServletContextListener子类,类似于Guice项目here和web.xml here中的示例。

我发现浏览到root时从不访问webapp的index.jsp(例如localhost:8080)。考虑到web.xml的配置,这是正确的:

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

(见下面的web.xml)

您可能已经注意到index.jsp文件缺少后缀.jsp。这是因为Struts2文档here建议的web.xml中添加了安全性约束。如果添加了后缀或省略了欢迎文件列表,则安全约束将启动。

所以,我必须配置Struts2(看起来像什么)以及使应用程序工作的奇怪方法:

<action name=""/>

(参见下面的struts.xml)

问题

Struts2配置是否正确?或者我应该以不同的方式配置Struts2?如果是这样,什么?

任何帮助感激不尽。

建立

  • Java 8
  • 雄猫9
  • Struts 2.5.20
  • Guice 4.2.2

veb.hml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 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_3_0.xsd" version="3.0">

  <display-name>PVS Web Application</display-name>

  <listener>
    <listener-class>org.veary.pvs.web.guice.GuiceListener</listener-class>
  </listener>  

  <filter>
    <filter-name>guice</filter-name>
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class>
  </filter>

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

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

  <security-constraint>
    <display-name>No direct JSP access</display-name>
    <web-resource-collection>
      <web-resource-name>No-JSP</web-resource-name>
      <url-pattern>*.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>no-users</role-name>
    </auth-constraint>
  </security-constraint>

  <security-role>
    <description>Don't assign users to this role</description>
    <role-name>no-users</role-name>
  </security-role>

</web-app>

在struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"https://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <constant name="struts.devMode" value="true"/>
    <constant name="struts.ui.theme" value="simple" />

    <package name="pvs-base" namespace="/" extends="struts-default">
      <interceptors>
        <interceptor-stack name="pvsDefault">
          <interceptor-ref name="validationWorkflowStack"/>
        </interceptor-stack>
      </interceptors>
      <default-interceptor-ref name="pvsDefault" />
      <global-results>
        <result>/themes/default/layout.jsp</result>
      </global-results>
      <action name=""/>
    </package>

</struts>
答案

答案可能比我想象的要容易:

  • 修改web.xml以使用index.html而不是index.jsp: <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list>
  • 在新的index.html中使用以下内容: <META HTTP-EQUIV="Refresh" CONTENT="0;URL=index"> 要么 <script>top.location='index';</script>
  • 在struts.xml中,更改为以下内容: <action name="index"/>

以上是关于Struts2,Guice和index.jsp的主要内容,如果未能解决你的问题,请参考以下文章

guice整合struts2与jpa,guice的使用

Struts2例子

Struts2使用demo

Struts2文件上传和下载

struts2文件上传

Struts2_Path