会话管理和使用Word下载.docx
- 文档编号:17971240
- 上传时间:2022-12-12
- 格式:DOCX
- 页数:11
- 大小:19.25KB
会话管理和使用Word下载.docx
《会话管理和使用Word下载.docx》由会员分享,可在线阅读,更多相关《会话管理和使用Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjava.text.SimpleDateFormat;
importjava.util.Date;
importjavax.servlet.http.HttpSession;
publicclassGetSessionInfoServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doPost(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
request.setCharacterEncoding("
GBK"
);
response.setContentType("
text/html;
charset=GBK"
PrintWriterout=response.getWriter();
//获取与当前请求相关的会话
HttpSessionsession=request.getSession();
DatecreationTime=newDate(session.getCreationTime());
DatelastAccessed=newDate(session.getLastAccessedTime());
Datenow=newDate();
SimpleDateFormatfmt=newSimpleDateFormat("
yyyy-MM-dd-HH:
mm:
ss"
out.println("
HTML>
"
<
HEAD>
TITLE>
显示会话的信息<
/TITLE>
/HEAD>
BODY>
out.print("
h2>
会话创建和最后处理时间<
/h2>
现在时间是:
+fmt.format(now)+"
br>
会话创建时间是:
+fmt.format(creationTime)+"
会话ID是:
+session.getId()+"
会话最大活动期是:
+session.getMaxInactiveInterval()+"
秒<
最后处理时间是:
+fmt.format(lastAccessed));
HttpRequest的信息<
来自请求会话ID:
+request.getRequestedSessionId()+"
会话来自Cookie吗?
:
+request.isRequestedSessionIdFromCookie()+"
会话是来自URL吗?
+request.isRequestedSessionIdFromURL()+"
会话是有效的吗?
+request.isRequestedSessionIdValid()+"
//销毁会话
session.invalidate();
/BODY>
/HTML>
out.flush();
out.close();
}
3、会话跟踪
会话跟踪允许服务器确定访问站点的用户、用户访问站点的次数和用户停留站点的时间段。
在客户端和服务器之间的会话ID和状态信息交换,Web服务器常有4种方法:
●使用ServletAPI中的Session机制
●使用Cookic
●分别是将会话ID存放在URL路劲中、执行URL重写
●隐藏表单域
1>
使用Session的会话跟踪
示例3-2:
packagecom3_2;
publicclassColorServletextendsHttpServlet{
Stringname="
;
Stringcolor="
Stringsfont="
IntegerhitCount=newInteger(0);
HttpSessionsession=request.getSession(true);
html>
head>
title>
会话跟踪<
/title>
/head>
if(session.isNew()){
//第一次请求页面,创建Session对象
hitCount=newInteger
(1);
out.print("
body>
formaction=ColorServletmethod=POST>
h3>
请选择你喜欢的背景颜色和字体<
/h3>
inputtype=radioname=bcolorvalue=whitechecked>
白色"
inputtype=radioname=bcolorvalue=red>
红色"
inputtype=radioname=bcolorvalue=green>
绿色"
inputtype=radioname=bcolorvalue=blue>
蓝色<
inputtype=radioname=sfontvalue=隶属checked>
隶属"
inputtype=radioname=sfontvalue=宋体>
宋体"
inputtype=radioname=sfontvalue=方正舒体>
方正舒体<
请输入你的名字<
inputtype=textname=namevalue='
'
>
inputtype=submitname=submitvalue=提交>
/form>
}else{
//第二请求,不再创建Session对象
//从request对象里拿值
color=request.getParameter("
bcolor"
name=request.getParameter("
name"
sfont=request.getParameter("
sfont"
//其他的更多次的请求,此时,request对象里不再有值了
if(color!
=null&
&
name!
sfont!
=null){
hitCount=newInteger
(1);
session.setAttribute("
color"
color);
hitCount"
hitCount);
name);
sfont);
}else{
//从不同的Session对象中取值
color=(String)session.getAttribute("
hitCount=(Integer)session.getAttribute("
name=(String)session.getAttribute("
sfont=(String)session.getAttribute("
}
session.setAttribute("
newInteger(hitCount.intValue()+1));
bodybgcolor="
+color+"
fontface="
+sfont+"
你好!
+name+"
/font>
p>
你请求这个页面"
+hitCount+"
次<
/p>
ahref=ColorServlet>
请求页面<
/a>
}
/body>
/html>
2>
使用Cookie
ServletAPI中提供了Cookie类来实现Cookie,并定义了添加Cookie和获取Cookie的方法,同时,也定义了管理Cookie的方法。
示例3-3代码:
packagecom3_3;
importjava.util.Enumeration;
importjavax.servlet.http.Cookie;
publicclassCookieWriteAndReadServletextendsHttpServlet{
//创建会话对象
//构造两个Cookie对象
CookiecustomerID=newCookie("
customerID"
"
123456"
Cookiecolor=newCookie("
blue"
customerID.setMaxAge(300);
color.setMaxAge(300);
//把Cookie添加到相应头
response.addCookie(customerID);
response.addCookie(color);
读取客户端的Cookie<
客户端本机上的Cookie<
tableborder='
1'
tr>
td>
cookie名字<
/td>
cookie的值<
/tr>
//获取客户端放在HTTP请求里面的所有Cookie
Cookie[]cookies=request.getCookies();
if(cookies!
//以表格的形式输出Cookie的名字和值
for(inti=0;
i<
cookies.length;
i++){
out.println("
+cookies[i].getName()+"
+cookies[i].getValue()+"
/table>
下面是HTTP请求的信息"
头名字<
头的值<
//获取所有的请求头的信息
Enumerationen=request.getHeaderNames();
//接口
while(en.hasMoreElements()){
//以表格的形式输出请求信息和名字和值
Stringname=(String)en.nextElement();
out.println("
+name+"
+request.getHeader(name)+"
table>
3>
URL重写
在JavaWeb中,使用会话和Cookie来跟踪客户。
Cookie是存放在客户端的机器上面,如果客户端的浏览器出于安全方面的考虑,在浏览器的隐私设置中阻止了所有的Cookie。
这样,服务器就没有办法把一些信息写入到客户端,使用Cookie就没有用了。
这个时候,我们还是需要跟踪客户。
JavaServletAPI中为我们提供了会话跟踪的另一中机制,通常的做法是重写客户请求的URL,把SessionID添加到URL信息中。
URL重写其实就是在URL后面加上一个jsessionid参数,jsessionid的参数值是唯一的,所以可以跟踪某一会话。
HttpServletResponse接口中提供了2中URL重写的方法,如下:
方法说明
StringencodeURL(Stringurl)重写给定的url,包含SessionID
StringencodeRedirectURL(Stringurl)使用sendRedirect方法时,重写给定的url,包含SessionID
示例3-4代码:
packagecom3_4;
publicclassUrlRewriteServletextendsHttpServlet{
doPost(request,response);
//获取路劲
StringcontextPath=request.getContextPath();
//使用URL重写方法
StringnewURL=response.encodeURL(contextPath+"
/default.html"
演示客户端禁用浏览器的Cookie<
//根据新的URL地址来判断客户端是否禁用Cookie
if(newURL.endsWith(session.getId())){
客户端禁用了Cookie,URL将重写<
客户端请求的default.html页面新的URL是:
+newURL+"
else{
客户端使用了Cookie,URL将不变<
客户端请求的default.html页面的URL是:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 会话 管理 使用