栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

JavaWeb学习之路

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JavaWeb学习之路

JavaWeb高级应用
    • 注意事项
    • 购物车系统
    • 会话
      • HttpSession API
      • 使用HttpSession对象
    • Web监听器
      • ServletContext事件监听器
      • 监听请求事件 ServletRequest
      • 监听会话事件HttpSession

注意事项
  1. 使用注解注册监听器
@WebListen
购物车系统
  1. 实现用户注册登录
  2. 保持用户登录状态不变
会话
  • Web服务器跟踪客户的状态
    • 使用Servlet API的Session机制
    • 使用持久的Cookie对象
    • 使用URL重写机制
    • 使用隐藏的表单域
  • 状态与会话
    • 状态state:协议记住客户及其请求的能力
      • 有状态的
      • 无状态的
    • 会话session:是客户与服务器之间的不间断的请求响应序列
      • 当一个客户向服务器发送第一个请求时就开始了一个会话。对该客户之后的每个请求,服务器都能够识别出请求来自于同一个客户。当客户明确结束会话或服务器在一个预定义的时限内没从客户接收任何请求时,会话就结束了。当会话结束后,服务器就忘记了客户以及客户的请求。
  • 会话管理机制
    • Web容器使用HttpSession表示会话对象。该接口由容器实现并提供一个简单的管理用户会话的方法
    • 注意:不能使用客户的IP地址唯一标识客户。因为客户可能是通古局域网访问Internet的。尽管在局域网中每个客户有一个IP地址,但对于服务器来说,客户的实际IP地址是路由器的IP地址,所以该局域网的所有客户的IP地址都相同!因此也就无法标识客户。

HTTP的无状态特性

  1. HTTP服务器对客户的每个请求和响应都是作为一个分离的事务处理
  2. 服务器不能在多个请求中维护客户的状态
  3. 某些应用程序中客户与服务器的交互中就需要有状态的,即服务器必须跟踪所有的请求并把它们与客户关联
  1. 当客户向服务器发送一个请求时,服务器就可以为该客户创建一个HttpSession会话对象,并将请求对象与该会话对象关联。服务器在创建会话对象时为其指定一个唯一标识符,成为会话ID,它可以作为该客户的唯一标识。此时,该会话处于新建状态,可以使用HttpSession接口的isNew()来确定会话是否属于该状态
  2. 当服务器向客户发送响应时,服务器将该会话ID与响应数据一起发送给客户,这是通过Set-Cookie响应头实现的,响应消息为
HTTP/1.1 200 0K
Set-Cookie:JSESSIONID= ...	

Content-Type:text/html
  1. 客户在接收到响应后将会话ID存储在浏览器的内存中。当客户再次向服务器发送请求时,它使用Cookie请求头把会话ID与请求一起发送给服务器。这时请求消息可能为:
POST /helloweb/selectProduct.do HTTP/1.1
Host:www.mydomain.com
Cookie:JSESSIONID=...
  1. 服务器接收到请求后,从请求对象中取出会话ID,在服务器中查找之前创建的会话对象,找到后将该请求与之前创建的ID值相同的会话对象关联起来
  2. 上述过程的第2到第4步一直保持重复,如果客户在指定时间没有发送任何请求,服务器将使会话对象失效。一旦会话对象失效,即使客户再发送同一个会话ID,会话对象也不能恢复。对于服务器来说,此时客户的请求被认为是第一次请求即第一步,它不与某个存在的会话对象关联。服务器可以位客户创建一个新的会话对象。
HttpSession API
// HttpSession接口中定义的常用方法
// 返回为该会话指定的唯一标识符
public String getId()
// 返回会话创建的事件
public long getCreationTime()
// 返回会话最后被访问的时间
public long getLastAccessedTime()
// 如果会话对象还没有同客户关联,则返回true
public boolean isNew()
// 返回该会话所属的ServletContext对象
public ServletContext getServletContext()
// 将一个指定名称和值的属性存储到会话对象上
public void setAttribute(String name, Object value)
// 返回存储在会话上的指定名称的属性值,如果没有,返回null
public Object getAttribute(String name)
// 返回存储在会话上的所有属性名的一个枚举对象
public Enumeration getAttributeName()
// 从会话中删除存储的指定名称的属性
public void removeAttribute(String name)
// 设置在容器使该会话失效前客户的两个请求之间最大间隔的时间,单位为秒。参数为负,表示会话永不失效
public void setMaxInactiveInterval(int interval)
// 返回以秒为单位的最大间隔时间,在这段时间内,容器将在客户请求之间保持该会话打开状态
public int getMaxInactiveInterval()
// 使会话对象失效并删除存储在其上的任何对象
public void invalidate()
使用HttpSession对象
  1. 创建并返回与客户请求关联的会话对象
// 使用HttpServletRequest接口提供的方法

public HttpSession getSession(boolean create)
// 该方法与调用getSession(true)等价
public HttpSession getSession()
  1. 在会话对象中添加或删除“名/值”对属性
  2. 如果需要可使会话失效

