JavaEE中的WEB-INF文件夹是什么

一、概述

我正在使用以下源代码结构开发Java EE Web应用程序:

src/main/java                 <-- multiple packages containing Java classes
src/test/java                 <-- multiple packages containing JUnit tests
src/main/resources            <-- includes properties files for textual messages
src/main/webapp/resources     <-- includes CSS, images and all Javascript files
src/main/webapp/WEB-INF
src/main/webapp/WEB-INF/tags
src/main/webapp/WEB-INF/views

我感兴趣的目录WEB-INF:它包含web.xml,用于设置servlet的XML文件,Spring bean连线上下文以及JSP标签和视图。我试图了解什么限制/定义了此结构。例如,JSP文件是否总是必须在其中,WEB-INF或者它们可能在其他地方?还有其他可能会进入的东西WEB-INF吗?Wikipedia的WAR文件条目提到classes了Java类和libJAR文件-不确定除了其他源文件位置之外,何时需要这些文件,我已经完全掌握了。

二、详解

该Servlet 2.4规范说这对WEB-INF(第70页):

应用程序层次结构中存在一个名为的特殊目录 WEB-INF此目录包含与应用程序相关的所有内容,这些内容不在应用程序的文档根目录中。该 WEB-INF节点不是应用程序的公共文档树的一部分容器不能将WEB-INF目录中包含的任何文件直接提供给客户端。但是,WEB-INF使用上的getResource 和getResourceAsStream方法调用,该目录的内容 对于Servlet代码可见ServletContext,并且可以通过RequestDispatcher调用公开

这意味着WEB-INF您的Web应用程序的资源加载器可以访问资源,而公众无法直接看到它们。

这就是为什么许多项目将其资源(例如JSP文件,JAR /库以及它们自己的类文件或属性文件)或其他任何敏感信息放在WEB-INF文件夹中的原因。否则,可以通过使用简单的静态URL(例如,使用full加载CSS或Javascript)进行访问。

从技术角度来看,您的JSP文件可以在任何地方。例如在Spring中,您可以将它们配置为WEB-INF显式地:



Wikipedia的WAR文件中提到WEB-INF/classesWEB-INF/lib文件夹是Servlet规范在运行时所需的文件夹的示例。

重要的是要使项目的结构与生成的WAR文件的结构有所不同。

在某些情况下,项目的结构将部分反映WAR文件的结构(对于静态资源,例如JSP文件或HTML和JavaScript文件,但这并非总是如此。

从项目结构到生成的WAR文件的转换是通过构建过程完成的。

尽管您通常可以自由设计自己的构建过程,但如今大多数人将使用诸如Apache Maven之类的标准化方法Maven定义了项目结构中哪些资源映射到结果工件中哪些资源的默认值(在这种情况下,结果工件是WAR文件)。在某些情况下,映射由普通复制过程组成,而在其他情况下,映射过程包括转换,例如过滤或编译等。

一个示例:该WEB-INF/classes文件夹稍后将包含需要由Classloader加载以启动应用程序的所有已编译Java类和资源(src/main/javasrc/main/resources)。

另一个示例:该WEB-INF/lib文件夹稍后将包含应用程序所需的所有jar文件。在maven项目中,将为您管理依赖关系,并且maven会自动将所需的jar文件复制到WEB-INF/lib文件夹中。这就解释了为什么lib在Maven项目中没有文件夹。

如若转载,请注明出处:https://www.javaidea.cn/article/8423.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。