java项目实践-cookie-session-day18
1. cookie
cookie 在客户端(浏览器)中保持http状态的 信息技术
本质 是浏览器缓存
每次发请求的时候 在请求头中 带给 服务端
常见的应用场景:实现7天免登录

浏览器 F12

        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("gbk");
        Cookie cookie = new Cookie("0001", "beijing");
        response.addCookie(cookie);
        response.getWriter().write("learning cookie !");
cookie的获取
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("gbk");
        Cookie[] cookies = request.getCookies();
        if (cookies.length>0){
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                String value = cookie.getValue();
                System.out.println("key:"+ name);
                System.out.println("value:"+ value);
            }
        }
    }
}

使用之前的用户登录项目
实现7天免登录
对于之前的
loginServlet 登录成功添加cookie
//            response.getWriter().write("welcome:" + u.getName());
            Cookie cookie = new Cookie("userid", u.getId()+"");
            cookie.setMaxAge(7*24*3600);
            response.addCookie(cookie);
            response.sendRedirect("hello");
增加一个CookieServlet是实现/ck接口
package com.msb.control;
import com.msb.entity.User;
import com.msb.service.UserService;
import com.msb.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
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.sql.SQLException;
/**
 * @Auther: jack.chen
 * @Date: 2023/10/19 - 10 - 19 - 21:07
 * @Description: ${PACKAGE_NAME}
 * @version: 1.0
 */
public class CookieServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        this.doGet(request, response);
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("gbk");
        UserService userService = new UserServiceImpl();
        Cookie[] cookies = request.getCookies();
        if (cookies!=null){
            for (Cookie cookie : cookies) {
                String name = cookie.getName();
                if ("userid".equals(name)){
                    String userid = cookie.getValue();
                    // 对 userid 校验
                    try {
                        User u = userService.getUserById(Integer.valueOf(userid));
                        if (u!=null){
                            response.sendRedirect("hello");
                        }else{
                            response.sendRedirect("page");
                        }
                    } catch (SQLException e) {
                        e.printStackTrace();
                    } catch (ClassNotFoundException e) {
                        e.printStackTrace();
                    }
                    return;
                }
            }
                response.sendRedirect("page");
        }else{
            response.sendRedirect("page");
        }
    }
}
/ck-->/page 未登录
/ck --> /hello 已经登录
2. session
登录成功之后 再访问其他的页面 不需要再带上 用户名密码 就能直接访问
现实的例子:理发店 办理会员卡
第一种方式:给客户留一张 卡片--客户端
第二种方式:之后只要 报卡号 或者手机号--服务端


session是用于解决用户访问不同页面时 带上sessionid

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("sess api do get ");
        HttpSession session = request.getSession();
        System.out.println("session id:"+session.getId());
        response.getWriter().write("learn session");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");
        response.setContentType("text/html:charset=utf-8");
        System.out.println("sess api do get ");
        HttpSession session = request.getSession();
        System.out.println("session id:"+session.getId());
        //设置有效期
//        session.setMaxInactiveInterval(5);
        // 强制失效
//        session.invalidate();
        session.setAttribute("111", "beijing");
        response.getWriter().write("learn session");
    }
        Object attribute = (String)session.getAttribute("111");
        response.getWriter().write("get session attr:"+attribute);

实现登录页面  欢迎xxxx登录

            HttpSession session = request.getSession();
            session.setAttribute("name", u.getName());

        HttpSession session = request.getSession();
        String name = (String)session.getAttribute("name");

3. servletcontext
不同用户 数据传递 数据共享 ---当前访问人数 当前帖子的的在线阅读人数

被web项目中所有的servlet访问
服务器创建 一个项目只能有一个servletcontext对象
项目的任意位置 获取到的是同一个对象
该对象所有用户共有
servlet1
        ServletContext servletContext = this.getServletContext();
//        ServletContext servletContext = this.getServletConfig().getServletContext();
//        ServletContext servletContext = request.getSession().getServletContext();
        //三种方式获取的都是同一个对象
        servletContext.setAttribute("111", "beijing");
        response.getWriter().write("servlet context 1");
servlet2
        ServletContext servletContext = this.getServletContext();
        String attribute = (String)servletContext.getAttribute("111");
        System.out.println(attribute);
        response.getWriter().write("servlet context 2");

公共设置

web.xml中的公共配置
    <context-param>
        <param-name>beijing</param-name>
        <param-value>beautiful</param-value>
    </context-param>
        String beijing = (String)servletContext.getInitParameter("beijing");
        System.out.println(beijing);

