一般状况下,servlet第一次被访问的时候在内存中建立对象,在建立后当即调用init()方法进行初始化。web
对于每一次请求都掉用service(req,resp)方法处理请求,此时会用Request对象封装请求信息,并用Response对象(最初是空的)表明响应消息,传入到service方法里供使用。当service方法处理完成后,返回服务器服务器根据Response中的信息组织称响应消息返回给浏览器。浏览器
响应结束后servlet并不销毁,一直驻留在内存中等待下一次请求。直到服务器关闭或web应用被移除出虚拟主机,servlet对象销毁并在销毁前调用destroy()方法作一些善后的事情。tomcat
ServletConfig config = this.getServletConfig(); String name = config.getServletName();
ServletConfig config = this.getServletConfig(); String value = config.getInitParameter("name");
ServletConfig config = this.getServletConfig(); Enumeration enumeration = config.getInitParameterNames(); while(enumeration.hasMoreElements()){ String name = (String)enumeration.nextElement(); String value = config.getInitParameter(name); System.out.println(name+value); }
void setAttribute(String,Object);
Object getAttribute(String);
void removeAttribute(String);服务器
域对象:在一个能够被看见的范围内共享数据用到对象。app
做用范围:整个web应用范围内共享数据。this
生命周期:当服务器启动web应用加载后建立出ServletContext对象后,域产生。当web应用被移除出容器或服务器关闭,随着web应用的销毁,域销毁。spa
ServletDemo1: ServletContext context = this.getServletContext(); context.getAttribute("apple","red apple"); ServletDemo2: ServletContext context = this.getServletContext(); String v = (String)context.getAttribute("apple"); System.out.println(v); ServletDemo2打印结果:red apple
初始化参数 initparameter --- 在web.xml中为Servlet或ServletContext配置的初始化时带有的基本参数code
web.xml: <context-param> <param-name>username</param-name> <param-value>zhang</param-name> </context-param> <context-param> <param-name>password</param-name> <param-value>123</param-name> </context-param> ServletDemo3: ServletContext context = this.getServleyContext(); Enumeration enumeration = context.getInitParameterNames(); while(enumeration.hasMoreElements()){ String name = (String)enumeration.nextElement(); String value = context.getInitParameter(name); System.out.println(name+value); } ServletDemo3 打印结果: usename:zhang password:123
this.getServletContext.getRequestDispatcher("XXXX")xml
ServletDemo5: response.getWriter().write("111111"); ServeltDemo6: RequestDispatcher dispatcher = this.getServletContext.getRequestDispatcher("/servlet/ServletDemo5"); dispatcher.forward(request,response); ServletDemo6 在浏览器上打印的结果:111111
println是将数据在软件上打印出来
response.getWriter.write()是将数据在浏览器上打印出来对象
在Servlet中读取资源文件时,若是写相对路径和绝对路径,因为路径将会相对于程序启动的目录--在web环境下,就是tomcat启动的目录即tomcat/bin--因此找不到资源。若是写硬盘路径,能够找到资源,可是只要一换发布环境,这个硬盘路径极可能是错误的,一样不行。
为了解决这样的问题ServletContext提供了getRealPath方法。在这个方法中传入一个路径,这个方法的底层会在传入的路径前拼接当前web应用的硬盘路径,从而获得当前资源的硬盘路径。这种方式即便换了发布环境,方法的底层也能获得正确的web应用的路径从而永远都是正确的资源的路径 --this.getServletContext().getRealPath("config.properties")
若是在非Servlet环境下要读取资源文件时能够采用类加载器加载文件的方式读取资源 -- Service.class.getClassLoader().getResource("../../../config.properties").getPath()
config.properties: usename = zhang password = 123 Properties prop = new Properties(); prop.load(new FileReader(this.getServletContext().getRealPath("config.properties"))); System.out.println(prop.getProperty("usename")); System.out.println(prop.getProperty("password")); 打印结果: zhang 123