11.web.xml的标签作用
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/javaeehttp://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设置为/时(可以理解为默认,缺省状态), 它仅替换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需要在启动时加载,则按照数字从小到大的顺序依次加载。
总之,这些代码主要是用于配置Spring MVC框架的前端控制器DispatcherServlet,以及将其映射到应用程序的根路径,它是整个Spring MVC框架的入口点,用于对用户的请求进行集中处理和分发。
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>
这些配置主要是用于设置Web应用程序中请求和响应的字符编码方式,具体作用如下:
-
CharacterEncodingFilter是Spring框架提供的一个Servlet过滤器,它可以在接收到客户端请求之后,将请求中的所有内容都以指定的编码方式进行解码,从而确保服务器能够正确识别并处理客户端请求的中文等特殊字符。
-
这些配置同时还可以在响应时,将服务器返回给客户端的所有内容都以指定的编码方式进行编码,确保客户端能够正确地显示中文等特殊字符。
-
通过在web.xml文件中配置CharacterEncodingFilter的init-param参数,可以指定该过滤器所使用的编码方式。在这个例子中,编码方式是UTF-8,这是一种通用的Unicode字符编码方式,可以表示几乎所有国家和语言中的字符。
-
将CharacterEncodingFilter配置为拦截“/*”(即所有)URL模式,可以确保所有进入Web应用程序的请求都经过该过滤器,从而达到全局设定编码方式的目的。
-
<url-pattern></url-pattern>:即根目录。
这种空串的形式。当上下文的根被请求的时候,它将被调用。这与的方式是不同的,因为这种形式在当任何子目录被请求的时候不会被调用。当你期望一个“首页servlet”的时候,这种URL模式就是适合你的。<url-pattern>*.do</url-pattern>:
/abc/def/ghi.do,/a.do 都是匹配*.do 扩展名匹配。如果不是这个扩展名的url将不会被拦截<url-pattern>/**</url-pattern>:
什么请求都不能拦截处理,相当于没有设置:
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 应用程序的运行行为和结果。
总之,上下文是一个相对抽象的概念,可以用来描述某个操作或事件范围内的环境、状态、约束和影响等方面。在计算机领域的阅读和交流中经常会涉及到上下文相关的概念和术语。