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

ram*_*esh 4 java jsp url-rewriting

我在JSP中编写应用程序,我需要从URL中删除".jsp"扩展名.例如,我需要:

http://example.com/search.jsp?q=stackoverflow
Run Code Online (Sandbox Code Playgroud)

成为:

http://example.com/search?q=stackoverflow
Run Code Online (Sandbox Code Playgroud)

我知道这可以使用".htaccess"文件来完成,但我还需要其他方法.我试过以下代码:

<servlet-mapping>
   <servlet-name>jsp</servlet-name>
   <url-pattern>*.</url-pattern>
</servlet-mapping>
Run Code Online (Sandbox Code Playgroud)

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

Bal*_*usC 12

使用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>
Run Code Online (Sandbox Code Playgroud)

如果所有这些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>
Run Code Online (Sandbox Code Playgroud)

request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)

这假设JSP位于/WEB-INF文件夹中,因此无法直接请求它们.这将显示/WEB-INF/search.jsphttp://example.com/app/search上.

或者,您可以使用Tuckey'sURLRewriteFilter.它与Apache HTTPD非常相似mod_rewrite.