一 ,会话跟踪
??? 会话:从网络服务器的观点看,一个会话包含单个浏览器调用期间进行的所有请求,换句话说,当我们打开浏览器时,会话开始,关闭浏览器时,会话结束。
?? 问题的出现:一个servlet是供大家使用的,不可能供某一个客户端单独使用,也可以说它是无状态的(不能存储单个客户端的信息),它供多个client调用(访问),而问题的出现是需要存储每个client自己特征的信息(如电子商城的购物车)。
?? 问题的解决:
第一:使用每个client的ip地址来区别他们吗?不能,因为可能多个客户在一台机器上运行,而请求也可能是通过代理服务器路由,在这两种情况下,IP地址都不能做为唯一标识符。
第二:Cookie存储或URL重写
Cookie是能够嵌入到HTTP请求或响应中的一段数据,也可以这么理解,它是在client内存或硬盘中的一个文本文件或者说就是一个字符串,它最初由Netscape公司引入的。一种典型的情形是,WEB服务器在一个响应头中嵌入cookie值,浏览器将在每一个子请求中返回相同的cookie值。
一些有用的代码:
? cookie cookies[]=myhttprequest.getCookies();//返回的是一个cookie数组
? cookie c=cookies[i];
? String myName=c.getName();
? String myValue=c.getValue();
??? String myComment =c.getComment();//返回这个cookie目的的注释??
??? Int myMaxAge =c.getMaxAge();//返回这个cookie的最大有效期,采用秒进行规定,缺省情况下,-1指出cookie将会一直存在到浏览器会话终止。
?URL重写:对一些特殊的用户或不支持cookie的浏览器,我们不得不使用URL重写技术,由servlet创建的所有衔接和重定位必须编码,以会话ID作为URL的一部分。URL编码的方法依据特定服务器而定,但是最可能采用增加参数或额外路径信息的方式。
?String url=myhttpRequest.getRequestURI();
MyHttpResponse.encodeURL(url);
?
二,Servlet API
1,? 接口名称:javax.servlet.HttpServletRequest
方法:
?? public String getAuthType();//返回用来保护servlet的认证模式的名称。
?? Public Cooki getCookis();//返回一个数组,它包含客户随这个请求发送的所有cookie对
?????????????????? //象,如没有cookie则返回NULL.
?? Public String getMethod();//返回处理这个请求的Http方法的名称,如GET,POST,PUT
?? Public String getQueryString();//返回路径之后的请求URL中包含的查询字符串。
?? Public HttpSession getSession(boolean);//返回与这个请求相关联的当前HttpSession,或者如果没有当前会话,而创建标识为true,就返回新的会话。如果创建标识为false,而且请求中没有有效的HttpSession,这个方法就返回空值。
2,? 接口名称:javax.servlet.http.HttpSession;
方法:
public long getCreationTime();
public string getId();//返回赋予这个会话的唯一标识的字符串。这个标识符可以由servlet容器指定,会依赖以现实。
Public long getlastAccessedTime();//返回客户发送与这个会话相关联的请求的最后时间。
Public ServletContext getServletContext();//返回这个会话所属的上下文环境。
Public java.lang.Object getAttribute(java.lang.string);
Public java.util.Enumeration getAttributeNames();
Public void serAttribute(String,Object);
Public void removeAttribute(String);
Public void invalidate();//使这个会话无效,然后删除它所绑定的属性。
public long
?
?