web.xml的加载顺序是:
<context-param>-》<listener>-》<filter>-》<servlet>
其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载
- 启动WEB项目的时候,容器首先会去它的配置文件web.xml读取两个节点:
<listener></listener>和<context-param></context-param>
- 紧接着,容器创建一个ServletContext(application),这个WEB项目所有部分都将共享这个上下文
- 容器以
<context-param></context-param>
的name作为键,value作为值,将其转化为键值对,存入ServletContext - 容器创建
<listener></listener>
中的类实例,根据配置的class类路径<listener-class>
来创建监听,在监听中会有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法 - 举例:你可能想在项目启动之前就打开数据库,那么这里就可以在
<context-param>
中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它还有销毁方法
Spring配置文件:
配置Spring,必须需要<listener>
,而<context-param>
可有可无,如果在web.xml中不写<context-param>
配置信息,默认的路径是/WEB-INF/applicationontext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:在<param-value> </param-value>
里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔
<servlet>
必须含有<servlet-name>
和<servlet-class>
,或者<servlet-name>
和<jsp-file>
。 描述如下:
1). <servlet-name>
用来定义servlet的名称,该名称在整个应用中必须是惟一的。
2).<servlet-class>
用来指定servlet的完全限定的名称。
3). <jsp-file>
用来指定应用中JSP文件的完整路径。这个完整路径必须由/开始。
关于<servlet-mapping>
<servlet-mapping>
含有<servlet-name>
和<url-pattern>
1). <servlet-name>
:Servlet的名字,唯一性和一致性,与<servlet>
元素中声明的名字一致。
2). <url-pattern>
:指定相对于Servlet的URL的路径。该路径相对于web应用程序上下文的根路径。<servlet-mapping>
将URL模式映射到某个Servlet,即该Servlet处理的URL
加载Servlet的过程:
容器的Context对象对请求路径(URL)做出处理,去掉请求URL的上下文路径后,按路径映射规则和Servlet映射路径(<url- pattern>
)做匹配,如果匹配成功,则调用这个Servlet处理请求
<servlet>
<servlet-name>first</servlet-name>
<servlet-class>com.Friest</servlet-class>//servlet类的全限名
</servlet>
<servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/first</url-pattern>//URL路径
</servlet-mapping>
获取URL响应头信息:
public static void main(String[] args) throws IOException{
URL url = new URL("http://www.runoob.com");
URLConnection conn = url.openConnection();
Map headers = conn.getHeaderFields();
Set<String> keys = headers.keySet();
for( String key : keys ){
String val = conn.getHeaderField(key);
System.out.println(key+" "+val);
}
System.out.println( conn.getLastModified() );
}