2011-08-11 38 views
4

我正在JSP中编写应用程序,并且需要从URL中删除“.jsp”扩展名。例如,我需要:使用servlet映射隐藏JSP项目中的.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> 

但是,这并没有奏效。有没有人有一些方法来完成这个建议?预先感谢您的帮助。

回答

12

不同,需要分别指定每个JSP喜欢一个servlet映射如下:

<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非常相似。

+1

你如何用Tuckey的UrlRewriteFilter做到这一点?我问过它[这里](http://stackoverflow.com/questions/16267454/use-tucky-urlrewritefilter-to-hide-jsp-at-the-end-of-urls)。 – herrtim