Запомните это:
Потребители едят ужин (супер); Производитель продлевает фабрику своего родителя
blockquote>
Лично, я сохранил бы ту же установку, которую Вы имеете теперь, но изменяете перенаправление для вперед. Это старается не передавать заголовок обратно клиенту и иметь их, выполняют другой запрос.
Так, в частности, я заменил бы
<%
response.sendRedirect("/myproject/MyAction.action");
%>
в index.jsp с
<jsp:forward page="/MyAction.action" />
, другой эффект этого изменения состоит в том, что пользователь не будет видеть URL в изменении строки поиска от" http://server/myproject " к" http://server/myproject/index.jsp ", как это вперед происходит внутренне на сервере.
Я создал бы фильтр и возвратил бы все запросы для укоренения назад с вперед ответом. Взломы с созданием home.do страница выглядят ужасными мне (Еще одна вещь помнить за Вас и заняться расследованиями для кого-то, кто будет поддерживать Ваш код).
"Конечно, существует лучший путь!"
нет. Спецификации сервлета (Спецификация 2.4 Сервлета Java, "Файлы Приветствия SRV.9.10", например) состояние:
цель этого механизма состоит в том, чтобы позволить устройству развертывания определять заказанный список частичного URIs для контейнера для использования для добавления для URIs, когда существует запрос на URI, который соответствует записи каталога в ВОЙНЕ, не отображенной на веб-компоненте.
Вы не можете отобразить Struts на '/', потому что Struts отчасти требует для работы с расширением файла. Таким образом, Вас оставляют использовать отображенный компонент implicitely, такой как JSP или статический файл. Всеми другими решениями являются просто взломы. Поэтому сохраните свое решение, это совершенно читаемо и удобно в сопровождении, не потрудитесь смотреть далее.
Кажется, что популярное решение не будет работать во всех контейнерах... http://www.theserverside.com/discussions/thread.tss?thread_id=30190
С 2,4 версий спецификации Сервлета Вам разрешают иметь сервлет в желанном списке файлов. Обратите внимание, что это не может быть URL (таким как/myproject/MyAction.action). Это должен быть именованный сервлет, и Вы не можете передать строку запроса сервлету. Ваш сервлет контроллера должен был бы иметь действие по умолчанию.
<servlet>
<servlet-name>MyController</servlet-name>
<servlet-class>com.example.MyControllerServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyController</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>MyController</welcome-file>
</welcome-file-list>
Что-то, что я делаю, - это помещаю пустой файл с тем же именем, что и ваше действие struts, и обманываю контейнер для вызова действия struts.
Пример. Если ваше действие struts - welcome.do, создайте пустой файл с именем welcome.do. Это должно заставить контейнер вызвать действие Struts.