我有一个JSP Web服务器,所有页面的扩展名都是.jsp。
我该如何在不使用非Java技巧(例如,Apache重写)的情况下将其隐藏在我的Web服务器URL中?
For example: instead of typing http://www.sample.com/search.jsp?xxx the user would just type http://www.sample.com/search?xxx
我有一个JSP Web服务器,所有页面的扩展名都是.jsp。
我该如何在不使用非Java技巧(例如,Apache重写)的情况下将其隐藏在我的Web服务器URL中?
For example: instead of typing http://www.sample.com/search.jsp?xxx the user would just type http://www.sample.com/search?xxx
你可以创建一个servlet映射,就像这样:
<servlet-mapping>
<servlet-name>MappingServlet</servlet-name>
<url-pattern>path/*</url-pattern>
</servlet-mapping>
URL模式必须进行编辑以适合您的需求。当然,您需要创建Servlet以将URL映射到实际的JSP上。大多数MVC框架都使用这种技术。
在您的 web.xml
文件中使用此Servlet映射。
<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>
UrlRewrite是一个很好的灵活的基于Java的独立框架解决方案。
这比在web.xml
中进行的Servlet映射更好,因为它的功能有限,比基于Apache的解决方案更好,因为它是您的Web应用程序的一部分,所以您不需要在应用程序服务器前面放置Apache。
将.jsp映射为一个servlet,但使用
<servlet>
<servlet-name>myjsp</servlet-name>
<jsp-file>/myjsp.jsp</jsp-file>
</servlet>
如果您选择使用Apache重写规则,而不是应用服务器映射/筛选器(就像我一样),您可能还希望做更多的工作,而不仅仅是查找“^([0-9a-zA-Z] +)$”。
如果Apache在前端提供非JSP资源,请确认URL不是目录或已存在的文件。确认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看到它,您也需要重写反向。 (Translated using Google Translate - Please note that the accuracy may vary and this is the best effort by an AI language model to provide the closest translation)
RewriteRule ^(.+).jsp$ $1 [R=301,QSA,L]
RewriteRule ^(.+)index$ $1 [R=301,QSA,L]
这是一个用于SEO目的的好主意,这样搜索引擎就不会因为在多个网址上重复内容而惩罚你。
I have a jsp located at data/feed.jsp Adding this to my web.xml meant I could access it at 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>
RewriteEngine On
RewriteRule ^([0-9a-zA-Z]+)$ $1.jsp
在您的.htaccess文件中应将所有 URL 重写为.jsp。因此,search.jsp 将只是搜索,正如您所描述的那样。
我不是JSP专家,但我认为您可以在web.xml中定义URL映射,为您的servlet和jsp提供别名。