English 中文(简体)
如何在我的Web服务器URL中隐藏.jsp扩展名
原标题:
  • 时间:2009-01-20 06:43:59
  •  标签:

我有一个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提供别名。





相关问题
热门标签