cookie和jsp入门.docx

上传人:b****2 文档编号:17183193 上传时间:2023-04-24 格式:DOCX 页数:22 大小:22.81KB
下载 相关 举报
cookie和jsp入门.docx_第1页
第1页 / 共22页
cookie和jsp入门.docx_第2页
第2页 / 共22页
cookie和jsp入门.docx_第3页
第3页 / 共22页
cookie和jsp入门.docx_第4页
第4页 / 共22页
cookie和jsp入门.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

cookie和jsp入门.docx

《cookie和jsp入门.docx》由会员分享,可在线阅读,更多相关《cookie和jsp入门.docx(22页珍藏版)》请在冰豆网上搜索。

cookie和jsp入门.docx

cookie和jsp入门

Jsp页面的格式

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

<%

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

">

Inserttitlehere

JSP的全称为JavaServerPages,译为Java服务器端页面。

其根本是一个简化的Servlet,实现了HTML语法中的Java扩展内容。

JSP与Servlet一样是运行在服务器端的,通常返回给客户端一个HTML页面内容。

说白了一个JSP就是由HTML代码、Java代码及JSP动作标签组成。

JSP与Servlet一样,都是由Tomcat服务器运行的。

Tomcat服务器是如何运行JSP页面的呢?

具体流程如下:

ØJSP运行的文件存储在Tomcat服务器安装目录的work目录中。

Ø由上图我们可以知道,JSP被Tomcat服务器生成Java文件,并编译成Class文件后运行。

Tomcat服务器将JSP页面生成Java文件的命名规则为:

Ø通过HttpJspBase类的源代码,我们知道该类继承于HttpServlet类。

所以,JSP其实就是Servlet,与Servlet一样具有生命周期方法_jspInit()、_jspSerivce()和_jspDestroy()。

SP本质上就是简化了的Servlet,但是还是有一些区别的:

ØJSP与Servlet的创建方式不同。

ØJSP更适合生成动态HTML页面,Servlet更适合来控制逻辑处理。

ØServlet需要配置web.xml文件,JSP不需要配置任何内容。

ØJSP中内置了九大对象,Servlet中没有内置对象。

ØServlet必须编译之后运行,而JSP不需要编译。

Ø由于JSP需要编译成Servlet文件后再运行,所以JSP的运行速度要比Servlet慢。

Cookie是由服务器端创建的,然后由服务器端发送给客户端,客户端以键值对形式存储Cookie,并标注Cookie的来源。

客户端再次访问服务器端时,存储的Cookie会保存在请求协议中,服务器端可以获取上次存储的缓存文件内容。

Cookie的用途:

Ø管理浏览网站的人数(其中包含有多少人访问过,多少人是新用户等)

Ø电子商城中购物车功能(每买一样商品,保存一个Cookie)

Ø用户自动登录功能(第一次登录时,将用户名和密码存储在Cookie)

Cookie的缺点:

Ø多人共用一台计算机(例如导致用户名和密码不安全等问题)。

ØCookie被删除时,利用Cookie统计用户数量出现偏差。

Ø一人使用多台计算机(网站会将看成多个用户等问题)

ØCookie会被附加在每次Http请求协议中,增加流量。

ØCookie使用明文(未加密)传递的,安全性低。

ØCookie的大小限制在4KB左右,无法存储复杂需求。

Cookie

创建一个Servlet用于向客户端发送Cookie信息

packageservlet;

importjava.io.IOException;

importjava.util.UUID;

importjavax.servlet.ServletException;

importjavax.servlet.http.Cookie;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclasscookieextendsHttpServlet{

/**

*

*/

privatestaticfinallongserialVersionUID=-5413710647661656169L;

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

//1利用UUID生成一个随机字符串

Stringid=UUID.randomUUID().toString();

//2创建Cookies实例对象

Cookiecookie=newCookie("id",id);

//3将Cookies实例对象,添加到Response对象中

resp.addCookie(cookie);

}

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

super.doPost(req,resp);

}

}

Ø创建另一个Servlet用于获取上次服务器端向客户端发送的Cookie信息。

packageservlet;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.Cookie;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclasscookierextendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

resp.setContentType("text/html;charset=utf-8");

//1通过Request对象获取上次服务器端发送的Cookie信息

Cookie[]cookies=req.getCookies();

//2判断Request对象中的Cookie是否存在

if(cookies!

=null){

//3遍历Request对象中的所有Cookie

for(Cookiecookie:

cookies){

//4获取每一个Cookie的名称

Stringname=cookie.getName();

//5判断Cookie的名称是否存在是id

if(name.equals("id")){

//6打印Cookie名称为id的Cookie值

resp.getWriter().println("你的ID是"+cookie.getValue());

}

}

}

}

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

super.doPost(req,resp);

}

}

配置xml

xmlversion="1.0"encoding="UTF-8"?

>

xmlns="

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

cookie

app.java.cookie.cookie

cookier

app.java.cookie.cookier

cookie

/cookie1

在浏览器地址栏输入http:

