2010-07-21 60 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