如何在我的Web服务器URL中隐藏.jsp扩展名

时间:2009-01-20 06:44:00

标签: java jsp

我有一个JSP Web服务器,页面都以.jsp扩展名结尾。

如何在不借助非Java技巧(例如,apache重写)的情况下将其隐藏在我的Web服务器URL中?

例如: 而不是键入http://www.sample.com/search.jsp?xxx 用户只需输入 http://www.sample.com/search?xxx

8 个答案:

答案 0 :(得分:10)

您可以像这样创建一个servlet映射:

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

必须编辑url-pattern以满足您的需要。当然,您需要创建servlet以将url映射到实际的jsp。大多数MVC框架都使用这种技术。

答案 1 :(得分:5)

UrlRewrite是一个非常灵活的基于Java的框架独立解决方案。

这比web.xml中的Servlet映射更好,因为它在您可以做的事情上太有限,并且比基于Apache的解决方案更好,因为它是您的Web应用程序的一部分,因此您不需要放置Apache位于应用程序服务器前面。

答案 2 :(得分:4)

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>

答案 3 :(得分:2)

将.jsp映射为servlet,但使用&lt; jsp-file&gt;标记而不是&lt; url-mapping&gt;标签

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

答案 4 :(得分:1)

如果您选择Apache重写规则,而不是应用程序服务器映射/过滤器(就像我一样),您可能还想做更多的事情,而不仅仅是寻找“^([0-9a-zA-Z] +) $“

如果apache面向并提供非jsp资源,您可能需要确认url不是目录或存在的文件。并确认JSP存在,并执行pass而不是重定向,并附加任何可能的查询字符串。

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]

对于搜索引擎优化的目的,这是一个好主意,以便搜索引擎不会因为你在多个网址上复制内容而感到沮丧。

答案 5 :(得分:1)

我有一个位于data / feed.jsp的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>

答案 6 :(得分:0)

RewriteEngine On

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

在.htaccess中应该将所有网址重写为.jsp。因此,正如您所描述的那样,search.jsp将只是搜索。

答案 7 :(得分:0)

我不是JSP专家,但我认为你可以在web.xml中定义URL映射,为你的servlet和jsps提供别名。