Скрыть расширение .jsp в проекте JSP, используя отображение сервлетов - PullRequest
4 голосов
/ 11 августа 2011

Я пишу приложение в JSP, и мне нужно удалить расширение «.jsp» из URL.Например, мне нужно:

http://example.com/search.jsp?q=stackoverflow

Чтобы быть:

http://example.com/search?q=stackoverflow

Я знаю, что это можно сделать с помощью файла ".htaccess", но мне нужен другой способ.Я пробовал следующий код:

<servlet-mapping>
   <servlet-name>jsp</servlet-name>
   <url-pattern>*.</url-pattern>
</servlet-mapping>

Однако это не сработало.У кого-нибудь есть предложения, как этого добиться?Заранее спасибо за любую помощь.

1 Ответ

12 голосов
/ 11 августа 2011

При отображении сервлета вам нужно отдельно указать каждую JSP следующим образом:

<servlet>
    <servlet-name>search</servlet-name>
    <jsp-file>/search.jsp</jsp-file>
</servlet>
<servlet-mapping>
    <servlet-name>search</servlet-name>
    <url-pattern>/search</url-pattern>
</servlet-mapping>

Проще, если все эти JSP находятся на общем пути. Например. /app/*.

<servlet>
    <servlet-name>app</servlet-name>
    <servlet-class>com.example.FriendlyURLServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>app</servlet-name>
    <url-pattern>/app/*</url-pattern>
</servlet-mapping>

с

request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);

Предполагается, что JSP находятся в папке /WEB-INF, поэтому их нельзя запросить напрямую. Это покажет /WEB-INF/search.jsp на http://example.com/app/search.

В качестве альтернативы вы можете использовать Tuckey's URLRewriteFilter. Это очень похоже на Apache HTTPD mod_rewrite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...