一般在 web 工程中都会用到 web.xml 来配置 Servlet、Filter、Listener 欢迎页面等,可以方便的开发web工程。需要知道的是 web.xml 并不是必须的,一个web 工程可以没有 web.xml 文件,只不过网站的功能复杂起来后,web.xml 有非常大用处,因此在 web 工程中创建一个 web.xml 还是非常有必要的。

1. 命名空间

  在 web.xml 中,使用的 web-app_4_0.xsd 文件定义的规则,需要指定这个文件的位置。

<web-app 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
						http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" 
	id="WebApp_ID" version="4.0">
</web-app>

  关于命名空间这部分内容,就不在这里详细讲了,需要了解的可以看这篇博文XML 中的 xmlns、xmlns:xsi、xsi:schemaLocation

2. 欢迎页面配置

  欢迎页面的配置不是很重要,了解即可。

<project...>
	<welcome-file-list>
		<welcome-file>wecome1.jsp</welcome-file>
		<welcome-file>wecome2.jsp</welcome-file>
	</welcome-file-list>
</project>

  上面代码中就配置了两个欢迎页面 wecome1.jsp 和 wecome2.jsp,显示时按照配置顺序显示,如果能找到 wecome1.jsp 文件就显示该文件,如果找不到就找第二个,依次类推。
  欢迎页面是用于访问 web 工程时,只给了根名,没有给出具体的页面,这时就回去访问配置的欢迎页面,如果没有配置欢迎页面,不同的应用服务器可能会有不同的行为。对于 Tomcat 来说,会默认先查找 index.html 文件,如果找到了,就将其返回给浏览器;如果没有找到,就继续查找 index.jsp 文件,如果都没有找到,那么 Tomcat 就会显示 The requested resource is not available 的页面。
  欢迎页面只是在没有给出具体的访问页面时会被用到,如果指定了具体页面,只要访问的路径正确,是可以正常访问的。

3. Servlet 配置

  这是我们常用的一个配置,主要使用的标签是<servlet></servlet>为Servlet 命名和<servlet-mapping></servlet-mapping>为 Servlet 定制 URL。

<project..>
	<servlet>
		<servlet-name>TestServlet</servlet-name>
		<servlet-class>D20210220.TestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>TestServlet</servlet-name>
		<url-pattern>/TestServlet</url-pattern>
	</servlet-mapping>
</project>

  在 <servlet> 标签中, <servlet-name> 中设置的是为 Servlet 注册的名字,要保证该名字在 web.xml 文件中是唯一的,一般直接使用类名即可,<servlet-class> 中设置的是需要配置的 Servlet 的全类名。
  在 <servlet-mapping> 中, <servlet-name> 中的名字,需要和 <servlet> 中的名字一致,<url-pattern> 为这个 Servlet 映射一个对外访问路径。

   servlet 和 url-pattern 之间的关系是 一对多的关系

4. Filter 配置

  在学习了 Servlet 的配置之后,学习 Filter 的配置就很简单了。
  Filter 的配置和 Servlet 的配置很相似,只是将 servlet 换成 filter 而已。

<filter>
	<filter-name>Filter1</filter-name>
	<filter-class>D2020128.TestFilter</filter-class>
</filter>
<filter-mapping>
	<filter-name>Filter1</filter-name>
	<url-pattern>/TestServlet</url-pattern>
</filter-mapping>

  Filter 的配置中和 Servlet 配置差别较大的地方在于 url-pattern,Servlet 的 url-pattern 中配置的路径是访问 Servlet 的路径,而 Filter 的 url-pattern 中配置的路径是访问已经存在的网络资源,如静态页面、jsp、servlet等。
   filter 和 url-pattern 之间的关系是 多对多的关系即,一个 filter 可以有多个 url-pattern(使用多个 URL 地址,都会访问同一个 FIlter),多个 filter 可以对应一个 url-pattern(多个 filter 会根据 web.xml 中配置的顺序组成 filter 链)。
  因此,Filter 的 url-pattern 有一种配置是<url-pattern>/*</url-pattern>,表示所有外部访问都需要先经过该过滤器。
   Filter 应用场景:防盗链编码过滤器

5. Listener 配置

  Listener 不需要处理外界访问,所以它的配置不需要定制 URL,因此只需要配置<listener>

<listener>
	<listener-class>Listener的全类名<listener-class>
</listener>

注解配置

  在 Servlet 3.0 版本以上,可以使用@WebServlet注解代替 web.xml 进行配置,@WebServlet的配置是一套独立的用法。

Servlet 注解配置

  一般用@WebServlet( "/TestServlet1")即可,其中 TestServlet1 的位置可以自己起一个名字,但是需要注意不能在项目中有重名。

  下面展示一下@WebServlet注解的复杂一些的用法,不做详解

@WebServlet(urlPatterns = "/TestServlet1",initParams = {
		@WebInitParam(name = "name1",value="value1"),
		@WebInitParam(name = "name2",value="value2")
}, name = "Hello")

Filter 注解配置

  在 Filter 类文件的开头处写上 @WebFilter("/TestFilter")

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