我正在用 JSP 编写应用程序,我需要从 URL 中删除“.jsp”扩展名。例如,我需要:
http://example.com/search.jsp?q=stackoverflow
成为:
http://example.com/search?q=stackoverflow
我知道这可以使用“.htaccess”文件来完成,但我需要一些其他方式。我尝试了以下代码:
<servlet-mapping>
<servlet-name>jsp</servlet-name>
<url-pattern>*.</url-pattern>
</servlet-mapping>
然而,这并没有奏效。有没有人对实现这一目标的方法有一些建议?在此先感谢您的帮助。
最佳答案
使用 servlet 映射,您需要单独指定每个 JSP,如下所示:
<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>
如果所有这些 JSP 都在一个公共(public)路径中,那就更容易了。例如。 /app/*
.
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>com.example.FriendlyURLServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
与
request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
这假定 JSP 位于 /WEB-INF
文件夹中,因此无法直接请求它们。这将在 http://example.com/app/search 上显示 /WEB-INF/search.jsp
.
或者,您可以使用 Tuckey's URLRewriteFilter
.它与 Apache HTTPD 的 mod_rewrite
非常相似。
关于java - 使用 servlet 映射在 JSP 项目中隐藏 .jsp 扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7027318/