问题:
以 Maven 为例,当启动一个新的 web 项目时,结构与此相同/相似:
Meu Projeto
|- src
|- main
|- java
|- resources
|- webapp
|- WEB-INF
其中,在“webapp”目录中,放置了web应用程序使用的文件:html、css、Javascript、JSPs等。
我的问题是关于 WEB-INF 目录,有几个项目使用这个目录来放置扩展名为 .jsp 的文件,而不是直接将它们放在“webapp”中。一个例子是 Caelum 的Mammoth,他们为此创建了一个名为“jsps”的目录。
根据我的阅读,WEB-INF 中包含的文件不能被客户端直接访问,因为它们不是公共的,但它们可以被 servlet 访问:
名为 WEB-INF 的应用程序层次结构中存在一个特殊目录。此目录包含与应用程序相关但不在应用程序根文档中的所有内容。WEB-INF 节点不是应用程序公共文档树的一部分。在 WEB-INF 目录中包含的文件可以由容器直接提供给客户端。但是,WEB-INF 目录的内容对 servlet 代码使用getResource和getResourceAsStream方法调用是可见的ServletContext,并且可以使用RequestDispatcher调用公开。
那么仅仅是为了安全吗?获取文件的唯一方法是通过 servlet 进行处理。
回答:
9.10 隐藏我们的页面 – https://www.caelum.com.br/apostila-java-web/mvc-model-view-controller/
如果页面位于 /webapp 中,用户将可以直接访问它们。如果只是静态页面,我看不出有什么问题。但是有些页面在显示之前需要逻辑,如果用户直接访问jsp页面将无法正确显示,也不会经过控制器。
“因此,我们不能让用户直接访问我们的页面。为了使这种直接访问变得不可能,我们将把我们的页面放在 WEB-INF/ 目录中”



