Struts2, Guice и index.jsp - PullRequest
       19

Struts2, Guice и index.jsp

0 голосов
/ 05 марта 2019

Использование подкласса GuiceServletContextListener аналогично примеру из проекта Guice здесь и web.xml здесь .

Я обнаружил, что index.jsp веб-приложения никогда не доступен при просмотре в корне (например, localhost: 8080). Это правильно, учитывая конфигурацию web.xml :

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

(см. web.xml ниже)

Возможно, вы заметили отсутствие суффикса .jsp для файла index.jsp . Это связано с ограничениями безопасности, добавленными в web.xml в соответствии с рекомендациями документации Struts2 здесь . Если суффикс добавлен или список файлов приветствия пропущен, ограничение безопасности вступит в силу.

Итак, мне пришлось настроить Struts2 (как это выглядит) и каким-то странным образом заставить приложение работать:

<action name=""/>

(см. struts.xml ниже)

Вопросы

Корректна ли конфигурация Struts2? Или я должен настраивать Struts2 по-другому? Если да, то что?

Любая помощь с благодарностью получена.

Настройка

  • Java 8
  • Tomcat 9
  • Распорки 2.5.20
  • Guice 4.2.2

web.xml

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

1 Ответ

0 голосов
/ 05 марта 2019

Ответ, возможно, проще, чем я думал:

  • Измените 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"/>

...