IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> javaEE四_session -> 正文阅读

[Java知识库]javaEE四_session


session基本运行机制

session
● Session对象是javax.servlet.http.HttpSession的实例
它在第一个JSP页面被装载时自动创建,完成会话期管理。
从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开 这个服务器结束,被称为一个会话。
在这里插入图片描述
在这里插入图片描述
session会话跟踪机制
在这里插入图片描述


服务器响应sessionID

Servlet API中,定义了HttpSession接口,用来封装会话对象。
● 会话对象是Web容器创建的,
在Servlet中使用 HttpServletRequest中的方法获得会话对象。即生成一个随机数,称为 会话ID,并将ID值封装成一个session,返回给 客户端。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
LoginServlet.class

package com.ffyc.webpro.servlet;

import com.ffyc.webpro.dao.LoginDao;
import com.ffyc.webpro.model.User;
import com.google.gson.Gson;

import javax.servlet.ServletException;
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;

/*
  程序:既定流程
*/
public class LoginServlet extends HttpServlet {

    /*
      登录处理
    */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out =null;
        try{
            resp.setContentType("text/html;charset=utf-8");  //响应头
            req.setCharacterEncoding("utf-8");  //设置编码格式
            String account=req.getParameter("account");
            String password=req.getParameter("password");
            LoginDao loginDao=new LoginDao();
            User user=loginDao.checkLogin(account,password);
            out= resp.getWriter();
            //问题:从服务器端向客户端要响应更多的数据,现在响应 int 字符串
            //java程序一般将数据封装在对象中,响应到客户端,而客户端是javaScript语言,两边对象格式不一致

            //解决:前面响应字符串,前端可以接收到,那么在java中需要对 对象中的数据进行转换
            //     早期解决方案是将对象中的数据写入带xml文件中,将xml文件返回,这种语言比较麻烦
            //现在诞生了一种轻量级的解决方案 json(javaScript对象表现形式) 是一种轻量级的数据格式 本质是字符串
            //对象{键:值,键:值...}  集合[{键:值,键:值...},{键:值,键:值...},{键:值,键:值...}...]
            if(user!=null){
                //out.println("{id:"+user.getId()+",account:"+user.getAccount()+"}");
                //获取服务器生成的session对象
                HttpSession session=req.getSession();
                //向session对象设置一组键值,登录成功后将用户信息存储到一个session对象中
                session.setAttribute("user",user);

                Gson gson=new Gson();
                String s=gson.toJson(user);
                System.out.println(s);
                out.println(s);
            }else{
                out.println(1);
            }
        }catch (Exception e){
            e.printStackTrace();
            out.println(2);
        }
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();
        System.out.println(session.getId());
        User user=(User)session.getAttribute("user"); //返回值是Object类型 需要向下转型
        System.out.println(user.getAccount()+"::"+user.getId());
    }
}

success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-1.8.3.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function(){
            var str=window.sessionStorage.getItem("user");
            var user=$.parseJSON(str);
            console.log(user);
            $("#accountId").html(user.account)
        })

        function test(){
            $.get("login",function (res){

            });
        }
    </script>
</head>
<body>
登录成功<span id="accountId"></span>

<input type="button" value="测试" onclick="test()">
</body>
</html>

生命周期

方法

HttpSession 接口定义的方法
在这里插入图片描述


会话对象创建

有若干客户端与服务器连接,服务器会为每个客户端的一次会话创建一 个会话对象

会话时间

秒为单位
将会话的有效时长设置为2小时
session.setMaxInactiveInterval(26060);
也可以在xml中配置
在这里插入图片描述
在这里插入图片描述


销毁

每销毁一次重新获取id创建
在这里插入图片描述
在这里插入图片描述


安全退出

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


success.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="js/jquery-1.8.3.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function(){
            var str=window.sessionStorage.getItem("user"); //拿到json字符串
            //前端判断用户是否登录
            if(str==null){
                location.replace("login.html")
                return;
            }
            var user=$.parseJSON(str);
            $("#accountId").html(user.account)
        })

        /*function test(){
            $.get("login",function (res){

            });
        }*/

        //安全退出
        function exit(){
            if(confirm("您确定要退出吗?")){
                //删除前端浏览器存储的用户信息
                window.sessionStorage.removeItem("user");
                //向服务器发送请求,销毁session
                $.get("login",function(res){
                    location.replace("login.html")
                });
            }
        }
    </script>
</head>
<body>
登录成功<span id="accountId"></span>

<!--<input type="button" value="测试" οnclick="test()">-->
<input type="button" value="安全退出" onclick="exit()">
</body>
</html>

LoginServlet.class

package com.ffyc.webpro.servlet;

import com.ffyc.webpro.dao.LoginDao;
import com.ffyc.webpro.model.User;
import com.google.gson.Gson;

import javax.servlet.ServletException;
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;

/*
  程序:既定流程
*/
public class LoginServlet extends HttpServlet {

    /*
      登录处理
    */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter out =null;
        try{
            resp.setContentType("text/html;charset=utf-8");  //响应头
            req.setCharacterEncoding("utf-8");  //设置编码格式
            String account=req.getParameter("account");
            String password=req.getParameter("password");
            LoginDao loginDao=new LoginDao();
            User user=loginDao.checkLogin(account,password);
            out= resp.getWriter();
            //问题:从服务器端向客户端要响应更多的数据,现在响应 int 字符串
            //java程序一般将数据封装在对象中,响应到客户端,而客户端是javaScript语言,两边对象格式不一致

            //解决:前面响应字符串,前端可以接收到,那么在java中需要对 对象中的数据进行转换
            //     早期解决方案是将对象中的数据写入带xml文件中,将xml文件返回,这种语言比较麻烦
            //现在诞生了一种轻量级的解决方案 json(javaScript对象表现形式) 是一种轻量级的数据格式 本质是字符串
            //对象{键:值,键:值...}  集合[{键:值,键:值...},{键:值,键:值...},{键:值,键:值...}...]
            if(user!=null){
                //out.println("{id:"+user.getId()+",account:"+user.getAccount()+"}");
                //获取服务器生成的session对象
                HttpSession session=req.getSession();
                //向session对象设置一组键值,登录成功后将用户信息存储到一个session对象中
                session.setAttribute("user",user);

                //session.setMaxInactiveInterval(10);

                Gson gson=new Gson();
                String s=gson.toJson(user);
                System.out.println(s);
                out.println(s);
            }else{
                out.println(1);
            }
        }catch (Exception e){
            e.printStackTrace();
            out.println(2);
        }
    }

    //安全退出,销毁服务器端的session
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        HttpSession session=req.getSession();  //请求
        session.invalidate();        //销毁浏览器
        //System.out.println(session.getId());  //每一次强制销毁重新获取id创建
        //User user=(User)session.getAttribute("user"); //返回值是Object类型 需要向下转型
        //System.out.println(user.getAccount()+"::"+user.getId());
        //System.out.println(session.isNew());
    }
}

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-12 17:18:07  更:2022-03-12 17:20:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:37:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码