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 ...
随机推荐
- 向mq写消息
1.基础版本 import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.comm ...
- 华企盾DSC客户端右键菜单不显示常见处理方法
1.检查控制台"客户端不显示右键菜单项" 2.未分发模块权限,若以分配可尝试去掉重新分配模块 3.检查杀毒软件是否杀掉了5097目录的文件(覆盖安装,以上两条没问题,这条比较常见) ...
- 开源MES/免费MES/开源mes 生产管理流程
开源MES/免费MES/开源MES生产流程管理 一.什么是MES生产管理流程 生产管理系统(又称制造执行系统)是一种集成了计划.生产.质量控制.库存管理和材料申请等生产流程的管理系统.工厂生产管理流程 ...
- Ubuntu 20.04 安装Odoo17
1.升级系统 sudo apt-get update 2.更新系统 sudo apt-get upgrade 3.查看系统Python3版本 python3 -V 4.更新Python3.8到3.10 ...
- Win10 SFC& Dism修复系统
在Win10开始按钮上点击右键(或按Win + X快捷键),在弹出的系统快捷菜单中点击 Windows PowerShell(管理员)或者 命令提示符CMD (管理员) 方法 1 SFC输入&qu ...
- mv 用法
ls #查看目录下所有文件 mkdir 11 #创建11文件夹 mv * 11/ #把所有文件移动到11文件夹下 cd 11 #进入11文件夹 ls #查看文件夹里的内容 mv * ../ #把11文 ...
- .net Core实战简单文件服务器
首先新建一个ASP.NET Core 项目,选中空的模板,如下图所示 在NuGet包中添加Microsoft.AspNetCore.StaticFiles 添加好以后我们在Startup.cs中添加对 ...
- curl使用小记(一)
目录 1. 概述 2. 实例 2.1. 访问网页 2.2. 显示头信息 2.3. 保存网页 2.4. 下载图片 2.5. 用户代理设置 2.6. 代理设置 3. 参考 1. 概述 curl也就是com ...
- GaussDB(for MySQL) RegionlessDB发布:全球数据库技术
本文分享自华为云社区<GaussDB(for MySQL) RegionlessDB发布:全球数据库技术>,作者: GaussDB 数据库. 1.技术背景 对于一些典型行业,如跨境电商和大 ...
- 3种方法,用Java找出两个List中的重复元素
本文分享自华为云社区<如何用Java找出两个List中的重复元素,读这一篇就够了>,作者: 努力的阿飞. 在Java编程中,我们经常需要找出两个列表(List)中的重复元素.在本文中,我们 ...