java - 使用 servlet 映射在 JSP 项目中隐藏 .jsp 扩展名

标签 java jsp url-rewriting

我正在用 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/

相关文章:

java - 在 Java 中获取 <td> 的值 - request.getParameter

java - Servlet jsp、身份验证过滤器

java - 使用 Java.io.File 列出目录内容时的奇怪行为

java - 使用无参数构造函数添加到数组

jsp - 当属性名称的第二个字符是大写时出现 javax.el.PropertyNotFoundException

regex - NGINX 重写规则与 REGEX (.+) 不匹配

ssl - 重定向以强制在 Plesk 中对域使用 www 和 SSL

image - NGINX:重写图像位置

java - Apache Open session 在本地运行以进行开发

java - 使用 AXIS1 的自上而下的 Web 服务生成将我的 complexType 分开