会话超时与失效

  1. 会话超时:规定当用户在一个指定的期限内处于不活动的状态,就将用户的会话终止
    在DD文件中设置会话超时时间

    10

    元素中指定时以分钟为单位的超时期限,0或者小于0的值表示会话永不过期。若没有通过上述方法设置,默认情况下会话超时时间是30分钟
Web监听器

Web应用程序中的事件主要发生在三个对象上:ServletContext、HttpSession和ServletRequest对象。
事件的类型主要包括对象的生命周期时间和属性改变事件。
为了处理事件,Servlet容器采用了监听器模式,即需要实现有关的监听器接口。

ServletContext事件监听器
监听对象事件监听器接口
ServletContextServletContextEventServletContextListener
ServletContextAttributeEventServletContextAttributeListener
  1. 处理ServletContextEvent事件

该事件是Web应用程序生命周期事件,当容器对ServletContext对象进行初始化或销毁操作时,将发生ServletContextEvent事件

// ServletContextListener接口定义了如下两个方法
// 当ServletContext对象初始化时调用
public void contextInitialized(ServletContextEvent sce)
// 当ServletContext对象销毁时调用
public void contextDestroyed(ServletContextEvent sce)
// ServletContextEvent类只定义了一个方法
public ServletContext getServletContext()

  1. 处理ServletContextAttributeEvent事件

ServletContextAttributeEvent是ServletContextEvent类的子类
当ServletContext对象上属性发生改变时,将发生ServletContextAttributeEvent事件

// ServletContextAttributeListener接口定义了如下三个方法
public void attributeAdded(ServletContextAttributeEvent sce)
public void attributeRemoved(ServletContextAttributeEvent sce)
public void attributeReplaced(ServletContextAttributeEvent sce)
// ServletContextAttributeEvent定义了如下三个方法
public ServletContext getServletContext()
public String getName()
public Object getValue()
监听请求事件 ServletRequest
监听对象事件监听器接口
ServletRequestServletRequestEventServletRequestListener
ServletRequestAttributeEventServletRequestAttributeListener
  1. 处理ServletRequestEvent事件

该事件是请求对象生命周期事件,当一个请求对象初始化或销毁操作时,将发生ServletRequestEvent事件

// ServletRequestListener接口定义了如下两个方法
// 当请求对象初始化时调用
public void requestInitialized(ServletRequestEvent sce)
// 当请求对象销毁时调用
public void requestDestroyed(ServletContextEvent sce)
// ServletRequestEvent类定义了下面两个方法
public ServletContext getServletContext()
public ServletRequest getServletRequest()
  1. 处理ServletRequestAttributeEvent事件

在请求对象上添加、删除和替换属性时发生ServletRequestAttributeEvent事件

// 当在请求对象中添加属性时调用
public void attributeAdded(ServletRequestAttributeEvent src)
// 当在请求对象中删除属性时调用
public void attributeRemoved(ServletRequestAttributeEvent src)
// 当在请求对象中替换属性时调用
public void attributeReplaced(ServletRequestAttributeEvent src)

// ServletRequestAttributeEvent类定义了下面两个方法
// 返回在请求对象上添加、删除或替换的属性名
public String getName()
// 返回在请求对象上添加、删除或替换的属性值,替换属性时,返回的是替换前的属性值
public Object getValue()
监听会话事件HttpSession
监听对象事件监听器接口
HttpSessionHttpSessionEventHttpSesisonListener
HttpSessionActivationListener
HttpSessionBindingEventHttpSessionAttributeListener
HttpSessionBindingListener
  1. 处理HttpSessionEvent事件

HttpSessionEvent事件是会话对象生命周期事件

// HttpSessionListener接口定义了如下两个方法
// 当会话创建时调用
public void sessionCreated(HttpSessionEvent se)
// 当会话销毁时调用
public void sessionDestroyed(HttpSessionEvent se)

// HttpSessionEvent类只定义了一个方法
// 返回状态发生改变的会话对象
public HttpSession getSession()
  1. 处理会话属性时间

当在会话对象上添加属性、删除属性或替换属性时将发生HttpSessionBindingEvent事件

// HttpSessionAttributeListener接口定义了如下两个方法
// 当在会话对象中添加属性时调用
public void attributeAdded(HttpSessionBindingEvent se)
// 当在会话对象中删除属性时调用
public void attributeRemoved(HttpSessionBindingEvent se)
// 当在会话对象中替换属性时调用
public void attributeReplaced(HttpSessionBindingEvent se)

// HttpSessionBindingEvent类中定义了下面三个方法
public HttpSession getSession()
public String getName()
public Object getValue()
  1. 处理会话属性绑定事件

当一个对象绑定到会话对象或从会话对象中解除绑定时发生HttpSessionBindingEvent事件

// HttpSessionBindingListener接口定义了如下两个方法
public void valueBound(HttpSessionBindingEvent event)
public void valueUnbound(HttpSessionBindingEvent event)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/914005.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号