1435124+朱正金+JavaEE实验4.docx

上传人:b****4 文档编号:4044234 上传时间:2023-05-06 格式:DOCX 页数:29 大小:134.05KB
下载 相关 举报
1435124+朱正金+JavaEE实验4.docx_第1页
第1页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第2页
第2页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第3页
第3页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第4页
第4页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第5页
第5页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第6页
第6页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第7页
第7页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第8页
第8页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第9页
第9页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第10页
第10页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第11页
第11页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第12页
第12页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第13页
第13页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第14页
第14页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第15页
第15页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第16页
第16页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第17页
第17页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第18页
第18页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第19页
第19页 / 共29页
1435124+朱正金+JavaEE实验4.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

1435124+朱正金+JavaEE实验4.docx

《1435124+朱正金+JavaEE实验4.docx》由会员分享,可在线阅读,更多相关《1435124+朱正金+JavaEE实验4.docx(29页珍藏版)》请在冰点文库上搜索。

1435124+朱正金+JavaEE实验4.docx

1435124+朱正金+JavaEE实验4

《JAVA EE开发技术基础》上机实验报告

实验名称

实验四、客户请求的处理与服务器响应的生成

实验时间

2017.3.30 

学生姓名

朱正金

班级

Z1411

学号

14200135124

指导教师

陆悠

批阅教师

成绩

一、实验目的

1.掌握Servlet与JSP中,用户请求的获取、解析方法;

2.掌握会话及跟踪方法(Session)、Cookies的使用;

3.掌握生成图象、Excel表格的方法

4.掌握访问数据库的方法。

二、实验内容

1、模拟Web网站缓存用户的各类偏好设置情况,在Web页面登陆访问服务器后,服

务器将用户在登录界面提交的表单数据进行缓存,进而将缓存数据返回给浏览器,供下一步

操作处理。

2、使用Cookie和Session两种方式实现。

3、基本概念和原理:

(a)cookie:

Cookie中文译文是饼干的意思,cookie是保存会话数据的一种技术,其容量有限;有

生命周期,根据需求设置cookie有效期如果不进行设置的话,数据保存至浏览器关闭。

保存在浏览器的缓存中,数据是明文显示的通常只保存非敏感信息,未加密的数据会充分暴

露给外界。

Cookie通常是保存用户偏好设置、用户名、日期时间等数据。

Cookie具体工作

原理:

(1)浏览器向服务器发送请求;

(2)服务器接收请求,生成一个cookie对象保存"标识"

数据;(3)然后把cookie对象放在响应头,一并发回浏览器;(4)浏览器取出cookie对象的数

据保存在浏览器的缓存中;(5)再次访问时请求头携带cookie数据发送到服务器;(6)服务器

根据cookie的数据作出相应处理

cookie的应用场景通常是使用在“记住登陆状态”,即一次访问成功,在一定时间内可

自动登陆,实现细节:

比如登陆京东网站,首次登陆需要账号密码,登陆成功后手误关闭了

浏览器,再次登陆京东时发现登陆状态还在,无需重输账号密码。

即从login页面再次跳转

到index页面时,servlet取出cookie的数据做匹配,配对成功则将【请求转发】给index页

面,跳转成功。

Cookie使用方法简介:

使用Cookie跟踪会话。

使用Cookie跟踪会话涉及到向客户端写

入Cookie和从客户端读取Cookie,具体做法如下:

【步骤1】向客户端写入Cookie对象

packagetest;

importjava.io.*;importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassSendCookieextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)

throwsIOException,ServletException{

CookieuserCookie=newCookie("user","uid1234");

userCookie.setMaxAge(60*60*24*7);

response.addCookie(userCookie);

response.setContentType("text/html");

PrintWriterout=response.getWriter();

out.println("addcookies");

out.println("

"+

"Acookiehasbeensenttobrower

");

out.println("");

}

}

访问上述Servlet将向客户端写入一个Cookie,执行后可查看客户机对应目录看是否写

了一个文件。

【步骤2】从客户端读取Cookie对象

packagetest;

