【问题标题】:Hide .jsp extension in JSP project using servlet mapping使用 servlet 映射在 JSP 项目中隐藏 .jsp 扩展名
【发布时间】:2011-10-25 00:48:50
【问题描述】:

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

但是,这不起作用。有没有人对如何做到这一点有一些建议?提前感谢您的帮助。

【问题讨论】:

    标签: java jsp url-rewriting


    【解决方案1】:

    使用 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 都在一个公共路径中,那就更容易了。例如。 /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 非常相似。

    【讨论】:

    • 你会如何使用 Tuckey 的 UrlRewriteFilter 来做到这一点?我已经问过了here
    猜你喜欢
    • 1970-01-01
    • 2011-09-18
    • 2015-07-17
    • 2016-04-15
    • 2017-02-21
    • 1970-01-01
    • 2019-01-01
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多