12/14

发布时间 2023-12-21 14:53:49作者: kxzzow

周四,今天雪又开始下了,这些天最大的雪也就是今天了。昨天下午乒乓球课考试,b组淘汰赛三连胜。

今天下午开始,一片片雪花开始飘落,我们顶着风雪,来到第九实验楼,路上的雪已有六公分厚,还在不停的下,一直下。

又学了一些新的知识,不过好像现在我的web用不了,以后好好研究,为之后的开学考做准备。

seession是一个为了保存用户状态而创建的一个特殊的对象

其本质上相当于Map,里面可以存放多个键值对,是以key-value进行存放的(key必须是一个字符串,value是一个对象)

该对象主要保持相应数据的唯一性(一般用于存储主键)

session的常用方法

1、获取session对象的方法------request.getSession();

2、存放相关属性的方法------session.setAttribute(String s,Object o);

3、从session中获取存放的属性方法------session.getAttribute(String s);

4、删除session属性的方法------session.removeAttribute(String s);

5、得到session所对应的id------session.getId();

6、使得session立即无效------session.invalidate();

7、设置session存活的最长时间------session.setMaxInactiveInterval(int i);
实例
//mainServlet.java
package com.example.servlet;

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;
import java.io.PrintWriter;

@WebServlet("/mainServlet")
public class mainServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");

        HttpSession session=req.getSession();
        Object username=session.getAttribute("username");
        PrintWriter pw=resp.getWriter();

        if(username!=null){
            pw.write("登录成功!");
        }else{
            pw.write("登录失败!");
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}
<!--index.jsp-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>注册页面</title>
  </head>
  <body>
  <center>
    <form action="Session" method="post">
      <tr>
        <td>用户名:</td>
        <td><input type="text" name="username" placeholder="请输入用户名"></td>
      </tr>
      <p>
      <tr>
        <td>密码:</td>
        <td><input type="text" name="password" placeholder="请输入密码"></td>
      </tr>
      <p>
      <tr>
        <button type="submit" value="提交">提交</button>
      </tr>
    </form>
  </center>
//Session.java
package com.example.mapper;

import com.example.pojo.User;

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;
import java.io.PrintWriter;

@WebServlet("/Session")
public class Session extends HttpServlet{
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        String password=req.getParameter("password");

        if(username.equals("tom")&&password.equals("tom123")){
            HttpSession session=req.getSession();

            session.setMaxInactiveInterval(60*60*24);
            session.setAttribute("username",username);
            resp.sendRedirect(req.getContextPath()+"/mainServlet");

        }else{
            resp.setContentType("text/html;charset=utf-8");

            PrintWriter pw=resp.getWriter();
            pw.write("账号或密码错误!");
            pw.write("<a href='"+req.getContextPath()+"/index.jsp'></a>");
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

与Cookie的比较

可以看出来,与Cookie相比较的话,Session更具有安全性,范围更广,可以在不同页面共享数据,使用更为方便;