如何实现 当前访问量的统计

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html;charset=utf-8");
        ServletContext context = this.getServletContext();
        Integer num = (Integer) context.getAttribute("num");
        if(num==null){
            context.setAttribute("num", 1);
        }else{
            num++;
            context.setAttribute("num", num);
        }
        PrintWriter writer = response.getWriter();
        writer.write("<html>");
        writer.write("<head>");
        writer.write("</head>");
        writer.write("<body>");
        writer.write("用户访问量:"+context.getAttribute("num"));
        writer.write("</body>");
        writer.write("</html>");
    }
4.servletConfig
每个servlet 单独获取自己的属性配置


        ServletConfig servletConfig = this.getServletConfig();
        String china = servletConfig.getInitParameter("china");
        System.out.println("====="+china+"==");
												
											java项目实践-cookie-session-day18的更多相关文章
- 一次从0到1的java项目实践清单
		
虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...
 - Java web学习  Cookie&&Session
		
cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...
 - 一份从0到1的java项目实践清单
		
虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...
 - java ->会话技术Cookie&Session
		
会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...
 - Django项目之cookie+session
		
原文:https://www.cnblogs.com/sss4/p/7071334.html HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览 ...
 - 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)
		
一年前,从不知道Ajax是什么,伴随着不断的积累,到如今常常使用,逐渐有了深入的认识. 今天,假设想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在具体讨论Aj ...
 - Java项目登录报Session Error
		
在web.xml文件添加下面红色代码即可,注意:添加代码后,格式化一下代码. <servlet> <servlet-name>dwr-invoker</se ...
 - Java Web Application使Session永不失效(利用cookie隐藏登录)
		
在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...
 - java项目使用memcache实现session共享+session基础
		
本文章主要目的是配置session共享,为了巩固基础,捎带介绍了一些基础知识(网上搜索后觉得最全面的特引过来,节省时间),基础扎实的可以自动忽略. 基础篇: 1.了解java web中的session ...
 - 【项目实践】一文带你搞定Session和JWT的登录认证方式
		
以项目驱动学习,以实践检验真知 前言 登录认证,估计是所有系统中最常见的功能了,并且也是最基础.最重要的功能.为了做好这一块而诞生了许多安全框架,比如最常见的Shiro.Spring Security ...
 
随机推荐
- 01 MyBatis第一个应用程序
			
1.MyBatis是什么? mybatis是一个基于java的持久层框架. 2.什么是持久化 数据由瞬态状态变为持久状态. 3.持久层: 完成持久化工作的代码块. -- DAO层,将数据存到数据库 4 ...
 - 聊聊流式数据湖Paimon(一)
			
翻译自 Apache Paimon官方文档 概览 概述 Apache Paimon (incubating) 是一项流式数据湖存储技术,可以为用户提供高吞吐.低延迟的数据摄入.流式订阅以及实时查询能力 ...
 - Odoo接口说明
			
通过使用PostMan调用Odoo - POST { "jsonrpc":"2.0", "params":{ "db": ...
 - ElasticSearch之cat allocation API
			
查看各节点上各个shard的硬件使用情况,命令样例如下: curl -X GET "https://localhost:9200/_cat/allocation?v=true&pre ...
 - Python用辗转相除法计算两数的最大公约数和最小公倍数
			
计算最大公约数运用辗转相除法就行了 计算最小公倍数需要运用公式:最小公倍数=数字1*数字2/最大公约数 有关辗转相除法的知识请查看:辗转相除法 以下为代码: #计算最大公约数 def gys (x,y ...
 - Shiro 的基本使用
			
简介 Apache Shiro 是一个强大的.灵活的开源安全框架,可以干净地处理验证.授权.企业会话管理和加密等功能 相关特性 Apache Shiro 具有的主要特性如下图所示: 主要关注的地方在于 ...
 - 从C++CLI工程的依赖库引用问题看.Net加载程序集机制
			
问题 最近在为某第三方MFC项目写C++/CLI工程插件时遇到了如下一个问题: MFC的工程不允许把.Net的依赖程序集放到执行程序的目录(防止影响其稳定性),依赖库只能放到非执行程序子目录的其他目录 ...
 - flutter MaterialApp介绍
			
MaterialApp 是 Flutter 中常用的一个 widget,它是构建基于 Material Design 风格应用的根组件,主要负责各种全局状态的管理以及定义应用程序的主题样式等. voi ...
 - HTML代码混淆技术:原理、应用和实现方法详解
			
 HTML代码混淆是一种常用的反爬虫技术,它可以有效地防止爬虫对网站数据的抓取.本文将详细介绍HTML代码混淆技术的原理.应用以及实现方法,帮助大家更好地了解和运用这一技术. 一.HTML代码混淆的 ...
 - 抖音APP如何实现用户生命周期提升
			
> 更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 近日,在火山引擎数智平台在北京举办的"超话数据:企业产品优化分享"的活动上,抖音策略 ...