web.xml是Java Web应用程序的配置文件,用于定义servlet、filter、listener等组件以及应用程序上下文参数等内容。以下是web.xml中常用的标签及其子标签:
1. \<web-app\>标签:
- 子标签:
- \<display-name\>: 指定Web应用的显示名称。
- \<description\>: 指定Web应用的描述信息。
- \<context-param\>: 定义Web应用上下文参数。
- \<servlet\>: 定义servlet组件。
- \<servlet-mapping\>: 定义servlet组件与URL的映射关系。
- \<filter\>: 定义filter组件。
- \<filter-mapping\>: 定义filter组件与URL的映射关系。
- \<listener\>: 定义listener组件。
代码示例:
<web-app xmlns= http://java.sun.com/xml/ns/javaee
xmlns:xsi= http://www.w3.org/2001/XMLSchema-instance
xsi:schemaLocation= http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd
version= 3.0 >
<display-name>MyWebApp</display-name>
<description>This is my web application.</description>
<context-param>
<param-name>DB_URL</param-name>
<param-value>jdbc:mysql://localhost:3306/mydb</param-value>
</context-param>
</web-app>
2. \<context-param\>标签:
- 子标签:无子标签。
- 作用:定义Web应用上下文参数,可以在应用程序中通过ServletContext获取这些参数。
- 属性:
- param-name: 参数名称。
- param-value: 参数值。
- 代码示例:
<context-param>
<param-name>DB_URL</param-name>
<param-value>jdbc:mysql://localhost:3306/mydb</param-value>
</context-param>
注:里面的参数是需要自己写代码通过name获取value出来使用的,所以并不属于配置。
3. \<servlet\>标签、\<servlet-mapping\>标签:
\<servlet\>标签:
- 子标签:
- \<servlet-name\>: 指定servlet组件的名称。
- \<servlet-class\>: 指定servlet组件的类名。
- \<init-param\>: 定义servlet初始化参数。
- \<load-on-startup\>: 指定servlet组件的启动顺序,默认为0,数字越小越先启动。
\<servlet-mapping\>标签:
- 子标签:无子标签。
- 作用:定义servlet组件与URL的映射关系。
- 属性:
- servlet-name: servlet组件的名称。
- url-pattern: URL地址的匹配模式,可以使用通配符。
- 代码示例:
<!--配置SpringMVC的前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--private String contextConfigLocation;在public class DispatcherServlet extends FrameworkServlet中的FrameworkServlet类中-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value><!--spring-mvc.xml是在resources目录下-->
</init-param>
<load-on-startup>1</load-on-startup><!--表示服务器一启动就加载,不配置的话,第一次访问时再加载-->
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
这段代码是Spring框架中用于配置前端控制器的DispatcherServlet,其作用如下:
-
DispatcherServlet是Spring MVC框架的核心组件之一,负责接收所有的HTTP请求并将请求分发到相应的Controller处理器。
-
通过配置servlet-name和servlet-class,可以在Web应用程序中注册DispatcherServlet,并指定它所使用的类。
-
在init-param元素中,通过参数contextConfigLocation指定了一个Spring配置文件的路径,这里是classpath:spring-mvc.xml。该配置文件包含了Spring MVC框架的组件和配置信息,如Controller、ViewResolver、HandlerMapping等。
-
servlet的url-pattern设置为/时(1、可以理解为默认,缺省状态(可能是错的,但是不妨碍放在这里参考) 2、匹配/路径下的所有请求,但是/路径不能拦截), 它仅替换servlet容器的默认内置servlet,用于处理所有与其他注册的servlet不匹配的请求。直白点说就是,所有静态资源(js,css,image,html等)的访问都将交给该servlet处理,而jsp页面则交给servlet容器内置的JSP servlet处理。
如果设置:/ 则静态资源无法访问,jsp文件可以正常访问。
如果需要访问静态资源权限则需要放行。 -
<load-on-startup>
元素表示servlet容器在启动时是否加载并初始化servlet,并且这个元素的值必须是一个整数,表示servlet应该被载入的顺序。当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;当值小于0或者没有指定时,则表示容器会在第一次请求到达时再初始化这个servlet。因此,<load-on-startup>
标签中的数字不同表示该servlet在启动时的加载顺序,越小的数字先被加载。若有多个servlet需要在启动时加载,则按照数字从小到大的顺序依次加载。
这段配置表明所有的请求都会被`DispatcherServlet`处理。这是因为`servlet-mapping`的`url-pattern`设置为了根路径"/",意味着所有请求都会经过这个`servlet`进行处理。
当一个请求进来时,它首先会被Tomcat服务器接收并交给对应的`servlet container`处理。在这个例子中,我们使用了Spring MVC提供的前端控制器`DispatcherServlet`来处理请求。因此,所有请求都会首先交给它。
接下来,在`DispatcherServlet`内部,它有一个映射器(Handler Mapping)用于根据请求路径找到匹配的控制器(Controller),然后找到对应的方法进行处理并返回响应给客户端。
所以说,当前端控制器在web.xml配置文件中的映射路径为/时,可以拦截所有请求(/下的所有路径),并将其交由具体的控制器进行处理。
4. \<filter\>标签、\<filter-mapping\>标签:
\<filter\>标签
- 子标签:
- \<filter-name\>: 指定filter组件的名称。
- \<filter-class\>: 指定filter组件的类名。
- \<init-param\>: 定义filter初始化参数。
\<filter-mapping\>标签:
- 子标签:无子标签。
- 作用:定义filter组件与URL的映射关系。
- 属性:
- filter-name: filter组件的名称。
- url-pattern: URL地址的匹配模式,可以使用通配符。
- servlet-name: 指定filter组件要拦截的servlet组件。
- 代码示例:
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5. \<listener\>标签:
- 子标签:
- \<listener-class\>: 指定listener组件的类名。
- 作用:定义listener组件,监听Web应用程序的事件。
- 代码示例:
<listener>
<listener-class>com.mycompany.MyServletContextListener</listener-class>
</listener>
Servlet容器在启动Web应用程序时,会扫描Web应用程序中所有的部署描述符(如web.xml、注解等)来了解要部署的Servlet、过滤器和监听器等组件信息。当发现该Web应用程序中存在一个或多个监听器时,Servlet容器就会在Web应用程序初始化阶段调用这些监听器的初始化方法,以便让它们完成相应的初始化工作。
在调用监听器的初始化方法之前,Servlet容器会先对所有的Servlet和过滤器进行实例化和初始化,以保证它们在监听器初始化方法中能够被正确地引用和使用。一旦所有的Servlet和过滤器都被实例化和初始化完成,并且所有的初始化工作都正确地完成了,Servlet容器就会通知所有的监听器,调用它们的初始化方法,以便让它们执行必要的初始化逻辑。
需要注意的是,监听器的启动顺序是有一定规则的,即按照它们在部署描述符中的声明顺序依次启动。如果存在多个监听器,并且它们之间存在依赖关系,那么就需要按照正确的启动顺序来声明它们,以保证它们能够正常地协同工作。
总之,监听器会在Web应用程序初始化阶段启动,并在Servlet和过滤器被实例化和初始化完成后调用其初始化方法执行必要的逻辑。
在计算机领域,上下文一般指的是某个操作或事件发生时所处的环境或状态。不同的操作或事件所处的上下文可能会有所不同,它可以包括系统的软硬件配置、用户信息、外部资源、执行流程、数据状态等等。
举例来说,当我们说一个函数在某个特定的上下文中执行时,我们通常是在描述它所使用的变量、对象、类或模块等内容。这些元素的值和属性将构成函数执行的上下文,并且会对函数内的各种操作产生影响。
在 Web 开发中,上下文通常也指的是某个 Web 应用程序的环境和状态。Web 应用程序的上下文可能包括 Servlet 容器的配置、应用程序级别的参数、数据库连接池、安全设置、Session 状态等等,这些元素都会影响 Web 应用程序的运行行为和结果。
总之,上下文是一个相对抽象的概念,可以用来描述某个操作或事件范围内的环境、状态、约束和影响等方面。在计算机领域的阅读和交流中经常会涉及到上下文相关的概念和术语。