这里写目录标题
- 1 Cookie
 - 1.1 会话介绍
 - 1.2 Cookie 介绍
 - 1.3 Cookie 属性
 - 1.4 Cookie 方法
 - 1.4.1 Cookie 添加和获取
 
- 1.5 Cookie 的使用
 - 1.6 Cookie 的细节
 
- 2 Session
 - 2.1 HttpSession 介绍
 - 2.2 HttpSession 常用方法
 - 2.3 HttpSession 获取
 - 2.4 HttpSession 的使用
 - 2.5 HttpSession 的细节
 
- 3 JSP
 - 3.1 JSP 介绍
 - 3.2 JSP 快速入门
 - 3.3 JSP 执行过程
 - 3.4 JSP 语法
 - 3.5 JSP 指令
 - 3.6 JSP 细节
 - 3.7 四大域对象
 - 3.8 MVC 模型
 
1 Cookie
1.1 会话介绍
- 会话:浏览器和服务器之间的多次请求和响应
 - 会话过程中所产生的一些数据,可以通过会话技术(Cookie 和 Session)保存
 
1.2 Cookie 介绍
- Cookie:客户端会话管理技术
把要贡献的数据保存到客户端中
每次请求时,把会话信息带到服务器端,从而实现多次请求的数据共享 - 作用:可以保存客户端访问网站的相关内容,从而保证每次访问时先从本地缓存中获取,以此提高效率
 
1.3 Cookie 属性

1.4 Cookie 方法

1.4.1 Cookie 添加和获取
- 添加:HttpServletResponse

 - 获取:HttpServletRequest

 
1.5 Cookie 的使用
- 需求说明
通过 Cookie 记录最后访问时间,并在浏览器上显示出来 - 最终目的
掌握 Cookie 的基本使用,从创建到添加客户端,再到从服务器获取 - 代码演示:
 
package com.txt.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=UTF-8");
        PrintWriter pw = resp.getWriter();
        pw.write("欢迎访问本网站,您的最后访问时间为:<br>");
        Cookie cookie = new Cookie("time", System.currentTimeMillis() + "");
         cookie.setMaxAge(3600);
         resp.addCookie(cookie);
        Cookie[] cookies = req.getCookies();
        for (Cookie c : cookies){
            if ("time".equals(c.getName())){
                String value = c.getValue();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss");
                pw.write(sdf.format(new Date(Long.parseLong(value))));
            }
        }
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
 
- 效果如下
 

1.6 Cookie 的细节
- 数量限制
每个网站最多有20和 Cookie, 且大小不能超过 4KB。所有网站的 Cookie 总数不能超过 300个 - 名称限制
Cookie 的名称只能包含 ASCCI 码表中的字母、数字字符。不能包含逗号、分号、空格,不能以 $ 开头
Cookie 的值不支持中文 - 存货时间限制 setMaxAge() 方法接收数字
负整数:当前会话有效,浏览器关闭则清除
0:立刻清除
正整数:以秒为单位设置存活时间 - 访问路径限制
默认路径:取自第一次访问的资源路径前缀,只要以这个前缀为开头(包括子级路径),就能访问到
设置路径:setPath() 方法设置指定路径 
2 Session
2.1 HttpSession 介绍
- HttpSession:服务器会话管理技术
本质也是采用客户端会话管理技术
只不过客户端保存的是一个特殊表示,而共享的数据保存到了服务器的内存对象中
每次请求时,会将特殊标识带到服务器端,根据这个标识来找到对应的内存空间,从而实现数据共享
是 Servlet 规范中四大域对象之一的会话域对象 - 作用:可以实现数据共享

 
2.2 HttpSession 常用方法

2.3 HttpSession 获取
- HttpSession 实现类对象是通过 HttpSevletRequest 对象来获取

 
2.4 HttpSession 的使用
- 需求说明
通过第一个 Servlet 设置共享数据用户名,并在第二个 Servlet 获取到 - 最终目的
掌握 HttpSession 的基本使用,如何获取和使用 - 代码演示
 