importjava.io.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassGetCookieextendsHttpServlet{

publicvoiddoGet(HttpServletRequest

request,HttpServletResponseresponse)

throwsIOException,ServletException{

StringcookieName="user";

StringcookieValue=null;

Cookie[]cookies=request.getCookies();

if(cookies!

=null){

for(inti=0;i

Cookiecookie=cookies[i];

if(cookie.getName().equals(cookieName))

cookieValue=cookie.getValue();

}

}response.setContentType("text/html");

PrintWriterout=response.getWriter();

out.println("getcookies");

out.println("

Acookiehasbeengotfrombrower

");

out.println("CookieName:

"+cookieName+"
");

out.println("CookieValue:

"+cookieValue+"
");

out.println("");

}

}

(b)session:

Session存在于服务端对客户端不可见,而cookie存在客户端,sessionId要依赖cookie

进行转发。

当第一次打开浏览器时,浏览器马上分配了一个sessionId给客户端,客户端发

送请求给服务端时就,服务端记录此sessionId在本地,当客户端再次请求服务端时,它就

是根据先前有效的sessionId做出相应的操作。

每次客户端发来请求时,服务端根据cookie

携带的sessionId来区分是哪个用户的会话。

具体使用示例如下:

使用HttpSession对象管理会话。

packagecom.demo;

importjava.io.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

importjava.util.Date;

publicclassShowSessionextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("text/html");

HttpSessionsession=request.getSession();

Stringheading=null;

IntegeraccessCount=(Integer)session.getAttribute("accessCount");

if(accessCount==null){

accessCount=newInteger(0);

heading="Welcome,Newcomer";

}else{

heading="WelcomeBack.";

accessCount=newInteger(accessCount.intValue()+1);

}

session.setAttribute("accessCount",accessCount);PrintWriterout=response.getWriter();

out.println("");

out.println("SessionTrackingExample");

out.println("

");

out.println("

"+heading+"

");

out.println("

Informationaboutyoursession.

");

out.println("");

out.println("InfoTypeValue\n");

out.println("ID"+session.getId()+"\n");

out.println("CreationTime:

");

out.println(""+newDate(session.getCreationTime())+"\n");

out.println("Timeoflastaccess:

");

out.println(""+newDate(session.getLastAccessedTime())+"\n");

out.println("Accessnumber:

"+accessCount+"\n");

out.println("

");

}

}

4、验证码生成与使用

(1)验证码生成

在Servlet中生成内存图片对象,并输出到客户的浏览器即可,示例代码如下

(CheckCodeServlet.java,功能实现见注释):

packagecs2015.servlet;

publicclassCheckCodeServletextendsHttpServlet{

privatefinalintLENGTH=4;

publicCheckCodeServlet(){super();}

protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponse

response)

throwsServletException,IOException{

response.setContentType("image/jpeg");//浏览器不缓存

response.setHeader("Pragma","No-cache");

response.setHeader("Cache-Control","no-cache");

response.setDateHeader("Expires",0);

//随机字符集

char[]code={'0','1','2','3','4','5','6','7','8','9',

'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o',

'p','q','r','s','t','u','v','w','x','y','z',

'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',

'P','Q','R','S','T','U','V','W','X','Y','Z'};

String[]Fonts={"TimesNewRoman","Verdana",

"ArialNarrow",

"Candara",

"CalifornianFB",

"BrushScriptMT"};

intwidth=60,height=30;

//内存图像对象

BufferedImageimage=newBufferedImage(width,height,

BufferedImage.TYPE_INT_RGB);

//绘图区图形对象

Graphicsg=image.getGraphics();

//随机数发生器

Randomrandom=newRandom();

//绘图填充区域

g.fillRect(0,0,width,height);

//设置颜色

g.setColor(getRandColor(160,200));

//取随机颜色、起始点位置,绘制线条

for(inti=0;i<155;i++)

{

intx=random.nextInt(width);

inty=random.nextInt(height);

intxl=random.nextInt(12);

intyl=random.nextInt(12);

g.drawLine(x,y,x+xl,y+yl);//绘直线

}

StringsRand="";

intt;

//获取验证码字符,取随机颜色、绘图位置,输出字符

for(inti=0;i

t=random.nextInt(code.length);

Stringrand=""+code[t];//取出随机字符

sRand+=rand;//设置字符输出的颜色

g.setColor(new

Color(20+random.nextInt(110),20+random.nextInt(110),20+random.nextInt(110)));

//设置字符输出的字体及大小

g.setFont(new

Font(Fonts[random.nextInt(5)],Font.PLAIN,15+random.nextInt(Fonts.length)));

//在随机位置输出

g.drawString(rand,13*i+6,15+random.nextInt(10));

}

//验证码写入Session保存,验证时,从Session读取

request.getSession().setAttribute("ValidateCode",sRand);

//销毁图形对象

g.dispose();

//通过response对象输出JPEG格式的图像

try{

ImageIO.write(image,"JPEG",response.getOutputStream());

}catch(IOExceptione){}

response.flushBuffer();

}

privateColorgetRandColor(intfc,intbc)

{

Randomrandom=newRandom();

if(fc>255)

fc=255;

if(bc>255)

bc=255;

intr=fc+random.nextInt(bc-fc);

intg=fc+random.nextInt(bc-fc);

intb=fc+random.nextInt(bc-fc);

returnnewColor(r,g,b);

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

processRequest(request,response);

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

processRequest(request,response);

}

...................

}

(2)配置Servlet

编辑web.xml:

CheckCodeServlet

cs2015.servlet.CheckCodeServlet

CheckCodeServlet

/servlet/CheckCodeServlet

.........................................

(3)验证码功能的使用

在JSP页面需要验证码位置,嵌入如下代码:

验证码:

98px;height:

16px"/>

在WebRoot下,新建一个JSP页面login.jsp,内容如下:

三、实验步骤及实验结果记录

1、基于Cookie实现对用户表单信息的缓存,并将缓存结果返回用户浏览器,

业务逻辑说明:

(1)接收来自客户端的信息

(2)保存在cookie对象中

(3)添加到cookie到resopnse中

(4)页面转发到index页面的同时将cookie一并返回给浏览器

实现步骤:

登陆页面的设计:

login.jsp

处理登陆表单信息的servlet:

ServletCookie.java

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

doGet(request,response);

Stringusername=request.getParameter("username");

Stringpassword=request.getParameter("password");

Cookiecookie=newCookie(username,password);

cookie.setPath("");

cookie.setComment("thisiscookie");

response.addCookie(cookie);

request.getRequestDispatcher("/index.jsp").forward(request,response);

}

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.getWriter().append("Serveredat").append(request.getContextPath());

}

转向页面:

index.jsp

部署运行验证:

(1)启动Tomcat打开login.jsp:

表单未提交前RequestHeader请求头为空;

(2)输入用户名,密码点击【提交】servlet接收到请求头信息,将用户名

密码存储在cookie中,servlet将index页面和cookie一并返回给浏览器

(3)查看浏览器已经接收到的来自服务器的Cooike

2、基于Session实现对用户表单信息的缓存,并将缓存结果返回用户浏览器,

业务逻辑:

(1)获取表单提交的数据

(2)保存在User实体类中,获取当前登陆时间

(3)session储存User对象、登陆时间

(4)请求转发给index.jsp

实现步骤:

登陆表单页面:

login.jsp

存储登陆表单的JavaBean:

User.java

publicclassUser{

privateStringusername="";

privateStringpassword="";

publicUser(Stringusername,Stringpassword){

this.username=username;

this.password=password;

}

publicvoidsetUsername(Stringusername){

this.username=username;

}

publicStringgetUsername(){

returnusername;

}

publicvoidsetPassword(Stringpassword){

this.password=password;

}

publicStringgetPassword(){

returnpassword;

}

}

处理登陆表单信息的servlet:

ServletSession.java

publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)

throwsServletException,IOException{

response.getWriter().append("Serveredat").append(request.getContextPath());

}

publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2