Как настроить страницу приветствия на действие struts?

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

  index.jsp  

и в index.jsp :

  

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

Лично я бы сохранил ту же настройку, что и сейчас, но изменил redirect для форварда. Это позволяет отказаться от отправки заголовка обратно клиенту и сделать их другим запросом.

Поэтому, в частности, я бы заменил

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

в index.jsp с

  

Другим эффектом этого изменения является то, что пользователь не увидит URL-адрес в адресной строке с « http: // server / myproject » на « http: //server/myproject/index.jsp », поскольку пересылка происходит внутренне на сервере.

Это довольно старый stream, но обсуждаемая тема, я думаю, по-прежнему актуальна. Для этого я использую тег struts – s: action. Я создал index.jsp, в котором я написал это …

  

Начиная с версии 2.4 версии Servlet, вы можете иметь сервлет в списке файлов приветствия. Обратите внимание, что это может быть не URL-адрес (например, /myproject/MyAction.action). Это должен быть именованный сервлет, и вы не можете передать строку запроса сервлету. Сервлет вашего controllerа должен иметь действие по умолчанию.

  MyController com.example.MyControllerServlet   MyController *.action   MyController  

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

Нет. Спецификации сервлета (Java Servlet Specification 2.4, «SRV.9.10 Приветственные файлы», например):

objective этого механизма состоит в том, чтобы позволить развертывателю указать упорядоченный список частичных URI для контейнера, который будет использоваться для добавления к URI, когда есть запрос на URI, который соответствует записи каталога в WAR, не привязанной к веб-компоненту ,

Вы не можете привязывать Struts к ‘/’, потому что для Struts требуется работать с расширением файла. Таким образом, вам остается использовать неявно сопоставленный компонент, такой как JSP или статический файл. Все остальные решения – это просто хаки. Так что держите свое решение, оно отлично читается и поддерживается, не беспокойтесь, глядя дальше.

Что-то, что я делаю, это поместить пустой файл с тем же именем, что и действие ваших расположений, и обмануть контейнер, чтобы вызвать действие struts.

Ex. Если ваше действие struts приветствуется. Do, создайте пустой файл с именем welcome.do. Это должно обмануть контейнер, чтобы вызвать действие Struts.

Похоже, что популярное решение не будет работать во всех контейнерах … http://www.theserverside.com/discussions/thread.tss?thread_id=30190

Я бы создал фильтр и отскакивал все запросы, чтобы вернуть его обратно с помощью прямого ответа. Взломы с созданием страницы home.do кажутся уродливыми для меня (еще одна вещь, которую нужно помнить для вас и расследовать для тех, кто будет поддерживать ваш код).

Здесь два блогов с одинаковой техникой:

Для этого требуется Servlet API> = v2.4:

  dispatcher / /index.htm <<== *1*   index.htm <<== *2*  

поэтому вам больше не нужен redirect.jsp в каталоге вне WEB-INF !!

есть этот ответ выше, но это не ясно о контексте веб-приложений, поэтому я делаю это:

  index.jsp   TilesDispatchServlet org.apache.tiles.web.util.TilesDispatchServlet   TilesDispatchServlet *.tiles  

А в index.jsp я просто пишу:

  

И у меня есть определение индекса, именованный index и все это togather работает нормально и не зависит от контекста контекста webapp.

Я настроен следующим образом. он работал отлично, и изменение URL тоже …

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

  /index.tiles  

без плиток

  /index.jsp  

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

Я почти уверен, что OP – лучшее решение (не уверенный в лучшей практике, но он отлично работает, и на самом деле это решение, которое я предпочитаю для своего руководителя проекта).

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

 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>  <% response.sendRedirect("/myApp/login/login.action?error=false"); %>   <% response.sendRedirect("/myApp/principal/principal.action"); %>   <% response.sendRedirect("/myApp/user/userDetails.action"); %>  

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

Ниже код можно использовать в struts.xml для загрузки приветственной страницы.

Выполните некоторые действия перед загрузкой приветственной страницы.

   login.jsp   

Верните непосредственно некоторые JSP без выполнения действия.

   login.jsp   

Нет. не требуется в web.xml.

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

  customfilter com.example.CustomFilter   customfilter /*  

И добавьте следующий код в метод doFilter этого classа 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.

Это также уменьшает необходимость в новом сервлете или jsp

  /MyAction.action  

Это тоже помогло мне:

  MyAction.action  

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

Interesting Posts

VBA: разделите значения ячеек на несколько строк и сохраните другие данные

Maven in Eclipse: пошаговая установка

Можно ли одновременно запускать два сеанса Windows с одного компьютера?

Инъекция зависимостей через конструкторы или средства определения свойств?

Использовать requirejs и jquery, не сбивая глобальный jquery?

Stateful EJB в веб-приложении?

Как создать пользовательскую 3d-модель в JavaFX 8?

Приложения Windows Metro имеют неправильный значок в пользовательском интерфейсе поиска

Каковы наилучшие последовательности команд для генерации векторных констант «на лету»?

Как сделать кнопку «Edit» «Готово» Android и скрыть клавиатуру при нажатии?

Получение исходного каталога сценария Bash изнутри

Как найти поток за Flash-проигрывателем

Если async-wait не создает никаких дополнительных streamов, то как это реагирует на приложения?

Maven: ошибка при открытии zip-файла при запуске maven

Java Array Сортировать по убыванию?

Давайте будем гением компьютера.