Java responsecookiesession.docx
- 文档编号:28819385
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:19
- 大小:32.30KB
Java responsecookiesession.docx
《Java responsecookiesession.docx》由会员分享,可在线阅读,更多相关《Java responsecookiesession.docx(19页珍藏版)》请在冰豆网上搜索。
Javaresponsecookiesession
Response&Cookie& Session
目录:
Cookie& Session1
1.Cookie2
1.1概念2
1.2如何保存数据2
1.3显示当前时间3
1.4Cookie案例-商品历史记录4
1.5作业4
2.Session4
2.1Session原理4
2.2案例4
2.3如何解决关了浏览器,session中数据不丢失?
5
2.4IE禁用Cookie后的session处理5
2.5Session购物案例5
2.6登陆、注销用户6
2.7防表单重复提交6
2.8验证码效验7
1.Response
1.1简介
概念、常用方法(API),了解构建相应过程。
1.2字节流输出数据
//控制浏览器打开编码(记住:
什么编码输出,设置相应打开编码)
response.setHeader("Content-Type","text/html;charset=UTF-8");
Stringstr="中国";
ServletOutputStreamout=response.getOutputStream();
out.write(str.getBytes("UTF-8"));
//标签模拟http响应头;控制浏览器行为
out.write("
ServletOutputStreamout=response.getOutputStream();
//浏览器显示数据查码表,找1对应的显示字符,而不是直接输出1
out.write
(1);
1.3字符流输出数据
//设置response编码
response.setCharacterEncoding("utf-8");
//1.控制浏览器打开方式
//response.setHeader("Content-Type","text/html;charset=Utf-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriterout=response.getWriter();
out.write("中国");
1.4文件下载
Stringpath=getServletContext().getRealPath("/images/1.jpg");
StringfileName=path.substring(path.lastIndexOf("\\")+1);
response.setHeader("content-disposition","attachment;filename="+fileName);
InputStreamin=null;
OutputStreamout=null;
try{
in=newFileInputStream(path);
intlen=-1;
byte[]buffer=newbyte[1024];
out=response.getOutputStream();
while((len=in.read(buffer))>0){
out.write(buffer);
}
}catch(Exceptione){
e.printStackTrace();
}finally{
try{
if(in!
=null)
in.close();
if(out!
=null)
out.close();
}catch(Exceptione){
e.printStackTrace();
}
}
注意:
如果下载的文件为中文,需编码:
response.setHeader("content-disposition","attachment;filename="
+URLEncoder.encode(fileName,"UTF-8"));
1.5输出验证码
protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
BufferedImageimage=newBufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
Graphicsg=image.getGraphics();
//1.设置背景色
setBackgroundColor(g);
//2.设置边框
setBorder(g);
//3.画干扰线
drawRandomLine(g);
//4.写随机数
drawRandomNum(g);
//图形写给浏览器
response.setContentType("image/jpeg");
//控制浏览器不读缓存start
response.setDateHeader("expries",-1);
response.setHeader("Cache-Control","no-cache");
response.setHeader("Pragma","no-cache");
//控制浏览器不读缓存end
ImageIO.write(image,"jpg",response.getOutputStream());
}
privatevoidsetBackgroundColor(Graphicsg){
g.setColor(Color.white);
g.fillRect(0,0,WIDTH,HEIGHT);
}
privatevoidsetBorder(Graphicsg){
g.setColor(Color.blue);
g.drawRect(1,1,WIDTH-2,HEIGHT-2);
}
privatevoiddrawRandomLine(Graphicsg){
g.setColor(Color.green);
for(inti=0;i<5;i++){
intx1=newRandom().nextInt(WIDTH);
inty1=newRandom().nextInt(HEIGHT);
intx2=newRandom().nextInt(WIDTH);
inty2=newRandom().nextInt(HEIGHT);
g.drawLine(x1,y1,x2,y2);
}
}
privatevoiddrawRandomNum(Graphicsgraphics){
//弧度=度数*PI/180
Graphics2Dg=(Graphics2D)graphics;
g.setColor(Color.red);
g.setFont(newFont("宋体",Font.BOLD,20));
//常用汉字
Stringbase="";
intx=5;
for(inti=0;i<4;i++){
//生成随机弧度数
//intd=newRandom().nextInt(30);//0-30
intd=newRandom().nextInt()%30;//正负30之间
//添加旋转弧度
g.rotate(d*Math.PI/180,x,20);
//汉字\u4e00——\u9fa5
Stringch=base.charAt(newRandom().nextInt(base.length()))+"";
g.drawString(ch,x,20);
//取消旋转
g.rotate(-d*Math.PI/180,x,20);
x+=30;
}
}
页面代码:
functionchangeNum(obj){
obj.src="/day06/RandomServlet?
date="+newDate().getTime();
}
或者:
obj.src=obj.src+"?
d="+newDate().getTime();
1.6相应头与meta标签实现刷新
//模拟:
登陆。
。
。
跳转
response.setContentType("text/html;charset=UTF-8");
response.setHeader("refresh","3;url='/day06/1.html'");
PrintWriterout=response.getWriter();
out.write("恭喜你登陆成功,
//模拟:
登陆。
。
。
跳转
/*response.setContentType("text/html;charset=UTF-8");
response.setHeader("refresh","3;url='/day06/1.html'");*/
Stringmsg="
getServletContext().setAttribute("msg",msg);
getServletContext().getRequestDispatcher("/index.jsp").forward(request,response);
1.7expires控制缓存
//页面提交到servlet
//设置缓存1h
response.setDateHeader("expires",System.currentTimeMillis()+1000*3600);
response.getWriter().write("aaaaaaaaa");
1.8重定向
●服务器处理2次请求,地址栏发生变化。
特定场景使用:
如登陆,购物
/*response.setStatus(302);
response.setHeader("location","/day06/1.html");*/
response.sendRedirect("/day06/1.html");
●ServletOuputStream、Printwriter
不能同时使用,转发时需注意;重定向到另外一个servlet就可以
2.Cookie
2.1概念
Ø会话:
当访问web资源之后,通过连接继续请求当前站点的资源,然后关闭浏览器的整个过程。
Ø会话技术:
cookie、session
Øcookie:
将服务器的数据保存到浏览器端的技术
1)服务器要求浏览器保存数据
保存数据:
浏览器
a)IE;将cookie保存到指定目录中,以文件的形式存储
b)火狐或谷歌:
将cookie保存到指定的文件中
2)使用HTTP协议进行通信
3)会话级cookie:
当整个会话结束后,cookie信息将被删除(cookie在内存中)
4)持久化cookie:
将cookie保存到硬盘中
通过:
setMaxAge
c)单位:
秒
d)如果设置的值为零,则进行删除操作。
5)设置Cookie有效目录
通过setPath()
如果没有设置有效路径,默认为servlet发送目录,如:
day07/loginServlet,day07为默认目录
6)request.getCookies();获得当前web项目的所有的cookie信息
e)获得当前浏览器中的cookie
f)获得当前servlet所在目录,以及之上的所有目录下的cookie信息
g)通过setPath可以设置cookie的访问路径
7)在cookie中存放中文
a)编码:
StringreturnData=URLEncoder.encode(data,"UTF-8");
b)解码:
Stringvalue=URLDecoder.decode(c.getValue(),"UTF-8");
cookie的value可以设置多少个字符:
4kb
作业:
完成用户登录(账号、密码,复选框(保存两星期),登录按钮)
2.2如何保存数据
//创建一个cookie
Cookiec=newCookie("name","Computer");
//设置有效路径
c.setPath("/day07");
//设置cookie有效时间:
5分钟,保存在临时目录中,关掉浏览器,也可以在有效时间内拿到数据
c.setMaxAge(5*60);
//通过response对象把cookie数据发送给客户端浏览器
response.addCookie(c);
//删除cookie
2.3显示当前时间
查看PPT及API,学会使用:
response.setContentType("text/html;charset=UTF-8");
Cookie[]cookies=request.getCookies();
for(inti=0;cookies!
=null&&i if(cookies[i].getName().equals("currentTime")){ Stringvalue=cookies[i].getValue(); response.getWriter().write("上次访问时间: "+value); break; } } Stringtime=newDate().toLocaleString(); Cookiecookie=newCookie("currentTime",time); cookie.setMaxAge(1*60); cookie.setPath("/day07"); response.getWriter().write(" 当前时间: "+time); response.addCookie(cookie); 注意: Cookie有效时间要设置 思考: 如何删除Cookie? response.getWriter().write(" CookieDel': Cookiecookie=newCookie("currentTime",""); cookie.setMaxAge(0); cookie.setPath("/day07"); response.addCookie(cookie); 2.4Cookie案例-商品历史记录 2个servlet: 列表显示servlet: 显示列表与访问历史 明细: 商品详细与回写cookie 注意: 显示历史记录10条,最新访问第一个显示 2.5作业 重点: 掌握Session、Cookie的使用; 任务: Cookie+session完成用户自动登陆 3.Session 3.1Session原理 3.2案例 *购买Servlet、结账Servlet、购买/结账链接(页面) *打开2个浏览器,依次访问 *生命周期(getSession/30m没人用才会被服务器销毁) *配置摧毁session: *代码: session.invalidate(); 问题: ●request.getSession(false);什么情况用? ●Request.getSession()服务器怎么知道拿哪个session? 引入: Session原理,session工作基于cookie. PPT图例。 服务器在回写cookie时,没有设置有效期. 3.3如何解决关了浏览器,session中数据不丢失? StringsessinId=request.getSession().getId(); Cookiecookie=newCookie("JSESSIONID",sessinId); cookie.setMaxAge(60*30); cookie.setPath("/day07"); response.addCookie(cookie); 3.4IE禁用Cookie后的session处理 IE禁用: 工具-Internet选项-隐私高级 重新测试: http: //127.0.0.1: 8080/day07/index.html(注意: 用127.0.0.1测试) 解决方案: URL重写 代码: IndexServlet //创建session(一定要写上) request.getSession(); Stringbuy=response.encodeURL("/day07/SessionDemo1"); Stringorder=response.encodeURL("/day07/SessionDemo2"); out.print(" out.print(" 此时,取消IE禁用cookie,刷新页面2次,看源文件变化! encodeURL: 重写条件,根据用户有没有禁用cookie,第一次访问由于直接访问的是servlet,服务器不知道客户端有无禁用cookie,所以会进行url重写;;第二次访问时,由于带了sessionId,就不会重写url; 思考: 禁用cookie后,关了浏览器,数据还有吗? Session选项卡是否共享。 3.5Session购物案例 1.首页列表展示servlet 2.购物处理servlet 3.购物车列表servlet 4.细节: url重写 3.6登陆、注销用户 3.7防表单重复提交 客户端验证: /*varisCommit=false; functioncheckCommit(){ if(! isCommit){ isCommit=true; returntrue; }else{ alert('请勿重复提交! ! '); returnfalse; } }*/ functioncheckCommit(){ document.getElementById('btn').disabled='disabled'; returntrue; } 服务端验证: 1.服务器生成表单和唯一标识发送至页面; 2.页面设置隐藏域,保存唯一标识;提交页面时,带上数据 3.服务器处理用户注册时,拿到页面传过来的唯一标识,与服务器生成的唯一号对比 FormServlet //此处模拟唯一标识的生成 StringgenerateNum=System.currentTimeMillis()+newRandom().nextInt()+""; request.getSession().setAttribute("token",generateNum); request.getRequestDispatcher("/form.jsp").forward(request,response); form.jsp RegisterServlet //返回true表示验证通过,用户为第一次注册,允许其注册 booleanflag=isValid(request); if(! flag){ System.out.println("请不要重复提交! "); return; } //提交一次后,删除标记位; request.getSession().removeAttribute("token"); System.out.println("注册成功: "+name); 3.8验证码效验 4.packagecn.itcast.response; 5. 6.importjava.awt.Color; 7.importjava.awt.Font; 8.importjava.awt.Graphics; 9.importjava.awt.Graphics2D; 10.importjava.awt.image.BufferedImage; 11.importjava.io.IOException; 12.importjava.io.PrintWriter; 13.importjava.util.Random; 14. 15.importjavax.imageio.ImageIO; 16.importjavax.servlet.ServletException; 17.importjavax.servlet.http.HttpServlet; 18.importjavax.servlet.http.HttpServletRequest; 19.importjavax.servlet.http.HttpServletResponse; 20. 21.publicclassResponseServlet2extendsHttpServlet{ 22. 23.privatestaticfinalint
");
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java responsecookiesession