2010-07-21 53 views
1

如果我有一個servlet我能夠沒有問題轉發給JSP在的WebContent文件夾:RequestDispatcher的一個JSP在同一封裝

request.getRequestDispatcher("page.jsp").forward(request, response); 

要求作爲一個的HttpServletRequest響應HttpServletResponse

現在的問題: 如果我想使用包功能?也就是說,將page.jsp移動到與我的servlet類相同的包中,以便一個「功能」的所有文件位於相同的位置。這可能嗎?

回答

2

如果您在包foo中有一個servlet類'MyServlet',那麼它將在WEB-INF/classes/foo/MyServlet中可用。現在,如果您想在同一個包中包含JSP,則需要在文件夾/WEB-INF/classes/foo/page.jsp中包含JSP。然後你可以轉發到JSP,

request.getRequestDispatcher("/WEB-INF/classes/foo/page.jsp").forward(request, response); 
+0

謝謝!這就像一個魅力。 – KPthunder 2010-07-21 07:17:00

+1

不用說,這不是最佳實踐。在一個體面的web應用程序中,每個JSP也沒有一個servlet,而是每個整個web應用程序(前端控制器)都有一個servlet。 – BalusC 2010-07-21 11:40:37

0

JavaEE容器不會從jar中提供資源。如果你想按功能封裝,你必須預編譯你的JSP,並將它們放在與你的特性的其他servlet相同的包中。通過假設你這樣做,你將無法從jar內部提供任何靜態資源,如圖像,CSS或JavaScript。

如果你真的想要得到幻想,我想你可以編寫一個通用servlet來服務jar中的資源。但我認爲這樣會相當迅速地得到相當複雜的收益。

+0

那麼Web4J是如何將它關閉的呢?查看示例應用程序的類目錄,您可以在類文件旁看到JSP文件。 – KPthunder 2010-07-21 06:12:14

+0

@KPthunder:您提到的'classes'目錄不在JAR中,它們在'WEB-INF'下。 – skaffman 2010-07-21 07:17:10

+0

我現在很困惑,並最初被你的答案困惑。我從來沒有打算從jar文件中提供任何東西... – KPthunder 2010-07-21 08:48:41