Как скрыть расширение .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>