当Tomcat转发请求,通过Context找到webapps中的web项目。开始加载web.xml时,项目应该如何完成初始化?
===========================================================================
Servlet是什么?
Servlet是用于处理Http请求,是能独立解析数据的小服务程序! 因为Servlet本身也是具有通信模块,他可以接受来自客户端的消息,也可以处理数据库上传回来的数据,并通过显式或者隐式的方法进行响应。从这点上看,web.xml里面<web-app>标签对里面的每一个Servlet标签也变得可以理解了:servlert作为一个独立的小程序,它允许被单独运行,类似一个电器。web.xml像是一个排插一般,需要执行的程序通过把自己的servlet类信息维护到web.xml里面(电插头),在tomcat接受到请求,并通过web.xml寻找时候则可以随着启动!
Servlet的生命周期?
Servlet在整一个生命周期只会被创建一次,以后该实例便被保存!具体什么时候被创建看servlet在web.xml中是否设置随着tomcat初始化!作为一个正常的Servlet同时也是一个java程序,在初始化的时候,先初始化静态块,静态变量,构造方法。接下里便是Init()方法初始化;初始化完成后通过调用service()方法来判断请求是POST/GET/PUT/DELETE请求。而我们只需要对应地重写doPost或者doGet方法则可以了!
在其存活的时间里,由 Servlet 容器处理因为多个线程产生的多个请求,并且每个线程执行一个单一的 Servlet 实例的 service() 方法。
当Servlet程序结束的时候,那么则会调用Destory()方法,关闭其维护的相关的数据库连接等!但一般情况下,serlvet会随着tomcat的启动而初始化,随着tomcat的关闭而destory()
==========================================================================================
ServletConfig:获取web.xml中的参数配置:
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。Servlet可以通过ServletConfig对象就可以得到当前servlet的初始化参数信息:
ServletConfig config = this.getServletConfig() String getServletName()? -- 获取当前Servlet在web.xml中配置的名字 String getInitParameter(String name) -- 获取当前Servlet指定名称的初始化参数的值 Enumeration getInitParameterNames()? -- 获取当前Servlet所有初始化参数的名字组成的枚举 ServletContext getServletContext()? -- 获取代表当前web应用的ServletContext对象 |
ServletCntext:web中共享的域名
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用,ServletConfig.getServletContext方法获得ServletContext对象,ServletContext是所有维护的Servlet直接的共享容器,可以用于数据的传递。其生命周期随着web的启动而启动随web的关闭而关闭!
ServletContext context = this.getServletContext(); |
Web.xml中配置全局的参数:
在web.xml中加载的Servlet有用自己独立的init-param参数,而如果要使得所有的servlet都可以使用,可以通过:
<conteext-param>
<param-name></param-name>
<param-value></param-value>
</context-param>
如下:通过servetContext()获取:
ServletContext context = this.getServletContext(); // 得到上下文对象
// 获取单个的Context里面的初始化参数
String value1 = context.getInitParameter("username");
String value2 = context.getInitParameter("password");
System.out.println(value1 + ";" + value2);
// 一次性获取Context里所有的初始化参数
Enumeration enumeration = context.getInitParameterNames();
while (enumeration.hasMoreElements()) {
String name = (String) enumeration.nextElement();
String value = context.getInitParameter(name);
System.out.println(name + ";" + value);
}
==========================================================================================