【发布时间】:2012-05-11 06:01:17
【问题描述】:
我有一组 JSP 页面,我想隐藏 .jsp 扩展名(经过一番研究,这似乎对 SEO 有好处)。
我遇到的一个解决方案如下:
<servlet>
<servlet-name>mypage</servlet-name>
<jsp-file>/some-page.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>mypage</servlet-name>
<url-pattern>/some-page</url-pattern>
</servlet-mapping>
虽然这可行,但我相信我必须为我网站上的每个 jsp 页面设置此映射。
我在这里发现了另一个解决方案(简单友好的 URL):Hidden features of JSP/Servlet
... 它使用一个简单的 servlet 来转发请求。在我的 web.xml 中,我有以下内容并且工作正常:
<servlet>
<servlet-name>MyServletName</servlet-name>
<servlet-class>myservlets.PrettyUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletName</servlet-name>
<url-pattern>/myservlet/*</url-pattern>
</servlet-mapping>
现在的问题是我不想点击 URL:www.mydomain.com/myservlet/some-page
我想使用网址:www.mydomain.com/some-page
所以我把 url-pattern 改成了“/*”
<servlet>
<servlet-name>MyServletName</servlet-name>
<servlet-class>myservlets.PrettyUrlServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServletName</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
但这会导致无限循环:
Exception in thread "http-bio-8080-exec-1" java.lang.StackOverflowError
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:219)
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
.
.
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
at org.apache.catalina.core.ApplicationHttpRequest.getAttribute(ApplicationHttpRequest.java:228)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:379)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:329)
at myservlets.PrettyUrlServlet.doGet(PrettyUrlServlet.java:22)
我不确定如何解决。有什么想法吗?
【问题讨论】:
标签: tomcat servlets seo servlet-filters