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>

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("用户名或密码错误!");
        }
    }
}

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 + "欢迎回来!");
    }
}

项目展示

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值