//localhost:

8080/10_cookies/cookie1

cookier

/cookie2

要把Cookie发送到客户端,Servlet先要调用newCookie(name,value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。

  要从客户端读入Cookie,Servlet应该调用request.getCookies(),getCookies()方法返回一个Cookie对象的数组。

在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值。

1.1. 显示上次访问时间案例

xmlversion="1.0"encoding="UTF-8"?

>

xmlns="

xmlns:

xsi="http:

//www.w3.org/2001/XMLSchema-instance"

xsi:

schemaLocation="

CookieServlet3

app.java.cookie.CookieServlet3

CookieServlet3

/cookie3

packageservlet;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.Date;

importjavax.servlet.ServletException;

importjavax.servlet.http.Cookie;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassCookieServlet3extendsHttpServlet{

@Override

protectedvoiddoGet(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

resp.setContentType("text/html;charset=utf-8");

PrintWriterout=resp.getWriter();

//1通过Request对象获取请求中的Cookies

Cookie[]cookies=req.getCookies();

//2判断请求中的Cookies是否存在

if(cookies!

=null){

//3遍历所有Cookies

for(Cookiecookie:

cookies){

//4获取每一个Cookies的名称

Stringname=cookie.getName();

//5判断是否存在一个名为"lastvisit"的Cookie

if(name.equals("lastvisit")){

//如果存在,说明不是第一次访问,显示上次访问的时间.

out.println("

你上次访问的时间是"+cookie.getValue()+"

");

}

}

}else{

//如果不存在,说明是第一次访问,显示欢迎信息.

out.println("

欢迎访问XXX网站.

");

}

//创建用于显示最后一次访问时间的Cookie实例对象

Cookiecookie=newCookie("lastvisit",newDate().toString());

//将Cookie实例对象添加到Response对象中

resp.addCookie(cookie);

}

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

super.doPost(req,resp);

}

}

Ø打开浏览器,在浏览器地址栏输入http:

//localhost:

8080/10_cookies/cookie3。

Ø设置Cookie的有效访问路径

✧设置Cookie的有效访问路径,使用setPath()方法。

✧默认情况下,Cookie的有效访问路径为当前Web应用程序的根目录“/10_cookies”(Web应用程序的内部路径)。

✧默认情况下,生成的持久Cookie文件的名称为有效访问路径(例如10_cookies/)。

✧设置setPath(“/”)表示Cookie的有效访问路径为当前Web应用程序下的所有目录。

✧请求资源路径与Cookie的有效访问路径必须一致。

//创建Cookie实例对象

Cookiecookie=newCookie("id",newDate().toString());

//设置Cookie的有效时间

cookie.setMaxAge(60*60);

//设置Cookie的有效访问路径

cookie.setPath("/abc");

//将Cookie实例对象添加到Response对象中

response.addCookie(cookie);

这时再次访问相同资源路径时,由于访问资源路径为http:

//localhost:

8080/10_cookies,与Cookie的有效访问路径不一致,导致Cookie失效。

Ø设置Cookie的有效域名

✧利用setDomain()方法设置Cookies的有效域名,例如setDomain(“”)。

✧大部分的浏览器不支持setDomain()方法,因为可能A网站生成B网站的域名Cookie(第三方Cookie)。

Ø删除持久Cookie

✧可以将Cookie的最大有效时间设置为0。

注意的是删除Cookie时,有效路径必须一致!

1.2.商品浏览记录案例

Show,jsp

<%@pagelanguage="java"contentType="text/html;charset=UTF-8"

pageEncoding="UTF-8"%>

DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""http:

//www.w3.org/TR/html4/loose.dtd">

MyJSP'Show.jsp'startingpage

--商品列表-->

商品列表

id=1">Java编程思想

id=2">Java设计模式

id=3">Java语言入门

id=4">数据结构和算法

id=5">MySQL数据库

--浏览记录-->

浏览记录

清空记录

showServlet.java

packageservlet;

importjava.io.IOException;

importjavax.servlet.ServletException;

importjavax.servlet.http.Cookie;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassShowServletextendsHttpServlet{

@Override

protectedvoiddoPost(HttpServletRequestreq,HttpServletResponseresp)throwsServletException,IOException{

//TODOAuto-generatedmethodstub

//1通过Request对象获取请求参数ID

Stringid=req.getParameter("id");

//2通过Request对象获取Cookie信息

Cookie[]cookies=req.getCookies();

//3判断请求中的Cookies是否存在

if(cookies!

=null){

//4遍历所有Cookies

for(Cookiecookie:

cookies){

//5获取每一个Cookies的名称

Stringname=cookie.getName();

//6判断是否存在一个名为"history"的Cookie

if(name.equals("history")){//存在名为"history"的Cookie

//获取Cookie的value值

Stringvalue=cookie.getValue();

//将Cookie的value值以","切割

String[]ids=value.split(",");

//遍历所有书籍ID

for(

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

当前位置:首页 > 高等教育 > 院校资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1