Cookie &Session & JSP

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 快速入门

  1. 创建一个web项目
  2. 在 web 目录下创建一个 index.jsp 文件
  3. 在文件中写一句内容为:这是我的第一个jsp
  4. 部署并启动项目
  5. 通过浏览器测试
  • 代码演示
<%@ 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
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值