A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

第11章WEB11-Cookie&Session
1.1 上次课内容回顾:
[AppleScript] 纯文本查看 复制代码
Response
* 通过response设置状态码:setStatus(int status);
* 通过response设置响应头:setHeader(String name,String value);,setIntHeader(String name,int value),setDateHeader(String name,long date);
* 通过response设置响应体:getOutputStream(),getWriter();
* response的其他的API:
     * sendRedirect(String path);
* response输出中文的乱码问题:
     * 字节流输出中文:
         * 设置浏览器的字符集编码.   response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
         * 设置输出内容的字节数组的字符集编码.	“”.getBytes(“UTF-8”);
     * 字符流输出中文:
         * 设置浏览器字符集编码.	response.setHeader(“Content-Type”,”text/html;charset=UTF-8”);
         * 设置response的缓冲区的编码.	response.setCharacterEncoding(“UTF-8”);
* response完成了文件下载功能:
 
Request
* 使用request获得客户机的信息. getRemoteAddr(),getMethod(),getRequestURI(),getRequestURL()
* 获得请求参数:getParameter(),getParameterValues(),getParameterMap()
* 作为域对象存取数据:setAttribute(),getAttribute(),removeAttribute();
* 接收参数的中文乱码的处理:
    * GET	:new String(“”.getBytes(“ISO-8859-1”),”UTF-8”)
    * POST	:request.setCharacterEncoding(“UTF-8”);
* request何时创建和销毁的?
    * 创建:从客户端向服务器发送请求.那么服务器创建一个request对象.
    * 销毁:服务器为这次请求作出了响应之后,服务器就会销毁request对象.
    * 作用范围:一次请求.
* 转发和重定向区别?
    * 转发是一次请求一次响应,重定向两次请求和两次响应.
    * 转发地址栏不变,重定向会变化.
    * 转发的路径不需要加工程名,重定向需要加工程名.
    * 转发只能在本网站内部,重定向可以定向到任何网站.
1.2 案例一:记录用户的上次登陆访问时间.1.2.1 需求:
[AppleScript] 纯文本查看 复制代码
用户登录完成后,显示您是第x位访问的用户,您的上次访问时间是:yyyy-MM-dd.
* 如果第一次访问的话,只显示您是第x位用户.
* 如果不是第一次访问的话,显示您是第x位访问的用户,您的上次访问时间是:yyyy-MM-dd.
1.2.2 分析:1.2.2.1 技术分析:
【会话技术】
[AppleScript] 纯文本查看 复制代码
Ø 什么是会话	:用户打开一个浏览器访问页面,访问网站的很多页面,访问完成后将浏览器关闭的过程称为是一次会话.
Ø 常见的会话技术:
* Cookie	:将数据保存到客户端浏览器.
* Session	:将数据保存到服务器端.
Ø 为什么使用会话技术?
* 私有的数据,购物信息数据保存在会话技术中.
参见图一和图二
Ø 使用会话技术:
【Cookie技术的使用】
[AppleScript] 纯文本查看 复制代码
Ø 向浏览器保存数据:
HttpServletResponse有一个方法:
* void addCookie(Cookie cookie);
Ø 获得浏览器带过来的Cookie:
HttpServletRequest有一个方法:
* Cookie[] getCookies();
Ø 创建一个Cookie对象:
* Cookie(String name,String value);
【JSP的简单概述】
[AppleScript] 纯文本查看 复制代码
Ø 什么是JSP	:Java Server Pages(Java服务器端页面).JSP = Java代码 + HTML的元素 + JSP内置东西
Ø SUN公司为什么推出JSP动态网页开发技术:
* SUN公司推出的Servlet技术进行动态网页开发.发现Servlet自身有不足没有办法与ASP,PHP技术竞争.想在动态网页中输出表单.在Servlet中获得PrintWriter out = response.getWriter();
* out.println(“<form action=’’ method=’’>”);
* out.println(“</form>”);
* SUN又推出了动态的网页开发技术就是JSP.
Ø JSP的执行过程:
* JSP会被翻译成Servlet,编译成class进行执行的.
Ø JSP的嵌入Java代码:JSP的脚本元素
* <%!    %>	:翻译成类中的成员部分. 定义变量,定义方法,定义类.Servlet是线程不安全的,尽量少在类中定义成员属性!!
* <%     %>	:翻译成类的service方法内部的内容. 定义变量,定义类,直接写代码块.
* <%=    %>	:翻译成service方法内部的out.print();
1.2.2.2 步骤分析:
【步骤一】:准备登陆的案例.
【步骤二】:在统计人数的Servlet中.判断是否是第一次访问.
【步骤三】:根据是否是第一次显示不同的信息,同时将当前的时候保存到Cookie中.
1.2.3 代码实现
[AppleScript] 纯文本查看 复制代码
public class CountServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
 
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
Integer count = (Integer) this.getServletContext().getAttribute("count");
//	response.getWriter().println("<h1>现在网站被访问的次数为:"+count+"</h1>");
/**
 * 获得浏览器中带过来的所有的Cookie信息,从数组中查找有没有指定名称的Cookie
 * 判断用户是否是第一次访问:(从数组中没有找到指定名称的Cookie)
 * * 如果是第一次:显示欢迎,记录当前访问的时间存入到Cookie中.
 * * 如果不是第一次:显示欢迎,上一次访问时间,同时记录当前访问的时间存入到Cookie中。
 */
// 获得浏览器带过来的所有的Cookie:
Cookie[] cookies = request.getCookies();
// 从数组中查找指定名称的Cookie:
Cookie cookie = CookieUtils.findCookie(cookies, "lastVisit");
// 判断是否是第一次:
if(cookie == null){
// 第一次访问
response.getWriter().println("您是第"+count+"位访客!");
}else{
// 不是第一次
Long l = Long.parseLong(cookie.getValue());
Date d = new Date(l);
response.getWriter().println("您是第"+count+"位访客! 上次访问时间是:"+d.toLocaleString());
}
// 创建一个Cookie对象:
Cookie c = new Cookie("lastVisit",""+System.currentTimeMillis());
// 保存到浏览器端:
response.addCookie(c);
}
 
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
 
}
1.2.4 总结:1.2.4.1 Cookie的常用API:
[AppleScript] 纯文本查看 复制代码
Ø Cookie的常用的API:
* getName();
* getValue();
* setDomain(String domain); -- 设置Cookie的有效域名. //  [url]www.baidu.com[/url]  music.baidu.com
* setPath(String path); -- 设置Cookie的有效路径.
* setMaxAge(int maxAge); -- 设置Cookie的有效时间.
 
Ø Cookie的分类有关:
* 会话级别的Cookie:默认的Cookie.关闭浏览器Cookie就会销毁.
* 持久级别的Cookie:可以设置Cookie的有效时间.那么关闭浏览器Cookie还会存在. 手动销毁持久性Cookie. setMaxAge(0)---前提是有效路径必须一致.


1 个回复

正序浏览
您需要登录后才可以回帖 登录 | 加入黑马