• Apache Maven;会话技术


    Apache Maven是一个项目管理和构建工具,它基于项目对象模型(POM)的概念,通过一小段描述信息来管理项目的构建、报告和文档。

    Maven模型有:

    项目对象模型、依赖管理模型、插件


    会话技术:

    会话:浏览器和服务端进行请求发送和响应的过程

    会话跟踪:一种维护浏览器状态的方法,服务器需要识别多次请求是否来自于同一服务器,以便在同一次会话的多次请求之间共享数据。

    服务器用来识别浏览器的过程就是会话跟踪。

    现在的浏览器和服务器不支持数据共享是因为

    浏览器和服务器之间使用的是HTTP请求来进行数据传输

    HTTP协议是无状态的,每次浏览器向服务器请求时,服务器都会视为新的请求

    HTTP协议设计成无状态的目的是让每次请求之间相互独立,互不影响

    请求与请求之间独立后,就无法实现多次请求之间的数据共享

    小结:HTTP协议是无状态的,靠HTTP协议无法实现会话跟踪;

               想要实现会话跟踪,需要用到Cookie和Session

    Cookie、Session这两个技术都可以实现会话跟踪,最大的区别是:Cookie存储在浏览器端,而Session存储在服务器端。

    客户端会话跟踪技术:Cookie

    Cookie的操作分为两类——发送Cookie、获取Cookie

    发送Cookie:

    1.创建Cookie对象,并设置数据
    Cookie cookie = new Cookie("key","value");

    2.发送Cookie到客户端:使用response对象
    response.addCookie(cookie);

    1. @WebServlet("/cookie")
    2. public class CookieServlet extends HttpServlet{
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    5. throws ServletException, IOException {
    6. // 发送Cookie
    7. // 1. 创建Cookie对象
    8. Cookie cookie = new Cookie("name", "tzp");
    9. // 2. 使用response对象发送Cookie
    10. resp.addCookie(cookie);
    11. }
    12. @Override
    13. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    14. throws ServletException, IOException {
    15. doGet(req, resp);
    16. }
    17. }
    18. //访问查看Cookie的值为:name=tzp

    获取Cookie:

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

    Cookie[ ] cookies = request.getCookies();

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

    cookie.getName();

    cookie.getValue();

    1. @WebServlet("/getCookie")
    2. public class GetCookieServlet extends HttpServlet{
    3. @Override
    4. protected void doGet(HttpServletRequest req,HttpServletResponse resp)
    5. throws ServletException,IOException{
    6. //获取Cookie
    7. Cookie[] cookies = req.getCookie;
    8. //遍历Cookie
    9. if(cookies!=null){
    10. for(Cookie cookie:cookies){
    11. //获取Cookie的名称和值
    12. String name = cookie.getName();
    13. String value = cookie.getValue();
    14. System.out.println(name + ":" + value);
    15. }
    16. }
    17. }
    18. @Override
    19. protected void doPost(HttpServletRequest req,HttpServletResponse resp)
    20. throws ServletException,IOException{
    21. doGet(req,resp);
    22. }
    23. }

    在访问CookieServlet和GetCookieServlet的中间把浏览器关闭,GetCookieServlet无法再获取到Cookie的数据;默认情况下Cookie存储在浏览器内存中,当浏览器关闭,内存释放Cookie被销毁

    所以遇到的问题是如何将Cookie持久化存储:

    setMaxAge(int seconds)这个API可以来完成

    参数值为:

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

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

    3.零:删除对应Cookie

    设置Cookie时间:

    1. Cookie cookie=new Cookie("name","tzp");
    2. cookie.setMaxAge(60*60*24*7); //7天存活时间
    3. resp.addCookie(cookie);

    Cookie存储中文:

    1. //发送Cookie 创建Cookie对象
    2. String value="彭于晏";
    3. Cookie cookie=new Cookie("name",URLEncoder.encode(value,StandardCharsets.UTF-8));
    4. resp.addCookie(cookie);
    5. ----------------------------------------------------------------------------------
    6. @WebServlet("/getCookie")
    7. Cookie[] cookies=req.getCookies();
    8. if(cookies!=null){
    9. for(Cookie cookie:cookies){
    10. String name=cookie.getName();
    11. String value= URLDecoder.decode(cookie.getValue(),StandardCharsets.UTF_8);
    12. System.out.println(name+":"+value);
    13. }
    14. }

    服务端会话跟踪技术:Session

    存储在客户端的数据容易被窃取和截获,存在很多不安全因素,存储在服务端的数据相比于客户端来说更安全

    Session的基本使用:

    获取Session对象,使用的是request对象:

    HttpSession session = request.getSession();

    Session对象提供的功能:

    1.存储数据到session域中:

    void  setAttribute(String name,Object o)

    2.根据key,获取值

    Object getAttribute(String name)

    3.根据key,删除该键值对

    void  removeAttribute(String name)

    1. @WebServlet("/session")
    2. public class SessionServlet extends HttpServlet{
    3. @Override
    4. protected void doGet(HttpServletRequest req,HttpServletResponse resp)
    5. throws ServletException,IOException{
    6. //存储到Session中
    7. //1.获取Session对象
    8. HttpSession session = req.getSession();
    9. //2.存储数据
    10. session.setAttribute("username","tzp");
    11. }
    12. @Override
    13. protected void doPost(HttpServletRequest req,HttpServletResponse resp)
    14. throws ServletException,IOException{
    15. doGet(req,resp);
    16. }
    17. }
    1. @WebServlet("/getSession")
    2. public class GetSessionServlet extends HttpServlet {
    3. @Override
    4. protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    5. throws ServletException, IOException {
    6. // 获取数据,从session中
    7. // 1. 获取Session对象
    8. HttpSession session = req.getSession();
    9. // 2. 获取数据
    10. Object username = session.getAttribute("username");
    11. System.out.println(username);
    12. }
    13. @Override
    14. protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    15. throws ServletException, IOException {
    16. doGet(req, resp);
    17. }
    18. }

    先访问/session,将数据存入Session;再访问/getSession,从Session中获取数据

     通过案例的效果,能看到Session能够在一次会话中两次请求之间共享数据。

    注意 : Session 中可以存储的是一个 Object 类型的数据,也就是说 Session 中可以存储任意数据类型
    Session是基于Cookie来实现的

    Cookie和Session的区别:

    存储位置: Cookie 是将数据存储在客户端, Session 将数据存储在服务端
    安全性: Cookie 不安全, Session 安全
    数据大小: Cookie 最大 3KB Session 无大小限制
    存储时间: Cookie 可以通过 setMaxAge() 长期存储, Session 默认 30 分钟
    服务器性能: Cookie 不占服务器资源, Session 占用服务器资源
    应用场景 :
    购物车 : 使用 Cookie 来存储
    以登录用户的名称展示 : 使用 Session 来存储
    记住我功能 : 使用 Cookie 来存储
    验证码 : 使用 session 来存储
    结论
    Cookie 是用来保证用户在未登录情况下的身份识别
    Session 是用来保存用户登录后的数据
  • 相关阅读:
    jdk17新特性
    知物由学 | “群控软件”助长黑灰产套利的零和游戏,硬核技术打击隐秘的不公
    R之广义线性模型
    计算机毕业设计django基于python学校在线打印系统(源码+系统+mysql数据库+Lw文档)
    点云目标检测——pointpillars环境配置与训练
    ERMiner: Sequential Rule Mining Using Equivalence Classes
    第五十二天 数论
    java-net-php-python-jsp音像店租赁录像计算机毕业设计程序
    [ruby on rails]部署时候产生ActiveRecord::PreparedStatementCacheExpired错误的原因及解决方法
    c++ 智能指针 (std::auto_ptr)
  • 原文地址:https://blog.csdn.net/lzpyy/article/details/134147167