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的更多相关文章

  1. 一次从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

  2. Java web学习 Cookie&&Session

    cookie&&session 会话技术 从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,成为一次会话.会 话技术就是记录这次会话中客户端的状态与数据的. 会话技术分为Coo ...

  3. 一份从0到1的java项目实践清单

    虽说工作就是简单的事情重复做,但不是所有简单的事你都能有机会做的. 我们平日工作里,大部分时候都是在做修修补补的工作,而这也是非常重要的.做好修补工作,做好优化工作,足够让你升职加薪! 但是如果有机会 ...

  4. java ->会话技术Cookie&Session

    会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ...

  5. Django项目之cookie+session

    原文:https://www.cnblogs.com/sss4/p/7071334.html HTTP协议 是短连接.且状态的,所以在客户端向服务端发起请求后,服务端在响应头 加入cokie响应给浏览 ...

  6. 【java项目实践】具体解释Ajax工作原理以及实现异步验证username是否存在+源代码下载(java版)

    一年前,从不知道Ajax是什么,伴随着不断的积累,到如今常常使用,逐渐有了深入的认识. 今天,假设想开发一个更加人性化,友好,无刷新,交互性更强的网页,那您的目标一定是Ajax. 介绍 在具体讨论Aj ...

  7. Java项目登录报Session Error

    在web.xml文件添加下面红色代码即可,注意:添加代码后,格式化一下代码. <servlet>        <servlet-name>dwr-invoker</se ...

  8. Java Web Application使Session永不失效(利用cookie隐藏登录)

    在做 Web Application 时,因为 Web Project 有 session 自动失效的问题,所以如何让用户登录一次系统就能长时间运行三个月,就是个问题. 后来,看到 session 失 ...

  9. java项目使用memcache实现session共享+session基础

    本文章主要目的是配置session共享,为了巩固基础,捎带介绍了一些基础知识(网上搜索后觉得最全面的特引过来,节省时间),基础扎实的可以自动忽略. 基础篇: 1.了解java web中的session ...

  10. 【项目实践】一文带你搞定Session和JWT的登录认证方式

    以项目驱动学习,以实践检验真知 前言 登录认证,估计是所有系统中最常见的功能了,并且也是最基础.最重要的功能.为了做好这一块而诞生了许多安全框架,比如最常见的Shiro.Spring Security ...

随机推荐

  1. NoSQL数据库与关系数据库的比较

    1.在原理方面 2.在数据规模方面 3.在数据库模式方面 4.查询效率方面: 5.在事务一致性方面: 6.在数据完整性方面: 7.在可扩展性方面: 8.在可用性方面 9.在标准化方面: 10.在技术支 ...

  2. # C# 重新认识一下 IEnumerable<T>,IAsyncEnumerable<T> 以及搭配异步可能遇到的问题

    C# 重新认识一下 IEnumerable<T>,IAsyncEnumerable<T> 以及搭配异步可能遇到的问题 前言 为啥会想到写这个 为了这碟醋,包了这顿饺子 作为老鸟 ...

  3. N100低功耗win11安装wsl2当入门nas

    前言 最近入了一台16gb+512gb的N100,想着用来存些资源,当个nas,偶尔要用用windows系统,所以想直接在这上面搞个虚拟机算了,WSL2似乎是一个不错的选择,下面介绍捣鼓的教程. 没用 ...

  4. 用Spring Boot 3.2虚拟线程搭建静态文件服务器有多快?

    Spring Boot 3.2 于 2023 年 11 月大张旗鼓地发布,标志着 Java 开发领域的一个关键时刻.这一突破性的版本引入了一系列革命性的功能,包括: 虚拟线程:利用 Project L ...

  5. 国产Geoscene Server 4.0编译SOE总结

    背景:公司一直使用Arcgis Server 10.1.Visual Studio 2010开发SOE功能,随着国产化软件发展大趋势,SOE中的各种分析功能,需要升级到Geoscene Server环 ...

  6. 【华为云技术分享】玩转物联网IoTDA服务系列三-自动售货机销售分析场景示例

    摘要:物联网解决方案中,作为数据主体的"物"可能数量会非常大,产生的数据已经无法通过传统的数据处理服务进行处理.如何分析与利用这庞大的物联网设备数据对物联网企业来说又是一个新的挑战 ...

  7. DWS临时内存不可用报错: memory temporarily unavailable

    本文分享自华为云社区<DWS临时内存不可用报错: memory temporarily unavailable>,作者:漫天. 1.定位报错的DN/CN 当出现memory tempora ...

  8. 浏览器层面优化前端性能(2):Reader引擎线程与模块分析优化点

    Reader 引擎线程与模块分析 首先是网页内容,加载完输入到HTML解释器,解释后构成DOM树,这期间如果遇到JavaScript代码就交给JavaScript引擎去处理,如果网页中包含CSS,就交 ...

  9. hadoop fs,hadoop dfs以及hdfs dfs区别

    1.hadoop dfs 专门针对hdfs系统 2.hdfs dfs 和hadoop dfs,当使用hadoop dfs时会被转为hdfs dfs命令 3.hadoop fs 范围更广

  10. iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤

    ​ 目录 iOS移动应用安全加固:保护您的App免受恶意攻击的重要步骤 摘要 引言 一.APP加固的概念 二.APP加固方案的比较 三.保护iOS应用的安全 四.总结 参考资料 摘要 本文介绍了移动应 ...