javaweb 中 web.xml 配置文件简述
2017-11-11 10:18
369 查看
原文参见:http://blog.csdn.net/believejava/article/details/43229361
http://blog.csdn.net/u013815649/article/details/50435819
一. Servlet介绍:
Servlet通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户的请求。Servlet是个特殊的java类,继承于HttpServlet。客户端通常只有GET和POST两种请求方式,Servlet为了响应则两种请求,必须重写doGet()和doPost()方法。大部分时候,Servlet对于所有的请求响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求。
另外HttpServlet有两个方法
· init(ServletConfig config):创建Servlet实例时,调用该方法的初始化Servlet资源。
· destroy():销毁Servlet实例时,自动调用该方法的回收资源。
通常无需重写init()和destroy()两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init()方法,如果重写了init()方法,应在重写该方法的第一行调用super.init(config),该方法将调用HttpServlet的init()方法。如果需要在销毁Servlet之前,先完成某些资源的回收,比如关闭数据库连接,才需要重写destory方法()。
创建Servlet实例有两个时机:
· 客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet。
· Web应用启动时立即创建Servlet实例,即load-on-start Servlet。
每个Servlet的运行都遵循如下生命周期:
1. 创建Servlet实例。
2. Web容器调用Servlet的init()方法,对Servlet进行初始化。
3. Servlet初始化后,将一直存在于容器中,用于响应客户端请求,如果客户端发送GET请求,容器调用Servlet的doGet()方法处理并响应请求;如果客户端发送POST请求,容器调用Servlet的doPost()方法处理并响应请求。或者统一使用service()方法处理来响应用户请求。
4. Web容器决定销毁Servlet时,先调用Servlet的destory()方法,通常在关闭Web应用时销毁Servlet实例。
5. 为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中,配置Servlet需要修改web.xml文件。
二.web.xml理解:
容器的Context对象对请求路径(URL)做出处理,去掉请求URL的上下文路径后,按路径映射规则和Servlet映射路径(<url- pattern>)做匹配,如果匹配成功,则调用这个Servlet处理请求。servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:
1. 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
2. 最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
3. 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action
4. 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。
根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。
例:
http://blog.csdn.net/u013815649/article/details/50435819
一. Servlet介绍:
Servlet通常称为服务器端小程序,是运行在服务器端的程序,用于处理及响应客户的请求。Servlet是个特殊的java类,继承于HttpServlet。客户端通常只有GET和POST两种请求方式,Servlet为了响应则两种请求,必须重写doGet()和doPost()方法。大部分时候,Servlet对于所有的请求响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求。
另外HttpServlet有两个方法
· init(ServletConfig config):创建Servlet实例时,调用该方法的初始化Servlet资源。
· destroy():销毁Servlet实例时,自动调用该方法的回收资源。
通常无需重写init()和destroy()两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init()方法,如果重写了init()方法,应在重写该方法的第一行调用super.init(config),该方法将调用HttpServlet的init()方法。如果需要在销毁Servlet之前,先完成某些资源的回收,比如关闭数据库连接,才需要重写destory方法()。
创建Servlet实例有两个时机:
· 客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet。
· Web应用启动时立即创建Servlet实例,即load-on-start Servlet。
每个Servlet的运行都遵循如下生命周期:
1. 创建Servlet实例。
2. Web容器调用Servlet的init()方法,对Servlet进行初始化。
3. Servlet初始化后,将一直存在于容器中,用于响应客户端请求,如果客户端发送GET请求,容器调用Servlet的doGet()方法处理并响应请求;如果客户端发送POST请求,容器调用Servlet的doPost()方法处理并响应请求。或者统一使用service()方法处理来响应用户请求。
4. Web容器决定销毁Servlet时,先调用Servlet的destory()方法,通常在关闭Web应用时销毁Servlet实例。
5. 为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中,配置Servlet需要修改web.xml文件。
二.web.xml理解:
容器的Context对象对请求路径(URL)做出处理,去掉请求URL的上下文路径后,按路径映射规则和Servlet映射路径(<url- pattern>)做匹配,如果匹配成功,则调用这个Servlet处理请求。servlet容器对url的匹配过程:
当一个请求发送到servlet容器的时候,容器先会将请求的url减去当前应用上下文的路径作为servlet的映射url,比如我访问的是http://localhost/test/aaa.html,我的应用上下文是test,容器会将http://localhost/test去掉,剩下的/aaa.html部分拿来做servlet的映射匹配。这个映射匹配过程是有顺序的,而且当有一个servlet匹配成功以后,就不会去理会剩下的servlet了(filter不同,后文会提到)。其匹配规则和顺序如下:
1. 精确路径匹配。例子:比如servletA 的url-pattern为 /test,servletB的url-pattern为 /* ,这个时候,如果我访问的url为http://localhost/test,这个时候容器就会先进行精确路径匹配,发现/test正好被servletA精确匹配,那么就去调用servletA,也不会去理会其他的servlet了。
2. 最长路径匹配。例子:servletA的url-pattern为/test/*,而servletB的url-pattern为/test/a/*,此时访问http://localhost/test/a时,容器会选择路径最长的servlet来匹配,也就是这里的servletB。
3. 扩展匹配,如果url最后一段包含扩展,容器将会根据扩展选择合适的servlet。例子:servletA的url-pattern:*.action
4. 如果前面三条规则都没有找到一个servlet,容器会根据url选择对应的请求资源。如果应用定义了一个default servlet,则容器会将请求丢给default servlet(什么是default servlet?后面会讲)。
根据这个规则表,就能很清楚的知道servlet的匹配过程,所以定义servlet的时候也要考虑url-pattern的写法,以免出错。
例:
<!--****************************servlet配置******************************--> <!-- Spring view分发器 对所有的请求都由business对应的类来控制转发 --> <servlet> <servlet-name>business</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>publishContext</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 用户登出 --> <servlet> <servlet-name>LogOutServlet</servlet-name> <servlet-class>com.yonyou.mcloud.cas.web.servlet.LogOutServlet</servlet-class> <init-param> <param-name>serverLogoutUrl</param-name> <param-value>https://dev.yonyou.com:443/sso-server/logout</param-value> </init-param> <init-param> <param-name>serverName</param-name> <param-value>http://10.1.215.40:80/business/</param-value> </init-param> </servlet> <!--****************************servlet映射关系配置*************************--> <servlet-mapping> <servlet-name>LogOutServlet</servlet-name> <url-pattern>/logout</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>business</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
相关文章推荐
- JAVA配置文件之web.xml
- javaweb_web.xml文件_配置指南
- 【Java Web】——配置文件的格式之xml和properties的区分
- 基于Proguard软件基础上,针对Web项目xml配置文件修改的java项目。
- javaee web.xml中如何设置配置文件的加载路径实例详解
- java 用eclipse j2ee写的servlet 程序,WEB-INF下的配置文件web.xml在哪啊?谢谢!
- java非web应用修改 properties/xml配置文件后,无需重启应用即可生效---自动加载
- java 的 web 服务器 jswdk 的配置文件 webserver.xml
- java web.xml配置文件中url-pattern路径匹配方式
- web.xml配置文件的dtd(http://java.sun.com/dtd/web-app_2_3.dtd)
- Java:Struts 项目中web.xml文件配置
- 【Java Web】——配置文件的格式之xml和properties的区分
- java中对于web.xml文件,filter的配置解释
- java开发框架——配置文件web.xml
- java网络编程中的web.xml配置文件
- Java的Web项目中Web.xml配置文件元素详解
- java配置文件web.xml中参数设置及含义
- java web开发在web.xml配置<mime-mapping>实现浏览器根据文件类型自动打开
- java web 配置文件xml界定
- 在java程序项目中如何使用xml配置文件存储信息简述