一般的web工程中都会用到web.xml,web.xml主要包括一些配置标签,例如Filter、Listener、Servlet等,可以用来预设容器的配置,可以方便的开发web工程。但是web.xml并不是必须的,一个web工程可以没有web.xml文件
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
web-app>
这是整个配置文件的根标签,web.xml的模式文件是由Sun公司定义的,它必须标明web.xml使用的是哪个模式文件。
<display-name>serTestdisplay-name>
它标注了该web项目的名字,提供GUI工具可能会用来标记这个特定的Web应用的一个名称
<welcome-file-list>
<welcome-file>index.htmlwelcome-file>
<welcome-file>index.htmwelcome-file>
<welcome-file>index.jspwelcome-file>
<welcome-file>default.htmlwelcome-file>
<welcome-file>default.htmwelcome-file>
<welcome-file>default.jspwelcome-file>
welcome-file-list>
用来声明一个servlet的数据,主要有以下子元素:
public void init(ServletConfig config) throws SevletException{
super(config);
String driver = config.getInitParameter("driver");
String url = config.getInitParameter("url");
String username = config.getInitParameter("username");
String passwd = config.getInitParameter("passwd");
try{
Class.forName(driver).newInstance();
this.conn = DriverManager.getConnection(url, username, passwd);
System.out.println("Connection successful...");
} catch(SQLExceprion se){
System.out.println("se");
} catch(Exception e){
e.printStackTrace():
}
}
此时servlet配置为
<servlet>
<servlet-name>myServletservlet-name>
<servlet-class>*.myservletservlet-class>
<init-param>
<param-name>driverparam-name>
<param-value>com.mysql.jdbc.Driverparam-value>
init-param>
<init-param>
<param-name>urlparam-name>
<param-value>jdbc:mysql://localhost:3306/myDatabaseparam-value>
init-param>
<init-param>
<param-name>usernameparam-name>
<param-value>tangparam-value>
init-param>
<init-param>
<param-name>passwdparam-name>
<param-value>whuparam-value>
init-param>
servlet>
<servlet>
<servlet-name>myServletservlet-name>
<servlet-class>*.myservletservlet-class>
servlet>
<servlet-mapping>
<servlet-name>myServletservlet-name>
<url-pattern>/myServleturl-pattern>
servlet-mapping>
<servlet>
<servlet-name>myServletservlet-name>
<servlet-class>*.myservletservlet-class>
<init-param>
<param-name>fooparam-name>
<param-value>barparam-value>
init-param>
<run-as>
<description>Security role for anonymous accessdescription>
<role-name>tomcatrole-name>
run-as>
servlet>
<servlet-mapping>
<servlet-name>myServletservlet-name>
<url-pattern>/myServleturl-pattern>
servlet-mapping>
需要特别注意的是元素,这个元素规定了一个servlet-name和url-pattern,如果请求的url能够匹配该url-pattern,则使用servlet-name指定的servlet处理该请求。
url-pattern匹配规则
按照优先级从高到低排列:
当servlet收到来自客户端的url请求时,先把请求url减去当前项目上下文路径,然后再与url-pattern进行匹配,匹配按照上面列出的优先级顺序进行,只要有一个匹配成功就停止,不再继续匹配其他的。
(注:/*.action这种匹配式是错误的,容器无法识别同时拥有两种匹配规则的pattern)
例子:
<servlet>
<servlet-name>myServletservlet-name>
<servlet-class>*.myservletservlet-class>
servlet>
myServlet
<servlet-name>myServletservlet-name>
<url-pattern>/myServleturl-pattern>
servlet-mapping>
收到来自客户端的请求http://localhost:8080/serTest/myServlet/index.html,首先将该请求url减去项目上下文得到/myServlet/index.html,之后与url-pattern进行匹配,发现/myServlet匹配成功,之后便把该请求交由servlet-name指定的myServlet处理。
另一方面,
src文件夹中是定义的两个servlet类(Test和Img)和一个逻辑事务处理类(Output),如果我们都不设置
请求使用Test处理:http://localhost:8080/serTest/Test
请求使用Img处理:http://localhost:8080/serTest/Img
请求静态图片文件:http://localhost:8080/serTest/img/img.jpg
过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。
Listener元素指出事件监听程序类
配置会话超时,单位是分钟
<session-config>
<session-timeout>120session-timeout>
session-config>
在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。
更多元素参见 https://blog.csdn.net/xiuwu0423/article/details/54861184