2022-9-2第一组孙乃宇Cookie和Session

Cookie

Cookie:客户端会话技术,将数据保存到客户端,以后每次请求都携带Cookie数据进行访问Cookie基本使用

发送Cookie

1.创建Cookie对象,设置数据

Cookie cookie=new Cookie("key","value"); 

2.发送Cookie到客户端:使用response对象

response.addCookie(cookie);

获取Cookie

1.获取客户端携带的所有Cookie,使用request对象

Cookie[] cookies = request.getCookies(); 

2.遍历数组,获取每一个Cookie对象: for 

3.使用Cookie对象方法获取数据

cookie.getName();

cookie.getValue(); 

Cookie原理

Cookie的实现是基于HTTP协议的

响应头: set-cookie

请求头: cookie

Cookie使用细节

Cookie存活时间

默认情况下,Cookie存储在浏览器内存中,当浏览器关闭,内存释放,则Cookie被销毁

setMaxAge(int seconds):设置Cookie存活时间

1.正数:将Cookie写入浏览器所在电脑的硬盘,持久化存储。到时间自动删除

2.负数:默认值,Cookie在当前浏览器内存中,当浏览器关闭,则Cookie被销毁

3.零:删除对应Cookie

Cookie存储中文

Cookie不能直接存储中文

如需要存储,则需要进行转码:URL编码

编码:String value="张三";

value = URLEncoder.encode(value, "utf-8");

解码:value=URLDecoder.decode(value,"utf-8");

案例

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.Objects;

// 用当前这个servlet当做我的主页
@WebServlet(name = "IndexServlet", value = "/index.do")
public class IndexServlet extends HttpServlet {
   @Override
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       // 1.获取Cookie
       Cookie[] cookies = request.getCookies();
       if(Objects.nonNull(cookies) && cookies.length > 0){
           System.out.println("发现了cookie...");
           // 有cookie的情况
           for (Cookie cookie : cookies) {
               if(cookie.getName().equals("username")){
                   response.sendRedirect("success.html");
              }
          }
      } else {
           System.out.println("没有发现cookie,创建cookie。。。");
           // 创建cookie
           String username = request.getParameter("username");
           String password = request.getParameter("password");
           if(Objects.equals(username,"admin") && Objects.equals(password,"123456")){
               Cookie cookie = new Cookie("username",username);
               // 设置cookie的最大时效
   //             cookie.setMaxAge(5000);
               // 把cookie放入到响应中
               response.addCookie(cookie);
               response.sendRedirect("success.html");
          }

      }
  }

   @Override
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  }
}

 

Session

服务端会话跟踪技术:将数据保存到服务端

JavaEE提供 HttpSession接口,来实现一次会话的多次请求间数据共享功能

使用:

1.获取Session对象

HttpSession session = request.getSession();

2.Session对象功能:

void setAttribute(String name, Object o):存储数据到session域中

Object getAttribute(String name):根据key,获取值

void emoveAttribute(String name):根据key,删除该键值对

Session使用细节

Session钝化、活化:

服务器重启后,Session中的数据是否还在?

钝化:在服务器正常关闭后, Tomcat会自动将Session数据写入硬盘的文件中

活化:再次启动服务器后,从文件中加载数据到Session中

Seesion销毁:

默认情况下,无操作,30分钟自动销毁

<session-config>

<session-timeout>30</session-timeout>

</session-config>

调用Session对象的invalidate()方法

小结

Cookie和Session 都是来完成一次会话内多次请求间数据共享的 区别:

存储位置:Cookie是将数据存储在客户端,Session将数据存储在服务端

安全性:Cookie不安全,Session安全

数据大小: Cookie最大3KB,Session无大小限制

存储时间:Cookie可以长期存储,Session默认30分钟

服务器性能: Cookie不占服务器资源,Session占用服务器资源

Filter 过滤器

  1. Filter 过滤器它是 JavaWeb 的三大组件之一。 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器

  2. Filter 过滤器它是 JavaEE 的规范。也就是接口

  3. Filter 过滤器它的作用是:拦截请求,过滤响应。

要求:在你的 web 工程下,有一个 admin 目录。这个 admin 目录下的所有资源(html 页面、jpg 图片、jsp 文件…等等)都必须是用户登录之后才允许访问。

思考:根据之前我们学过内容。我们知道,用户登录之后都会把用户登录的信息保存到 Session 域中。所以要检查用户是否登录,可以判断 Session 中否包含有用户登录的信息,即可!!!

初始化 在创建Filter对象,在servlet容器(tomcat)加载当前web应用(当前工程)被调用 只执行一次。当前Filter的初始化操作,Filter和Servlet都是单例的。 FilterConfig类似于ServletConfig,获取初始化参数。

import javax.servlet.*;
import java.io.IOException;

public class HelloFilter implements Filter {
   /*
       初始化
       在创建Filter对象,在servlet容器(tomcat)加载当前web应用(当前工程)被调用
       只执行一次。当前Filter的初始化操作,Filter和Servlet都是单例的。
       FilterConfig类似于ServletConfig,获取初始化参数。
    */
   @Override
   public void init(FilterConfig filterConfig) throws ServletException {
  }
   /*
     主要过滤请求的方法(核心方法)
     真正Filter要处理的逻辑代码需要写在此方法里,每次拦截都会调用这个方法。
     ServletRequest:实际上当请求来的时候,实例化的还是HttpServletRequest
     ServletResponse:实际上当请求来的时候,实例化的还是HttpServletResponse
     FilterChain:过滤器链,一个项目中是可以有多个过滤器的,会形成一个链,当前过滤器把请求传递给下一个过滤器
       Filter的执行顺序:
           filter-mapping的上下顺序有关
     */
   @Override
   public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
       System.out.println("HelloFilter....");
//       放行请求
       filterChain.doFilter(servletRequest,servletResponse);
  }

   /*销毁*/
   @Override
   public void destroy() {
//       System.out.println("Filter's destroy....");
  }
}

监听器 listener

监听器: 专门用于对其他对象身上发生的事件或状态改变进行监听和相应的处理

分类: 1、监听域对象自身的创建和销毁

2、监听域对象中属性的增加和删除

3、监听绑定到session中的某个对象的状态的事件监听

JavaEE(servlet)三大件:  servlet filter listener

posted @   孙乃宇  阅读(225)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示