2011-08-11 62 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