在平时的开发中,我们经常看到一个/WEB-INF 这个目录,这个是web 容器初始化加载的一个标准路径。官方解释:WEB-INF 是 Java 的 web 应用的安全目录。所谓安全就是客户端无法访问,只有服务端可以访问的目录。也就是说,这个目录是给服务端看的,那么,如果想要在客户端进行访问的话,就必须通过 web.xml 文件或是采用注解的方式对要访问的文件进行映射。并且整个 web 应用程序的目录结构应该合理,文件应该放置在正确的位置,否则可能会出现 “404。
简单梳理一下WEB-INF的作用:
1、/WEB-INF/web.xml Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
2、 /WEB-INF/classes/
包含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中。
3、/WEB-INF/lib/
存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件。
4、/WEB-INF/src/
源码目录,按照包名结构放置各个 Java 文件。
5、/WEB-INF/database.properties
数据库配置文件,一般项目开发中结合使用框架进行调整,不在这个文件中进行配置
6、/WEB-INF/tags/
存放了自定义标签文件,该目录并不一定为 tags,可以根据自己的喜好和习惯为自己的标签文件库命名,当使用自定义的标签文件库名称时,在使用标签文件时就必须声明正确的标签文件库路径。例如:当自定义标签文件库名称为 simpleTags 时,在使用 simpleTags 目录下的标签文件时,就必须在 jsp 文件头声明为:<%@ taglibprefix="tags" tagdir="/WEB-INF /simpleTags" % >。
7、/WEB-INF/jsp/
jsp 文件的存放位置。改目录没有特定的声明,同样,可以根据自己的喜好与习惯来命名。此目录主要存放的是 jsp 1.2 以下版本的文件,为区分 jsp 2.0 文件,通常使用 jsp 命名,当然你也可以命名为 jspOldEdition 。这个在项目开发中可以根据使用MVC框架进行需改。
其中在这个路径下我们都知道一个web.xml 的一个文件,这个是web容器初始化加载的一个文件,可以处理一些关键的配置,今天结合tomcat服务器的请求响应简单看下处理的相关类。我们可以查看tomcat 中的conf下的web.xml ,这是tomcat 容器的默认请求处理类:
关键配置:
默认请求:
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
对jsp 的处理
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
在我们的开发中其实会引入mvc 框架进行请求处理的支持,以便更好的进行控制和管理,如Springmvc
<servlet>
<servlet-name>mvcservlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:SpringMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
通过这个配置我们可以将应用的请求处理通过我们的应用进行接受处理,其中<load-on-startup>1</load-on-startup> 配置启动优先级,如果不进行配置初始化时代表容器启动时不加载且不初始化,那么当浏览器第一次访问servlet时,才会初始化,那么第一次访问页面会加载很久。这里servlet-mapping 可以具体配置请求比如.do,.go等,如果找不到的请求路径则tomcat 中的servlet 进行处理。