1、cookie和jsp入门Jsp页面的格式base href=Insert title here JSP的全称为Java Server Pages,译为Java服务器端页面。其根本是一个简化的Servlet,实现了HTML语法中的Java扩展内容。JSP与Servlet一样是运行在服务器端的,通常返回给客户端一个HTML页面内容。说白了一个JSP就是由HTML代码、Java代码及JSP动作标签组成。JSP与Servlet一样,都是由Tomcat服务器运行的。Tomcat服务器是如何运行JSP页面的呢?具体流程如下: JSP运行的文件存储在Tomcat服务器安装目录的work目录中。 由上图我们可
2、以知道,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不
3、需要配置任何内容。 JSP中内置了九大对象,Servlet中没有内置对象。 Servlet必须编译之后运行,而JSP不需要编译。 由于JSP需要编译成Servlet文件后再运行,所以JSP的运行速度要比Servlet慢。Cookie是由服务器端创建的,然后由服务器端发送给客户端,客户端以键值对形式存储Cookie,并标注Cookie的来源。客户端再次访问服务器端时,存储的Cookie会保存在请求协议中,服务器端可以获取上次存储的缓存文件内容。Cookie的用途: 管理浏览网站的人数(其中包含有多少人访问过,多少人是新用户等) 电子商城中购物车功能(每买一样商品,保存一个Cookie) 用户自动
4、登录功能(第一次登录时,将用户名和密码存储在Cookie)Cookie的缺点: 多人共用一台计算机(例如导致用户名和密码不安全等问题)。 Cookie被删除时,利用Cookie统计用户数量出现偏差。 一人使用多台计算机(网站会将看成多个用户等问题) Cookie会被附加在每次Http请求协议中,增加流量。 Cookie使用明文(未加密)传递的,安全性低。 Cookie的大小限制在4KB左右,无法存储复杂需求。Cookie创建一个Servlet用于向客户端发送Cookie信息package servlet;import java.io.IOException;import java.util.U
5、UID;import javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class cookie extends HttpServlet /* * */ private static final long serialVersionUID = -54
6、13710647661656169L; Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException / TODO Auto-generated method stub /1 利用UUID生成一个随机字符串 String id = UUID.randomUUID().toString(); /2 创建Cookies实例对象 Cookie cookie = new Cookie(id, id); /3 将Cookies实例对象
7、,添加到Response对象中 resp.addCookie(cookie); Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException / TODO Auto-generated method stub super.doPost(req, resp); 创建另一个Servlet用于获取上次服务器端向客户端发送的Cookie信息。package servlet;import java.io.IOException;im
8、port javax.servlet.ServletException;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class cookier extends HttpServlet Override protected void doGet(HttpServletRequest req, HttpSer
9、vletResponse resp) throws ServletException, IOException / TODO Auto-generated method stub resp.setContentType(text/html;charset=utf-8); /1 通过Request对象获取上次服务器端发送的Cookie信息 Cookie cookies = req.getCookies(); /2 判断Request对象中的Cookie是否存在 if(cookies != null) /3 遍历Request对象中的所有Cookiefor (Cookie cookie : coo
10、kies) /4 获取每一个Cookie的名称 String name = cookie.getName(); /5 判断Cookie的名称是否存在是id if(name.equals(id) /6 打印Cookie名称为id的Cookie值 resp.getWriter().println(你的ID是+cookie.getValue(); Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException / TODO Aut
11、o-generated method stub super.doPost(req, resp); 配置xmlweb-app version=2.5 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 要把Cook
12、ie发送到客户端,Servlet先要调用new Cookie(name,value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。要从客户端读入Cookie,Servlet应该调用request.getCookies(),getCookies()方法返回一个Cookie 对象的数组。在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定 名字关联的值。1.1. 显示上次访问时间案例web-app
13、 version=2.5 xmlns= xmlns:xsi=http:/www.w3.org/2001/XMLSchema-instance xsi:schemaLocation= CookieServlet3 app.java.cookie.CookieServlet3 CookieServlet3 /cookie3 package servlet;import java.io.IOException;import java.io.PrintWriter;import java.util.Date;import javax.servlet.ServletException;import ja
14、vax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class CookieServlet3 extends HttpServlet Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletExcep
15、tion, IOException / TODO Auto-generated method stub resp.setContentType(text/html;charset=utf-8); PrintWriter out = resp.getWriter(); /1 通过Request对象获取请求中的Cookies Cookie cookies = req.getCookies(); /2 判断请求中的Cookies是否存在 if(cookies != null) /3 遍历所有Cookies for (Cookie cookie : cookies) /4 获取每一个Cookies的名
16、称 String name = cookie.getName(); /5 判断是否存在一个名为lastvisit的Cookie if(name.equals(lastvisit) / 如果存在,说明不是第一次访问,显示上次访问的时间. out.println(你上次访问的时间是+cookie.getValue()+); else / 如果不存在,说明是第一次访问,显示欢迎信息. out.println(欢迎访问XXX网站.); / 创建用于显示最后一次访问时间的Cookie实例对象 Cookie cookie = new Cookie(lastvisit, new Date().toStrin
17、g(); / 将Cookie实例对象添加到Response对象中 resp.addCookie(cookie); Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException / TODO Auto-generated method stub super.doPost(req, resp); 打开浏览器,在浏览器地址栏输入http:/localhost:8080/10_cookies/cookie3。 设置Cookie的有
18、效访问路径 设置Cookie的有效访问路径,使用setPath()方法。 默认情况下,Cookie的有效访问路径为当前Web应用程序的根目录“/10_cookies”(Web应用程序的内部路径)。 默认情况下,生成的持久Cookie文件的名称为有效访问路径(例如10_cookies/)。 设置setPath(“/”)表示Cookie的有效访问路径为当前Web应用程序下的所有目录。 请求资源路径与Cookie的有效访问路径必须一致。/ 创建Cookie实例对象Cookie cookie = new Cookie(id, new Date().toString();/ 设置Cookie的有效时间c
19、ookie.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网站的
20、域名Cookie(第三方Cookie)。 删除持久Cookie 可以将Cookie的最大有效时间设置为0。注意的是删除Cookie时,有效路径必须一致!1.2. 商品浏览记录案例Show,jspMy JSP Show.jsp starting page 商品列表 Java编程思想 Java设计模式 Java语言入门 数据结构和算法 MySQL数据库 浏览记录 清空记录showServlet.javapackage servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servl
21、et.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class ShowServlet extends HttpServlet Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOExc
22、eption / TODO Auto-generated method stub /1 通过Request对象获取请求参数ID String id = req.getParameter(id); /2 通过Request对象获取Cookie信息 Cookie cookies = req.getCookies(); /3 判断请求中的Cookies是否存在 if(cookies != null) /4 遍历所有Cookies for (Cookie cookie : cookies) /5 获取每一个Cookies的名称 String name = cookie.getName(); /6 判断是否存在一个名为history的Cookie if(name.equals(history)/ 存在名为history的Cookie / 获取Cookie的value值 String value = cookie.getValue(); / 将Cookie的value值以,切割 String ids = value.split(,); / 遍历所有书籍ID for (
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1