package com.txt.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/servletDemo01")
public class ServletDemo01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求的用户名
        String username = req.getParameter("username");
        //2. 获取 HTTPSession 的对象
        HttpSession session = req.getSession();
        //3. 将用户名信息添加到共享数据中
        session.setAttribute("username",username);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
 
package com.txt.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/servletDemo02")
public class ServletDemo02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取 HTTPSession 对象
        HttpSession session = req.getSession();
        //获取共享数据
        Object username = session.getAttribute("username");
        //将数据响应给浏览器
        resp.getWriter().write(username +"");
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}
 
2.5 HttpSession 的细节
- 唯一标识的查看


 - 浏览器禁用 Cookie
方式一:通过提示信息告知用户,大部分网站采用的解决方式
方式二:访问时拼接 jsessionid 标识,通过 encodeURL() 方法重写地址 - 钝化和活化 
  
- 什么是钝化和活化
钝化:序列化。把长时间不用,但还不到过期时间的 HttpSession 进行序列化,写到磁盘上
活化:相反的状态 - 何时钝化
第一种情况:当访问量很大是,服务器会根据 getLastAccessTime 来进行排序
对长时间不用,但是还没有到过期时间的 HttpSession 进行序列化
第二种情况:当服务器进行重启的时候,为了保持客户 HttpSession 中的数据,也要对其进行序列化 
 - 什么是钝化和活化
 - 注意:
HttpSession 的序列化由服务器自动完成,我们无需关心 
3 JSP
3.1 JSP 介绍
- JSP(Java Servlet Page):是一种动态网页技术标准
 - JSP 部署在服务器上,可以处理客户端发送的请求,并根据请求内容动态的生成 HTML、XML 或其他格式文档的 Web 网页,然后再响应给客户端
 - JSP 是基于Java 语言的,它的本质就是 Servlet

 
3.2 JSP 快速入门
- 创建一个web项目
 - 在 web 目录下创建一个 index.jsp 文件
 - 在文件中写一句内容为:这是我的第一个jsp
 - 部署并启动项目
 - 通过浏览器测试
 
- 代码演示
 
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>JSP</title>
  </head>
  <body>
    这是我的第一个JSP
  </body>
</html>
 
3.3 JSP 执行过程

3.4 JSP 语法
-  
JSP 注释
<%--注释的内容--> -  
Java 代码块
<% Java 代码块%>
<%
System.out.println("Hello JSP");
out.print("Hello JSP");
%>注意:
System.out.println(“Hello JSP”); 普通输出语句,输出在控制台
out.print(“Hello JSP”); out是 JSPWriter 对象,输出在页面 -  
JSP 表达式
<%=表达式%>
<%="hello"%>相当于 out.print(“hello”); 的简化
 -  
JSP 声明
<%! 声明变量或方法 %>
<%! String s = "abc"; %>
<%=s%>如果加!代表的是声明的是成员变量
如果不加!代表的是声明的是局部变量 
3.5 JSP 指令
- page 指令
<%@ page 属性名 = 属性值 属性名 = 属性值 … %>

 - include 指令:可以包含其他页面
<%@ include file=包含的页面 %> - taglib 指令:可以引入外部标签库
<%@ taglib uri=标签库的地址 prefix=前缀名称%> 
3.6 JSP 细节
- 九大隐式对象

 - PageContext 对象
是 JSP 独有的,Servlet 中没有
是四大域对象之一的页面域对象,还可以操作其他三个域对象中的属性
还可以获取其他八个隐式对象
生命周期是随着 JSP 的创建而存在,随着 JSP 的结束而小旺旺,每个 JSP 页面都有一个 PageContext 对象

 
3.7 四大域对象

3.8 MVC 模型
- M(Model):模型。 用与封装数据,封装的是数据模型
 - V(View):视图。 用于显示数据,动态资源用 JSP 页面,静态资源用 HTML 页面
 - C(Controller):控制器。 用于处理请求和响应,例如 Servlet

 



















