Как скрыть расширение .jsp в URL моего веб-сервера - PullRequest
15 голосов
/ 20 января 2009

У меня есть веб-сервер JSP, страницы которого заканчиваются расширением .jsp.

Как мне спрятать его в URL-адресах моего веб-сервера, не прибегая к не-Java-трюкам (например, переписать apache)?

Например: вместо ввода http://www.sample.com/search.jsp?xxx пользователь просто наберет http://www.sample.com/search?xxx

Ответы [ 8 ]

10 голосов
/ 20 января 2009

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

<servlet-mapping>
   <servlet-name>MappingServlet</servlet-name>
   <url-pattern>path/*</url-pattern>
 </servlet-mapping>

Шаблон URL должен быть отредактирован в соответствии с вашими потребностями. Вам, конечно, нужно создать сервлет, чтобы отобразить URL на фактический JSP. Этот метод используется большинством сред MVC.

5 голосов
/ 21 января 2009

UrlRewrite - хорошее гибкое независимое от фреймворка решение на основе Java.

Это лучше, чем отображение сервлета в web.xml, потому что оно слишком ограничено в том, что вы можете сделать, и лучше, чем решение на основе Apache, потому что оно является частью вашего веб-приложения, поэтому вам не нужно включать Apache перед вашим сервером приложений.

4 голосов
/ 02 мая 2015

Используйте это отображение сервлета в вашем файле web.xml.

<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>
2 голосов
/ 20 января 2009

Сопоставьте файл .jsp как сервлет, но используйте тег вместо тега .

<servlet>
  <servlet-name>myjsp</servlet-name>
  <jsp-file>/myjsp.jsp</jsp-file>
</servlet>
1 голос
/ 12 декабря 2016

У меня есть jsp, расположенный в data / feed.jsp Добавление этого в мой web.xml означало, что я мог получить к нему доступ в data / feed ...

<servlet>   
  <servlet-name>feed</servlet-name>
  <jsp-file>/data/feed.jsp</jsp-file>
</servlet>
<servlet-mapping>
  <servlet-name>feed</servlet-name>
  <url-pattern>/data/feed</url-pattern>
</servlet-mapping>
1 голос
/ 12 февраля 2009

Если вы выберете правило перезаписи Apache, а не отображение / фильтр сервера приложений (как я сделал), вы также можете захотеть сделать больше, чем просто искать "^ ([0-9a-zA-Z] +) $ "

Возможно, вы захотите подтвердить, что URL-адрес не является каталогом или файлом, который существует, если apache работает и обслуживает ресурсы не-jsp. И подтвердите, что JSP существует, и выполните передачу, а не перенаправление, и добавьте любую возможную строку запроса.

RewriteCond %{REQUEST_URI} !^/.*\.(jsp)$
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.jsp -f
RewriteRule ^(.+)$ /$1.jsp [PT,QSA,L]

И чтобы убедиться, что пользователи видят это только через / search, а не /search.jsp, тогда вы также хотите переписать обратное

RewriteRule ^(.+)\.jsp$ $1 [R=301,QSA,L]
RewriteRule ^(.+)index$ $1 [R=301,QSA,L]

Это хорошая идея для целей SEO, чтобы поисковые системы не дублировали контент по нескольким URL-адресам.

0 голосов
/ 20 января 2009

Я не эксперт по JSP, но я думаю, что вы можете определить сопоставления URL в web.xml, чтобы предоставить псевдонимы для ваших сервлетов и jsps.

0 голосов
/ 20 января 2009
RewriteEngine On

RewriteRule ^([0-9a-zA-Z]+)$  $1.jsp

В вашем .htaccess следует переписать все URL-адреса в .jsp. Так что search.jsp будет просто поиском, как вы описали.

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