• JavaEE——Servlet中的session


    之前的博客中提到,cookie是为了浏览器能够在本地保存数据而产生的机制,是在浏览器工作的。而session则是与之对应的,在客户端工作的。一个服务器对应多个客户端,每个客户端都有自己的session,以sessionId为key,session对象为值,存放在内存的哈希表

    session和cookie相关api

    HttpRequest

    方法功能
    HttpSession getSession()在服务器中获取会话. 参数如果为 true, 则当不存在会话时新建会话; 参数如果为 false, 则当不存在会话时返回 null
    Cookie[] getCookies()返回一个数组, 包含客户端发送该请求的所有的 Cookie 对象. 会自动把Cookie 中的格式解析成键值对.

    HttpResponse

    方法功能
    void addCookie(Cookie cookie)把指定的 cookie 添加到响应中

    HttpSession类

    方法功能
    Object getAttribute(String name)返回在该 session 会话中具有指定名称的对象,如果没有指定名称的对象,则返回 null.
    void setAttribute(String name, Object value)使用指定的名称绑定一个对象到该 session 会话
    boolean isNew()判定当前是否是新创建出的会话

    cookie类

    方法功能
    String getName()返回 cookie 的名称。
    String getValue()获取与 cookie 关联的值
    void setValue(String newValue)设置与 cookie 关联的值。

    实例

    实现用户登陆界面

    login.html

    使用form表单,实现用户名和密码的post请求提交

    DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>登陆title>
    head>
    <body>
        <form action="login" method="post">
            <input type="text" name="username">
            <input type="password" name="password">
            <input type="submit" value="登陆">
        form>
    body>
    html>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    LoginServlet

    获取前端提交的username和password,与正确的username和password进行比较,如果正确就创建会话,将username和123的键值对存入哈希表,然后页面重定向到index,

    package login;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    
    //使用这个类来处理登陆请求
    @WebServlet("/login")
    public class LoginServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            if("123".equals(username) && "1234".equals(password)){
                //创建会话
                HttpSession session = req.getSession(true);
                session.setAttribute("username","123");
                resp.sendRedirect("index");
            } else {
                resp.setStatus(403);
                resp.setContentType("text/html; charset=utf8");
                resp.getWriter().write("用户名或密码错误!");
            }
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    IndexServlet

    获取session,如果session为空就退出,否则获取哈希表中username对应的值,将其打印在页面上

    package login;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    
    //登陆成功后的
    @WebServlet("/index")
    public class IndexServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //此处是false表示,如果不存在,就不创建,返回空
            HttpSession session = req.getSession(false);
            resp.setContentType("text/html; charset=utf8");
            if(session == null){
                resp.getWriter().write("尚未登陆!禁止访问!");
                resp.setStatus(403);
                return;
            }
            String username = (String) session.getAttribute("username");
            resp.getWriter().write(username + "欢迎回来!");
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    项目展示

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    【牛客刷题】前端--JS篇(一)
    jvm双亲委派机制详解
    Ubuntu Netplane balancing algorithm modes
    使用SPDK lib搭建自己的NVMe-oF Target应用
    centos7 安装 mysql 8.0
    【洛谷】P2893 Making the Grade G
    springBoot源码之servlet与reactive
    73、SpringBoot 直接整合 JDBC
    Spring MVC各组件近距离接触--下--04
    c语言分层理解(c语言字符串+内存库函数)
  • 原文地址:https://blog.csdn.net/m0_60867520/article/details/127993226