- Tomcat容器
Tomcat容器—>Servlet容器—>Context容器
- Servlet的生命周期
四步:servlet类加载--->实例化--->服务--->销毁。
1、Web Client 向Servlet容器(Tomcat)发出Http请求
2、Servlet容器接收Web Client的请求
3、Servlet容器创建一个HttpRequest对象,将Web Client请求的信息封装到这个对象中
4、Servlet容器创建一个HttpResponse对象
5、Servlet容器调用HttpServlet对象的service方法,把HttpRequest对象与HttpResponse对象作为参数
传给 HttpServlet对象
6、HttpServlet调用HttpRequest对象的有关方法,获取Http请求信息
7、HttpServlet调用HttpResponse对象的有关方法,生成响应数据
8、Servlet容器把HttpServlet的响应结果传给Web Client
Servlet的框架是由两个Java包组成的:javax.servlet与javax.servlet.http。在javax.servlet包中定义了所有的Servlet类都必须实现或者扩展的通用接口和类。在javax.servlet.http包中定义了采用Http协议通信的HttpServlet类。Servlet的框架的核心是javax.servlet.Servlet接口,所有的Servlet都必须实现这个接口。
在Servlet接口中定义了5个方法,
其中3个方法代表了Servlet的生命周期:
1、init方法:负责初始化Servlet对象。
2、service方法:负责响应客户的请求。
3、destroy方法:当Servlet对象退出生命周期时,负责释放占用的资源。
public void init(ServletConfig config)throws ServletException{ //第一个 this.config = config; this.init(); } ·public void init()throws ServletException{ //第二个
}
当容器(tomcat)帮忙调用init(ServletConfig config)并且给传过来一个参数config,这个方法把参数对象的引用指向类的成员变量this.config,并且调用类的 this.init()方法。我们一般重写init()方法都是重写的第二个,这样当忘记写super.init()时不会导致空指针的错误。如果我们在写Servlet类时重写init(ServletConfig config),那么忘记写super.init(ServletConfig config),就容易造成出现空指针异常。所以,最好不要重写init(ServletConfig config)。
public void setAttribute(String name,Object value) 将value对象以name名称绑定到会话 public object getAttribute(String name) 取得name的属性值,如果属性不存在则返回null public void removeAttribute(String name) 从会话中删除name属性,如果不存在不会执行,也不会抛处错误. public Enumeration getAttributeNames() 返回和会话有关的枚举值 public void invalidate() 使会话失效,同时删除属性对象 public Boolean isNew() 用于检测当前客户是否为新的会话 public long getCreationTime() 返回会话创建时间 public long getLastAccessedTime() 返回在会话时间内web容器接收到客户最后发出的请求的时间 public int getMaxInactiveInterval() 返回在会话期间内客户请求的最长时间.秒 public void setMasInactiveInterval(int seconds) 允许客户客户请求的最长时间 ServletContext getServletContext() 返回当前会话的上下文环境,ServletContext对象可以使Servlet与web容器进行通信 public String getId() 返回会话期间的识别号
4. servlet中的cookie到底有什么?
构造cookie 的方法 : new Cookie(键,值) 构造函数如下: Cookie(java.lang.String name, java.lang.String value) 把cookie发送给客户端 HttpServletResponse.addCookie(javax.servlet.http.Cookie) 取得客户浏览器的cookie,返回的是数组 HttpServletRequest.getCookies() getComment/setComment 获取/设置Cookie的注释。 getDomain/setDomain 获取/设置Cookie适用的域。一般地,Cookie只返回给与发送它的服务器名字完全相同的服务器。使用这里的方法可以指示浏览器把Cookie返回给同一域内的其他服务器。注意域必须以点开始(例如.sitename.com),非国家类的域(如.com,.edu,.gov)必须包含两个点,国家类的域(如.com.cn,.edu.uk)必须包含三个点。 getMaxAge/setMaxAge 获取/设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内有效,即在用户关闭浏览器之前有效,而且这些Cookie不会保存到磁盘上。 若生存时间为负值,代表浏览器关闭Cookie即消失。生存时间为0,代表删除Cookie,生存时间为正数,代表Cookie存在多少秒。 getName/setName 获取/设置Cookie的名字。本质上,名字和值是我们始终关心的两个部分。由于HttpServletRequest的getCookies方法返回的是一个Cookie对象的数组,因此通常要用循环来访问这个数组查找特定名字,然后用getValue检查它的值。 getPath/setPath 获取/设置Cookie适用的路径。如果不指定路径,Cookie将返回给当前页面所在目录及其子目录下的所有页面。这里的方法可以用来设定一些更一般的条件。例如,someCookie.setPath("/"),此时服务器上的所有页面都可以接收到该Cookie。 getSecure/setSecure 获取/设置一个boolean值,该值表示是否Cookie只能通过加密的连接(即SSL)发送。 getValue/setValue 获取/设置Cookie的值。如前所述,名字和值实际上是我们始终关心的两个方面。不过也有一些例外情况,比如把名字作为逻辑标记(也就是说,如果名字存在,则表示true)。 getVersion/setVersion 获取/设置Cookie所遵从的协议版本。默认版本0(遵从原先的Netscape规范);版本1遵从RFC 2109 , 但尚未得到广泛的支持。 几个Cookie工具函数,获取指定名字的Cookie值 该函数是ServletUtilities.java的一部分。getCookieValue通过循环依次访问Cookie对象数组的各个元素,寻找是否有指定名字的Cookie,如找到,则返回该Cookie的值;否则,返回参数中给出的默认值。getCookieValue能够在一定程度上简化Cookie值的提取。