【Servlet学习六】Cookie 与Session && 实现登录与上传文件

这篇具有很好参考价值的文章主要介绍了【Servlet学习六】Cookie 与Session && 实现登录与上传文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Cookie与Session(掌握)

🌈1、Cookie是什么?

🌈2、Session是什么?

二、代码功能演示

🌈1、实现登录功能(掌握)

🌈2、实现上传文件功能(掌握)

1、目标:实现程序,通过网页上传一张图片到服务器。

2、核心方法总结


一、Cookie与Session(掌握)

🌈1、Cookie是什么?

问题1:为什么会有cookie?

        HTTP协议本身是“无状态”协议,这里的无状态指的是:默认HTTP协议的客户端与服务器之间的通信,和下次之间的通信没有直接关系。但是在实际开发中,很多请求之间是有关联的。比如我现在登录CSDN,登录成功之后来到主页面,当我想要访问该主页面的一个“发布博客”按钮,跳转到新的页面的时候,由于没有记录当前的登录状态,所以每次跳转一个新的页面,就要你不断的进行登录,非常麻烦,所以实际中我们需要在登录一次成功之后,就将这个登录信息记录下来,当第二次访问的时候服务器就知道该请求是否已经登录过了。由于HTTP不支持,所以通过Cookie和Session来解决HTTP无状态的问题。(之前的博文中有提到)

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 图中的 "令牌" 通常就存储在 Cookie 字段中。

问题2:cookie是什么?

Cookie是客户端保存数据的一种机制,一个典型的应用场景是保存用户的登录信息。

🌈2、Session是什么?

问题1:为什么会有Session?

(1) Cookie是工作在浏览器端,Session工作在服务器端,两者都是用来保存某一个数据的。Session的主要作用是用于识别是哪一个用户(会话)访问了服务器。

(2)由于服务器在同一时刻收到的请求是非常多的,所以服务器需要清楚的知道目前的这个请求是来自于哪个用户的,所以在前面给用户令牌的时候,服务器这边也要记录下每个用户令牌以及用户信息的对应关系。

(3)要存储这个对应关系,因此Session本质就是通过一个“哈希表”来存储的,key值记录令牌的Id(可以叫做token/sessionId),这个Id是服务器端生成的一个“唯一性字符串”,value就是用户信息,底层也是一个HashMap。(用户信息可以根据需求灵活设计)。

(4)如果删除了本地的cookie之后,再访问该网站就会变为未登录状态。        

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 

 问题2:理解Cookie与Session的整个过程?

 (1)当用户登录时,服务器在Session中新增一条记录,并将SessionId返回给客户端;

(2)客户端后续再给服务器端发送请求的时候,需要在请求中带上sessionId. (例如通过 HTTP 请求中的 Cookie 字段带上);

(3)服务器收到请求之后,根据请求中的sessionId在Session信息中获取到对应的用户信息,再进行后续操作。

 举个例子:

        到了医院看病,在挂号的时候(类比于第一次访问服务器)要求提供身份证(进行登录),然后医院会返回给你一个“就诊卡”,然后在医院这边会在系统库中记录下每个就诊卡和用户之间的关系,用户将“就诊卡”收好( 服务器返回给浏览器一个“令牌”,浏览器这边将令牌收好),之后再去各个科室进行检查等,就不用再出示身份证了,只要凭借“就诊卡”,医院这边在自己的信息库里面查询就可以识别出当前用户的身份(之后再进行其他操作,就不用再进行登录了,因为已经记录了登录的信息)。


二、代码功能演示

🌈1、实现登录功能(掌握)

(1)HTML文件:login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录</title>
</head>
<body>
    <!-- API接口的URL,method中写的是请求的方法:POST,GET,表单提交的时候一般都是POST -->
    <form action="login" method="post">
        <!-- 使用表单提交的时候,一定要有name属性,相应标签的值会和name属性中设置的内容拼接成key value的形式提交到服务器 -->
        <input type = "text" name="username">        
        <input type = "text" name="password">
        <button type="submit">登录</button>
    </form>
</body>
</html>

(2)后端代码:LoginInServlet.java与indexServlet .java

