Перенаправить все запросы на подкаталог в Tomcat 6.0 - PullRequest
1 голос
/ 14 июля 2009

У меня на рабочем столе локальный сервер Tomcat 6.0.

Я пытаюсь перенаправить все запросы, соответствующие http://localhost:8080/RedirectDirectory/abc/efg/morejunk, на одну страницу JSP.

В файле web.xml моего проекта RedirectDirectory у меня есть

<servlet>
<servlet-name>IOPRedirect</servlet-name>
<jsp-file>/RedirectDirectory/filetree.jsp</jsp-file>
</servlet>

<servlet-mapping>
<servlet-name>IOPRedirect</servlet-name>
<url-pattern>/RedirectDirectory/*</url-pattern>
</servlet-mapping>

Мне бы очень хотелось, чтобы эта JSP работала независимо от того, существует каталог или нет.

Я думал, что это как это сделать, но я думаю, нет.

Есть идеи?

Спасибо

Ответы [ 2 ]

2 голосов
/ 15 июля 2009

Я обычно использую UrlRewriteFilter при решении подобных проблем.

  1. Загрузите и добавьте urlrewrite.jar в ваш путь к классам (WEB-INF / lib)
  2. Добавьте в свой WEB-INF / web.xml следующее:

    <filter>
        <filter-name>UrlRewriteFilter</filter-name>
        <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>UrlRewriteFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

  1. Отредактируйте WEB-INF / urlrewrite.xml и добавьте в него следующее:

    <rule>
        <from>^/RedirectDirectory/(.*)$</from>
        <to>/RedirectDirectory/filetree.jsp</to>
    </rule>

Наличие UrlRewriteFilter в вашем проекте очень удобно для решения многих распространенных проблем, таких как установка заголовков кэша, канонических имен хостов, принудительное использование https для определенных URL и т. Д.

0 голосов
/ 14 июля 2009

То, что вы сделали, отлично работает для сервлетов - не пробовал делать с JSP.

Редактировать: Попробовав менее точно, что вы сделали, я обнаружил, что все работает нормально. Исключение составляла пересылка на конкретный jsp, который использовал ограничение безопасности, что вызвало ошибку. Ошибка произошла из-за того, что перенаправление обошло пользователя при входе в систему, и поэтому в запросе были пропущены требуемые данные.

Обойти это можно было бы путем пересылки всех запросов сервлету и пересылки сервлета на желаемую jsp.

Ваш web.xml будет:

<servlet>
<servlet-name>IOPRedirect</servlet-name>
<servlet-class>IOPRedirect</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>IOPRedirect</servlet-name>
<url-pattern>/RedirectDirectory/*</url-pattern>
</servlet-mapping>

И вам потребуется создать сервлет IOPredirect со следующим внутри вашего метода doGet ():

String url="/RedirectDirectory/filetree.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
rd.forward(req,res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...