1435124+朱正金+JavaEE实验4Word格式文档下载.docx
- 文档编号:6423453
- 上传时间:2023-05-06
- 格式:DOCX
- 页数:29
- 大小:134.05KB
1435124+朱正金+JavaEE实验4Word格式文档下载.docx
《1435124+朱正金+JavaEE实验4Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《1435124+朱正金+JavaEE实验4Word格式文档下载.docx(29页珍藏版)》请在冰点文库上搜索。
(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("
<
html>
title>
addcookies<
/title>
"
body>
h2>
+
Acookiehasbeensenttobrower<
/h2>
/body>
/html>
}
访问上述Servlet将向客户端写入一个Cookie,执行后可查看客户机对应目录看是否写
了一个文件。
【步骤2】从客户端读取Cookie对象
publicclassGetCookieextendsHttpServlet{
publicvoiddoGet(HttpServletRequest
request,HttpServletResponseresponse)
StringcookieName="
;
StringcookieValue=null;
Cookie[]cookies=request.getCookies();
if(cookies!
=null){
for(inti=0;
i<
cookies.length;
i++){
Cookiecookie=cookies[i];
if(cookie.getName().equals(cookieName))
cookieValue=cookie.getValue();
}response.setContentType("
getcookies<
Acookiehasbeengotfrombrower<
CookieName:
+cookieName+"
br>
CookieValue:
+cookieValue+"
(b)session:
Session存在于服务端对客户端不可见,而cookie存在客户端,sessionId要依赖cookie
进行转发。
当第一次打开浏览器时,浏览器马上分配了一个sessionId给客户端,客户端发
送请求给服务端时就,服务端记录此sessionId在本地,当客户端再次请求服务端时,它就
是根据先前有效的sessionId做出相应的操作。
每次客户端发来请求时,服务端根据cookie
携带的sessionId来区分是哪个用户的会话。
具体使用示例如下:
使用HttpSession对象管理会话。
packagecom.demo;
importjava.util.Date;
publicclassShowSessionextendsHttpServlet{
throwsServletException,IOException{
HttpSessionsession=request.getSession();
Stringheading=null;
IntegeraccessCount=(Integer)session.getAttribute("
accessCount"
if(accessCount==null){
accessCount=newInteger(0);
heading="
Welcome,Newcomer"
}else{
WelcomeBack."
accessCount=newInteger(accessCount.intValue()+1);
session.setAttribute("
accessCount);
PrintWriterout=response.getWriter();
head>
SessionTrackingExample<
/head>
center>
h1>
+heading+"
/h1>
Informationaboutyoursession.<
tableborder='
1'
>
trbgcolor=\"
ffad00\"
th>
InfoType<
Value\n"
tr>
td>
ID<
+session.getId()+"
\n"
CreationTime:
+newDate(session.getCreationTime())+"
Timeoflastaccess:
+newDate(session.getLastAccessedTime())+"
Accessnumber:
+accessCount+"
/table>
/center>
4、验证码生成与使用
(1)验证码生成
在Servlet中生成内存图片对象,并输出到客户的浏览器即可,示例代码如下
(CheckCodeServlet.java,功能实现见注释):
packagecs2015.servlet;
publicclassCheckCodeServletextendsHttpServlet{
privatefinalintLENGTH=4;
publicCheckCodeServlet(){super();
}
protectedvoidprocessRequest(HttpServletRequestrequest,HttpServletResponse
response)
image/jpeg"
//浏览器不缓存
response.setHeader("
Pragma"
"
No-cache"
Cache-Control"
no-cache"
response.setDateHeader("
Expires"
0);
//随机字符集
char[]code={'
0'
'
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;
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<
LENGTH;
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)
if(fc>
255)
fc=255;
if(bc>
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)
processRequest(request,response);
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
...................
(2)配置Servlet
编辑web.xml:
web-app....................................>
servlet>
servlet-name>
CheckCodeServlet<
/servlet-name>
servlet-class>
cs2015.servlet.CheckCodeServlet<
/servlet-class>
/servlet>
servlet-mapping>
url-pattern>
/servlet/CheckCodeServlet<
/url-pattern>
/servlet-mapping>
.........................................
/web-app>
(3)验证码功能的使用
在JSP页面需要验证码位置,嵌入如下代码:
p>
验证码:
<
inputtype="
text"
name="
code"
style="
width:
98px;
height:
16px"
/>
imgsrc='
../servlet/CheckCodeServlet'
onclick="
self.location.reload();
cursor:
pointer"
alt="
如果看不清验证码,请点图片刷新"
align="
middle"
/p>
在WebRoot下,新建一个JSP页面login.jsp,内容如下:
三、实验步骤及实验结果记录
1、基于Cookie实现对用户表单信息的缓存,并将缓存结果返回用户浏览器,
业务逻辑说明:
(1)接收来自客户端的信息
(2)保存在cookie对象中
(3)添加到cookie到resopnse中
(4)页面转发到index页面的同时将cookie一并返回给浏览器
实现步骤:
登陆页面的设计:
login.jsp
处理登陆表单信息的servlet:
ServletCookie.java
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);
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
登陆表单页面:
存储登陆表单的JavaBean:
User.java
publicclassUser{
privateStringusername="
privateStringpassword="
publicUser(Stringusername,Stringpassword){
this.username=username;
this.password=password;
publicvoidsetUsername(Stringusername){
publicStringgetUsername(){
returnusername;
publicvoidsetPassword(Stringpassword){
publicStringgetPassword(){
returnpassword;
ServletSession.java
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 1435124 朱正金 JavaEE 实验