@WebServlet("/login")
public class LoginInServlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //String username
        //String password
        //1、设置编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset = utf-8");
        //2、获取参数
        String username = req.getParameter("username");//username和前端的name的值对应
        String password = req.getParameter("password");
        //3、校验
        if(username == null || !username.equals("zhangsan") ||
            password == null || !password.equals("123456")){
            resp.getWriter().write("请输入正确的用户名和密码");
            return;
        }
        //4、登录成功,保存用户的信息到Session中(跳转到另一个界面)
        //(1)获取Session
        //传入True:表示第一次登录的时候(访问后端的时候),创建一个Session
        HttpSession session = req.getSession(true);
        //(2)将当前用户信息保存到Session中,每次操作的时候都会查找cookie中是否有session信息,
        session.setAttribute("userInfo",username);
        //(3)跳转到payServlet的地址
        resp.sendRedirect("index");
    }
}
@WebServlet("/index")
public class indexServlet extends HttpServlet {
    //获取当前用户Session
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、设置编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        //2、获取当前用户的session:
        HttpSession session = req.getSession(false);
        //3、判断当前用户是否登录
        if(session == null){
            resp.getWriter().write("没有登录,请重新登录");
            return;
        }
        //4、说明已经登录了,判断用户存不存在
        //获取当前登录的用户对象
        String username = (String) session.getAttribute("userInfo");
        //判断该对象名是否正确
        if(username == null || username.equals("")){
            resp.getWriter().write("没有找到用户信息,请重新登录");
            return;
        }
        //否则:登录成功,页面上显示用户名
        resp.getWriter().write("欢迎回来"+username);
    }
}

(3)功能演示

response.sendRedirect()实现重定向(页面跳转)_智慧浩海的博客-CSDN博客

(1)不输入任何内容,给出提示

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 (2)输入错误的用户名或者密码,给出提示

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

(3)输入正确的用户名或者密码

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

🌈2、实现上传文件功能(掌握)

1、目标:实现程序,通过网页上传一张图片到服务器。

(1)HTML文件: upload.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传文件</title>
</head>
<body>
    <form action="upload" method="post" enctype="multipart/form-data">
      <input type="file" name="uploadFile">
      <button type="submit">提交</button>
    </form>
</body>
</html>

(2)后端代码:Demo1_upload.java

@WebServlet("/upload")
//注意:要加这个注解
@MultipartConfig
public class Demo1_upload extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1、设置编码格式
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html,charset=utf-8");
        //2、获取上传的文件:注意这里用req.getPart()获取文件,而不是getParameter(),它获取的是String类型
        Part file = req.getPart("uploadFile");
        //3、获取文件信息
        System.out.println("文件名是"+file.getSubmittedFileName());
        System.out.println("文件类型是"+file.getContentType());
        System.out.println("文件大小是"+file.getSize());
        //4、将文件写入指定的磁盘中
        file.write("d:/"+file.getSubmittedFileName());
        //5、返回响应
        resp.getWriter().write("文件上传成功"+file.getSubmittedFileName());
    }
}

注意点:

(1)前端:

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

(2)后端:

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

  • 需要给 UploadServlet 加上 @MultipartConfig 注解,否则服务器代码无法使用 getPart 方法。
  • Part类,用于获取上传的文件。
  • getPart 的参数 需要和 form 中 input 标签的 name 属性对应;
  • 客户端一次可以提交多个文件, (使用多个 input 标签),此时服务器可以通过 getParts 获取所有的Part 对象。

效果:

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

(3)最终效果

(1)选择文件

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

(2)点击提交按钮

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

 (3) 在d盘可以找见上传的文件:

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习

2、核心方法总结

(1)HttpServletRequest 类方法

方法 描述
Part getPart(String name) 获取请求中给定 name 的文件

Collection<Part> getParts()

获取所有的文件

(2)Part 类方法

方法 描述
String getSubmittedFileName() 获取提交的文件名
String getContentType() 获取提交的文件类型
long getSize() 获取文件的大小
void write(String path) 把提交的文件数据写入磁盘文件

【Servlet学习六】Cookie 与Session && 实现登录与上传文件,JavaEE初阶,servlet,学习文章来源地址https://www.toymoban.com/news/detail-516473.html

