2010-11-24 69 views
3

我有基於JSP的簡單Web應用程序。應用程序的根是這樣的:爲Servlet設置JSP位置

| 
|--META-INF 
|--WEB-INF 
| `--web.xml 
|--img 
|--css 
|--index.jsp 
|--some1.jsp 
|--some2.jsp 
|--some3.jsp 

凡web.xml中包含下面幾行:

<servlet> 
    <servlet-name>servlet-jsp</servlet-name> 
    <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>servlet-jsp</servlet-name> 
    <url-pattern>/*.jsp</url-pattern> 
</servlet-mapping> 

現在我想改變項目的文件結構 - 所有* .jsp文件移動到特定目錄:

| 
|--META-INF 
|--WEB-INF 
| `--web.xml 
|--img 
|--css 
|--jsp 
    |--index.jsp 
    |--some1.jsp 
    |--some2.jsp 
    |--some3.jsp 

當請求「/some1.jsp」url時,我可以配置「servlet-jsp」來處理jsp/some1.jsp嗎?

回答

3

我想很多(所有?)容器已經映射*.jsp(在任意目錄下)到JSP servlet,因此只有在爲JSP使用自定義文件擴展名時才需要編寫這樣的顯式servlet映射。要更直接地陳述它:您可能只需刪除已寫入的servlet映射。

通過定義filter mapping,可以最好地實現在//jsp之間轉發對JSP文件的請求。你還需要編寫你自己的過濾器類。過濾器有點像Servlets,但不像JSP或Servlet那樣生成內容,它們更像是一個流量控制器,[重新]指揮請求。

0
<servlet-mapping> 
    <servlet-name>servlet-jsp</servlet-name> 
    <url-pattern>/jsp/*.jsp</url-pattern> 
</servlet-mapping> 

我認爲這應該可以做到。

+0

我覺得這些模式是不允許的。但讓他試一試。 – Bozho 2010-11-24 15:51:34

+0

@Bozho:有可能。現在沒有一個環境來測試它。但是從[本文檔](http://www2.roguewave.com/support/docs/leif/leif/html/bobcatug/7-3.html),應該允許。 – darioo 2010-11-24 15:53:15

1

您可以創建映射到/jsp/然後解析servlet映射後的路徑,並轉發到JSP一個servlet,使用request.getRequestDispatcer(targetJsp).forward()