Как скрыть расширение .jsp в моих URL-адресах веб-сервера

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

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

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

Ответы

Ответ 1

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

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

URL-шаблон должен быть отредактирован в соответствии с вашими потребностями. Конечно, вам нужно создать сервлет, чтобы сопоставить url с фактическим jsp. Этот метод используется большинством инфраструктур MVC.

Ответ 2

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

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

Ответ 3

Используйте это сопоставление сервлета в вашем файле 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>

Ответ 4

Сопоставьте .jsp как сервлет, но используйте < jsp-file > тегом вместо < url-mapping > тег.

<servlet>
  <servlet-name>myjsp</servlet-name>
  <jsp-file>/myjsp.jsp</jsp-file>
</servlet>

Ответ 5

RewriteEngine On

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

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

Ответ 6

Если вы выберете правило перезаписи 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, not/search.jsp, вы также хотите переписать реверс

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

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

Ответ 7

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

Ответ 8

У меня есть 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>