到了这里,关于【Servlet学习六】Cookie 与Session && 实现登录与上传文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • web学习--登录认证--会话技术--cookie--session--令牌--java-jwt使用--jjwt使用

    前置学习: http springmvc 会话:用户打开浏览器,访问web服务器资源,会话建立,直到有一方断开连接会话结束,一次会话可以多次请求和连接 会话跟踪:一种维护浏览器状态的方式,服务器需要识别多次请求是否来自同一浏览器,以便同一次会话多次请求间共享数据。 cooki

    2024年02月15日
    浏览(64)
  • 从Cookie到Session: Servlet API中的会话管理详解

    首先, 在学习过 HTTP 协议的基础上, 我们需要知道 Cookie 是 HTTP 请求报头中的一个段, 本质上是浏览器在本地存储数据的一种机制, 要清楚 Cookie 是从哪里来, 要到哪里去. Cookie 是来自于服务器的, 通过响应报文中的 Set-Cookie 字段将数据返回保存在浏览器本地的; 后续当浏览

    2024年02月08日
    浏览(40)
  • 表白墙完善(数据库,前端,后端Servlet),再谈Cookie和Session。以及一个关于Cookie的练习小程序

    目录 表白墙引入数据库  再谈Cookie和session 得到Cookie ​编辑 设置Cooie 使用Cookie编写一个登入的小界面 1.先引入数据库的依赖(驱动包),5.1.49 pom.xml中,在之前的两个之前,再去添加一个 2.创建本地的数据库 3.之前的代码中有一段可以删掉了 这个代码需要删除,因为我们已

    2024年02月08日
    浏览(55)
  • Qt+QtWebApp开发笔记(四):http服务器使用Session和Cookie实现用户密码登录和注销功能

      前面实现了基础的跳转,那么动态交互中登录是常用功能。   本篇实现一个动态交互的简单登录和注销功能,在Qt中使用Session和Cookie技术。        链接:https://pan.baidu.com/s/1nkmsHgr-11Khe9k6Ntyf_g?pwd=1234     Web应用程序通常处理用户输入。将开发一个登录表单,看看

    2024年02月06日
    浏览(86)
  • 掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记

    🚀🚀1. 什么时间直播? 晚上8:00到10:00 🚀🚀2. 每周直播几天? 3天(周一、周三、周五) 本周比较特殊:周四周五周六三天直播,从下周开始就是一三五直播。 🚀🚀3. 直播什么内容? 从JavaWEB开始。(Servlet为核心,从Servlet开始学习。) JSP(JSP使用较少了,但是还有用,

    2024年02月15日
    浏览(37)
  • Cookie和Session的API、登录页面

    目录 一、Cookie 和 Session 1、HttpServletRequest 类中的相关方法 2、HttpServletResponse 类中的相关方法 3、HttpSession 类中的相关方法 4、Cookie 类中的相关方法 二、网页登录 1、约定前后端交互接口 2、编写一个简单的登录页面 3、编写一个Servlet 来处理这个登录请求。 4、编写服务器

    2024年02月03日
    浏览(37)
  • Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)

    web 服务器 :可以被浏览器访问到的服务器 常见的 web 服务器: tomcat:中小型的服务器软件,免费开源,支持 JSP 和 Servlet apache 公司的产品 WebLogic:Oracle 公司的产品,是目前应用最广泛的 Web 服务器,支持 J2EE 规范。WebLogic 是用于开发、集成、部署和管理大型分布式 Web 应用

    2024年02月02日
    浏览(78)
  • 快速上手Django(七) -Django之登录cookie和session

    会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与Session。Cookie通过在客户端记录信息确定用户身份,Session通过在服务器端记录信息确定用户身份。 cookie Cookie原理、Set-Cookie常用字段、应用 参考URL: https://blog.csdn.net/jiangshangc

    2023年04月20日
    浏览(60)
  • SpringBootWeb 登录认证[Cookie + Session + Token + Filter + Interceptor]

    目录 1. 登录功能 1.1 需求 1.2 接口文档 1.3 登录 - 思路分析 1.4 功能开发 1.5 测试 2. 登录校验 2.1 问题分析 什么是登录校验? 我们要完成以上登录校验的操作,会涉及到Web开发中的两个技术: 2.2 会话技术 2.2.1 会话技术介绍 会话跟踪  2.2.2 会话跟踪方案 2.2.2.1 方案一 - Cookie

    2024年02月20日
    浏览(42)
  • Node.js | 详解 Cookie-Session登录验证 的工作原理

    🧑‍💼 个人简介:一个不甘平庸的平凡人🍬 🖥️ 本系列专栏:Node.js从入门到精通 👉 你的一键三连是我更新的最大动力❤️! 📢 欢迎私信博主加入前端交流群🌹 目前绝大多数的系统都少不了 登录验证 的功能,这主要是为了保存用户的状态,以此来限制用户的各种行

    2024年01月17日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包