实验5会话管理.docx
《实验5会话管理.docx》由会员分享,可在线阅读,更多相关《实验5会话管理.docx(10页珍藏版)》请在冰豆网上搜索。
实验5会话管理
实验5-会话管理
实验五会话管理
一、实验目的
1.了解Web服务器对客户跟踪的各种方法;
2.重点掌握使用HttpSession对象跟踪会话的方法;
3.掌握使用Cookie技术跟踪会话的方法;
4.了解URL重写和隐藏表单域的方法。
二、实验原理
HTTP协议是无状态的协议。
在很多情况下,Web服务器必须能够跟踪客户的状态。
比如,对于一个购物网站,在一个时刻可能有多个客户购物,Web服务器必须能够区分不同的客户。
一般情况下,Web服务器为每个客户配置了虚拟的购物车(ShoppingCart)。
当某个客户请求将一个商品放入购物车时,Web服务器必须根据发出请求的客户的身份,找到该客户的购物车,然后把商品放入其中。
Web服务器跟踪客户的状态通常有4种方法:
(1)使用HttpSession对象管理会话;
(2)使用持久的Cookie对象;(3)使用URL重写机制;
}
【步骤2】修改web.xml文件,添加代码如下:
LoginServlet
cn.edu.session.servlet.LoginServlet
【步骤3】新建login.jsp页面,代码如下:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
login.jsplogin.jsp
用户名:
【步骤4】新建index1.jsp页面,代码如下:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
index1.jspindex1.jsp
<%
Stringusername=(String)session.getAttribute("username");
if(username==null){
out.print("您还没有登录!
");
}else{
out.print("用户名:
"+username);
}
%>
index2
【步骤5】新建index2.jsp页面,代码如下:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.01Transitional//EN">
index2.jspindex2.jsp
<%
Stringusername=(String)session.getAttribute("username");
if(username==null){
out.print("您还没有登录!
");
}else{
out.print("用户名:
"+username);
}
%>
index1
图5.1login.jsp页面
图5.2重定向后页面
(二)使用Cookie跟踪会话
使用Cookie跟踪会话涉及到向客户端写入Cookie和从客户端读取Cookie。
注意UUID的用法。
【步骤1】向客户端写入Cookie对象
packagecn.edu.cookie;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.UUID;
importjavax.servlet.ServletException;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassAddCookieextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=utf-8");
Stringid=UUID.randomUUID().toString();//生成一个随机字符串
Cookiecookie=newCookie("id",id);//创建Cookie对象,指定名字和值
response.addCookie(cookie);//在响应中添加Cookie对象
response.getWriter().print("已经给你发送了ID");
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
访问上述Servlet将向客户端写入一个Cookie,执行后可查看客户机对应目录看是否写了一个文件。
图5.3SendCookie程序的运行结果
【步骤2】从客户端读取Cookie对象
packagecn.edu.cookie;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.Cookie;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassGetCookieextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html;charset=utf-8");
Cookie[]cs=request.getCookies();//获取请求中的Cookie
if(cs!
=null){//如果请求中存在Cookie
for(Cookiec:
cs){//遍历所有Cookie
if(c.getName().equals("id")){//获取Cookie名字,如果Cookie名字是id
response.getWriter().print("您的ID是:
"+c.getValue());//打印Cookie值
}
}
}
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doGet(request,response);
}
}
图5.4GetCookie程序的运行结果
四、思考题
1.简述会话管理的常用方法有哪些?
答:
使用ServletAPI的Session机制,使用持久的Cookie对象,使用URL重写机制,使用隐藏的表单域。
2.如何使用HttpSession对象共享数据?
答:
PublicvoidsetAttribute(Stringname,Objectvalue)j将一个指定名称和值的属性绑定到会话对象上,PublicvoidgetAttribute(Stringname)返回绑定到会话上的指定名称属性值,PublicvoidEnumeratinongetAttributeName()返回所用绑定到会话上的属性名的Enumeratinon对象,PublicvoidremoveAttribute(Stringname,)从会话中删除绑定的指定名称的属性。
五、实验总结
本次实验主要是使我们了解Web服务器对客户跟踪的各种方法,掌握使用HttpSession对象跟踪会话的方法以及使用Cookie技术跟踪会话的方法和了解URL重写和隐藏表单域的方法等,相信掌握了这部分知识对以后的学习也会于很大帮助。