JAVAweb开发课件材料.ppt
《JAVAweb开发课件材料.ppt》由会员分享,可在线阅读,更多相关《JAVAweb开发课件材料.ppt(46页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第3章,Servlet容器模型,本章内容,3.1 ServletContext接口 3.2 会话管理 3.3 Cookie及其应用,3.1 ServletContext接口,3.1.1 得到ServletContext引用 3.1.2 获取应用程序的初始化参数 3.1.3 通过ServletContext对象获得资源 3.1.4 登录日志 3.1.5 用RequestDispatcher实现请求转发 3.1.6 使用ServletContext对象存储数据 3.1.7 检索Servlet容器的信息,3.1.1 得到ServletContext引用,Web容器在启动时会加载每个Web应用程序,并
2、为每个Web应用程序创建一个唯一的ServletContext实例对象,该对象一般称为Servlet上下文对象。 Servlet可以用javax.servlet.ServletContext对象来获得Web应用程序的初始化参数或Servlet容器的版本等信息,它也可以被Servlet用来与其他的Servlet共享数据。,在Servlet中有两种方法得到ServletContext引用。 1. 直接调用getServletContext()方法, ServletContext context = getServletContext(); 2. 先得到ServletConfig引用,再调用它的ge
3、tServletContext()方法, ServletContext context = getServletConfig().getServletContext();,3.1.1 得到ServletContext引用,3.1.2 获取应用程序的初始化参数,ServletContext对象是在Web应用程序装载时初始化的。可以使用下面两个方法检索Servlet上下文初始化参数: public String getInitParameter(String name):返回指定参数名的字符串参数值,如果参数不存在则返回null。 public Enumeration getInitParamet
4、erNames():返回一个包含所有初始化参数名的Enumeration对象。,应用程序初始化参数应该在web.xml文件中使用元素定义,而不能通过注解定义。下面是一个例子: adminEmail ,3.1.2 获取应用程序的初始化参数,在Servlet中可以使用下面代码检索adminEmail参数值。 ServletContext context = getServletContext(); String email = context.getInitParameter(adminEmail);,3.1.2 获取应用程序的初始化参数,3.1.3通过ServletContext对象获得资源,p
5、ublic URL getResource(String path):返回由给定路径指定的资源的URL对象。 public InputStream getResourceAsStream(String path):如果想从资源上获得一个InputStream对象,这是一个简洁的方法,它等价于getResource(path).openStream()。 public String getRealPath(String path):返回给定的相对路径的绝对路径。 程序3.1 FileDownloadServlet.java,3.1.4 登录日志,使用ServletContext接口的log()方
6、法可以将指定的消息写到服务器的日志文件中,该方法有下面两种格式。 public void log(String msg):参数msg为写到日志文件中的消息。 public void log(String msg, Throwable throwable):将msg指定的消息和异常的栈跟踪信息写入日志文件。,3.1.5 用RequestDispatcher实现请求转发,使用ServletContext接口的下列两个方法也可以获得RequestDispatcher对象,实现请求转发。 RequestDispatcher getRequestDispatcher(String path):参数pat
7、h表示资源路径,它必须以“/”开头,表示相对于Web应用的文档根目录。 RequestDispatcher getNamedDispatcher(String name):参数name为一个命名的Servlet对象。Servlet和JSP页面都可以通过Web应用程序的DD文件指定名称。,3.1.6 使用ServletContext对象存储数据,使用ServletContext对象也可以存储数据,该对象也是一个作用域对象,它的作用域是整个应用程序。在ServletContext接口中也定义了4个处理属性的方法. public void setAttribute(String name, Obje
8、ct object):将给定名称的属性值对象绑定到上下文对象上。,public Object getAttribute(String name):返回绑定到上下文对象上的给定名称的属性值,如果没有该属性,则返回null。 public Enumeration getAttributeNames():返回绑定到上下文对象上的所有属性名的Enumeration对象。 public void removeAttribute(String name):从上下文对象中删除指定名称的属性。,3.1.6 使用ServletContext对象存储数据,3.1.7 检索Servlet容器的信息,getServe
9、rInfo()方法返回Servlet所运行的容器的名称和版本。 getMajorVersion()和getMinorVersion()方法可以返回容器所支持的Servlet API的主版本号和次版本号。 getServletContextName()方法返回与该ServletContext对应的Web应用程序名称,它是在web.xml中使用元素定义的名称。,3.2 会话管理,在很多情况下,Web服务器必须能够跟踪客户的状态。跟踪客户状态可以使用数据库实现,但在Servlet容器中通常使用会话机制维护客户状态。,3.2 会话管理,3.2.1 理解状态与会话 3.2.2 会话管理机制 3.2.3
10、HttpSession API 3.2.4 使用HttpSession对象 3.2.5 会话超时与失效,3.2.1 理解状态与会话,协议记住用户及其请求的能力称为状态(state)。按这个观点,协议分成两种类型:有状态的和无状态的。 HTTP协议是一种无状态的协议,HTTP服务器对客户的每个请求和响应都是作为一个分离的事务处理。服务器无法确定多个请求是来自相同的客户还是不同的客户。这意味着服务器不能在多个请求中维护客户的状态。,会话(session)是一个客户与服务器之间的不间断的请求响应序列。 当一个客户向服务器发送第一个请求时就开始了一个会话。对该客户之后的每个请求,服务器能够识别出请求来
11、自于同一个客户。当客户明确结束会话或服务器在一个预定义的时限内没从客户接收任何请求时,会话就结束了。当会话结束后,服务器就忘记了客户以及客户的请求。,3.2.1 理解状态与会话,3.2.2 会话管理机制,容器通过HttpSession接口抽象会话的概念。该接口由容器实现并提供了一个简单的管理用户会话的方法。,3.2.2 会话管理机制,(1)当客户向服务器发送第一个请求时,服务器就可以为该客户创建一个HttpSession会话对象,并将请求对象与该会话对象关联。服务器在创建会话对象时为其指定一个唯一标识符,称为会话ID,它可作为该客户的唯一标识。,3.2.2 会话管理机制,(2)当服务器向客户发
12、送响应时,服务器将该会话ID与响应数据一起发送给客户,这是通过Set-Cookie响应头实现的,响应消息可能为: HTTP/1.1 200 OK Set-Cookie:JSESSIONID=61C4F23524521390E70993E 5120263C6 Content-Type:text/html 这里,JSESSIONID的值即为会话ID,它是32位的十六进制数。,3.2.2 会话管理机制,(3)客户在接收到响应后将会话ID存储在浏览器的内存中。当客户再次向服务器发送一个请求时,它将通过Cookie请求头把会话ID与请求一起发送给服务器。这时请求消息可能为: POST /helloweb
13、/selectProduct.do HTTP/1.1 Host: Cookie: JSESSIONID=61C4F23524521390E70993E5120263C6 ,3.2.2 会话管理机制,(4)服务器接收到请求后,从请求对象中取出会话ID,在服务器中查找之前创建的会话对象,找到后将该请求与之前创建的ID值相同的会话对象关联起来。 上述过程的第(2)到第(4)步一直保持重复。 如果客户在指定时间没有发送任何请求,服务器将使会话对象失效。一旦会话对象失效,即使客户再发送同一个会话ID,会话对象也不能恢复。,3.2.2 会话管理机制,通过会话机制可以实现购物车应用。当用户登录购物网站时,W
14、eb容器就为客户创建一个HttpSession对象。 实现购物车的Servlet使用该会话对象存储用户的购物车对象,购物车中存储着用户购买的商品列表。当客户向购物车中添加商品或删除商品时,Servlet就更新该列表。当客户要结账时,Servlet就从会话中检索购物车对象,从购物车中检索商品列表并计算总价格。一旦客户结算完成,容器就会关闭会话。,3.2.2 会话管理机制,注意,不能使用客户的IP地址唯一标识客户。因为,客户可能是通过局域网访问Internet。尽管在局域网中每个客户有一个IP地址,但对于服务器来说,客户的实际IP地址是路由器的IP地址,所以该局域网的所有客户的IP地址都相同!因此
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- javaweb 开发 课件 材料
限制150内