随笔-199  评论-203  文章-11  trackbacks-0
以前用session时只知道session是和服务器连接的一个会话,有几个常用的接口。
这两天仔细看了下这方面的资料,在这里和大家一起分享,如果有写的不正确的地方,请指正,谢谢。
下面我们在一个servlet中写测试程序,class名为SeesinInfoServlet,我们一般在程序中取得session是用
request的getSession()来取得容器中的session,该方法当容器中已经存在了该session的时候,返回已经存
在的session,否则创建一个新的session,然后返回创建的session。request还有另外一个getSession()的重
载方法:HttpSession getSession(boolean create),一般不常用,大家可以查j2ee的api,每个session都对应
唯一的sessionId,sessionId可以通过getId()方法获得,session是维持客服端和服务器端状态的一个东西,是
通过sessionId来一一对应的,客服端的sessionId一般保存在cookie中,如果客服端的cookie没有被禁掉的话
。如果cookie被禁掉,我们可以通过URL重写来实现把sessionId传到服务器。请看下面程序。
  1. import java.io.IOException;   
  2. import java.io.PrintWriter;   
  3. import java.util.Date;   
  4.   
  5. import javax.servlet.ServletException;   
  6. import javax.servlet.http.HttpServlet;   
  7. import javax.servlet.http.HttpServletRequest;   
  8. import javax.servlet.http.HttpServletResponse;   
  9. import javax.servlet.http.HttpSession;   
  10.   
  11. public class SeesinInfoServlet extends HttpServlet {   
  12.   
  13.     @Override  
  14.     protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {   
  15.         PrintWriter pw = res.getWriter();   
  16.         HttpSession s = req.getSession();   
  17.         pw.write("New Session:" + s.isNew() + "<br>");   
  18.         pw.write("Session Id:" + s.getId() + "<br>");   
  19.         pw.write("Session Create Time:" + new Date(s.getCreationTime()) + "<br>");   
  20.            
  21.         pw.write("<br>");   
  22.         pw.println("<h3>Request Information</h3>");   
  23.         pw.println("Session Id from Request:" + req.getRequestedSessionId()+ "<br>");   
  24.         pw.println("Session Id via Cookie:" + req.isRequestedSessionIdFromCookie()+ "<br>");   
  25.         pw.println("Session Id rewritten Url:" + req.isRequestedSessionIdFromURL()+ "<br>");   
  26.         pw.println("valid session id:" + req.isRequestedSessionIdValid()+ "<br>");   
  27.         //pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");   
  28.         pw.println("<a href='SessionInfoServlet'>refresh</a>");   
  29.         pw.close();   
  30.            
  31.     }   
  32.   
  33. }  

PrintWriter pw = res.getWriter();这一句取得服务器端反映给客服端的输出流。
HttpSession s = req.getSession();取得session。
req.getRequestedSessionId();这一句取得客服端cookie中的sessionId,如果cookie没有被禁掉的话,第一次访问为null,因为还没创建session,以后每次都和
s.getId() 取得的值一致。
req.isRequestedSessionIdFromCookie();如果没有禁掉cookie,返回true。
req.isRequestedSessionIdFromURL();是否通过URL重写取得sessionId,
//pw.println("<a href="+ res.encodeURL("SessionInfoServlet")+">refresh</a>");其中的res.encodeURL(String),即为URL重写,我们可以看到地址栏后会跟sessionId。
如果不是URL重写,则地址栏中没有sessionId。

posted on 2009-06-16 22:53 Werther 阅读(334) 评论(0)  编辑  收藏 所属分类: 10.Java

只有注册用户登录后才能发表评论。


网站导航: