Как я могу установить страницу приветствия для действий Struts? - PullRequest
38 голосов
/ 02 сентября 2008

У меня есть веб-приложение на основе Struts, и я бы хотел, чтобы стандартная страница приветствия была действием. Единственными решениями, которые я нашел для этого, являются варианты создания страницы приветствия JSP, которая содержит перенаправление на действие. Например, в web.xml:

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

и в index.jsp:

<% 
  response.sendRedirect("/myproject/MyAction.action");
%> 

Конечно, есть лучший способ!

Ответы [ 15 ]

0 голосов
/ 20 ноября 2015

Я почти уверен, что ОП является лучшим решением (не уверен насчет наилучшей практики, но он работает отлично, и на самом деле это решение, которое я и мой руководитель проекта предпочитаю).

Кроме того, я считаю, что это может быть объединено с безопасностью Spring следующим образом:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

<sec:authorize access="isAnonymous()">
    <% response.sendRedirect("/myApp/login/login.action?error=false"); %>
</sec:authorize>
<sec:authorize access="isAuthenticated() and (hasRole('ADMIN') or hasRole('USER'))">
    <% response.sendRedirect("/myApp/principal/principal.action"); %>
</sec:authorize>
<sec:authorize access="isAuthenticated() and hasRole('USER')">
    <% response.sendRedirect("/myApp/user/userDetails.action"); %>
</sec:authorize>

Таким образом, мы не только контролируем первую страницу, являющуюся формой для входа, но и контролируем поток ПОСЛЕ , когда пользователь входит в систему, в зависимости от его роли. Работает как шарм.

0 голосов
/ 19 мая 2013

Я настроил следующим образом. это работало отлично и никаких изменений URL также ...

Создайте фиктивное действие, подобное следующему в файле struts2.xml. поэтому всякий раз, когда мы обращаемся к приложению, например http://localhost:8080/myapp, оно перенаправляет его на фиктивное действие и затем перенаправляет на index.jsp / index.tiles ...

<action name="">
    <result type="tiles">/index.tiles</result>
</action>

без плитки

<action name="">
    <result>/index.jsp</result>
</action>

может быть, мы настроим некоторое действие index.action в web.xml как <welcome-file>index.action</welcome-file> и используем это действие для пересылки требуемой страницы ...

0 голосов
/ 20 апреля 2013

У меня это тоже хорошо работало:

<welcome-file-list>
<welcome-file>MyAction.action</welcome-file>
</welcome-file-list>

Мне не удалось заставить выполнить действие по умолчанию при входе пользователя в веб-приложение с использованием корня веб-приложения (mywebapp /). В Struts 2.3.12 есть ошибка, которая не приведет к выполнению действия по умолчанию или использованию страницы приветствия при использовании корневого URL. Это будет обычным явлением. Как только я перешел обратно на стойки 2.1.8, все заработало нормально.

0 голосов
/ 09 апреля 2013

Просто добавьте фильтр над фильтром Strut в web.xml следующим образом:

<filter>
    <filter-name>customfilter</filter-name>
    <filter-class>com.example.CustomFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>customfilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

И добавьте следующий код в метод doFilter этого класса CustomFilter

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
        FilterChain filterChain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest)servletRequest;
    HttpServletResponse httpResponse = (HttpServletResponse)servletResponse;
    if (! httpResponse.isCommitted()) {
        if ((httpRequest.getContextPath() + "/").equals(httpRequest.getRequestURI())) {
            httpResponse.sendRedirect(httpRequest.getContextPath() + "/MyAction");
        }
        else {
            filterChain.doFilter(servletRequest, servletResponse);
        }
    }
}

Так что фильтр будет перенаправлять на действие. Вам также не нужно размещать JSP вне WEB-INF.

0 голосов
/ 11 февраля 2013

Это работает так же, уменьшая потребность в новом сервлете или jsp

<welcome-file-list>
<welcome-file>/MyAction.action</welcome-file>
</welcome-file-list>
...