重温Servlet学习笔记--session对象

简介:   session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端.   HttpSession是servlet三大域对象之一,其他两个是request和application(servletContext),所以它也有setAttribute(),getAttribute(),等方法.

  session的类型是属于HttpSession,HttpSession是由javaWeb提供的,用来会话跟踪的类.session是服务器端对象,保存在服务器端.

  •   HttpSession是servlet三大域对象之一,其他两个是request和application(servletContext),所以它也有setAttribute(),getAttribute(),等方法.
  •   HttpSession的会话范围是某用户从首次访问服务器开始,到该用户关闭浏览器结束,session对象会存活在这中间的整个过程,  服务器会为每个客户端创建一个session对象,session就好像是客户在服务器端的账户,他被服务器保存在一个Map里,这个Map被称为session缓存.
  • session的实现原理

   session底层是依赖Cookie的!我们来理解一下session的原理吧!

    当我首次去银行时,因为还没有账号,所以需要开一个账号,我获得的是银行卡,而银行这边的数据库中留下了我的账号,我的钱是保存在银行的账号中,而我带走的是我的卡号。当我再次去银行时,只需要带上我的卡,而无需再次开一个账号了。只要带上我的卡,那么我在银行操作的一定是我的账号!

      当首次使用session时,服务器端要创建session,session是保存在服务器端,而给客户端的session的id(一个cookie中保存了sessionId)。客户端带走的是sessionId,而数据是保存在session中。当客户端再次访问服务器时,在请求中会带上sessionId,而服务器会通过sessionId找到对应的session,而无需再创建新的session。

     下面写一个简单的案例,加深一下对session和cookie的理解,我们要实现一个简单的登录功能,登录成功时会将用户名保存到一个session中,同时也保存到一个cookie中,然后会跳转到成功页面,但用户直接输入url访问成功页面时,需要验证用户是否已登录(用session),如果没有登陆则跳转回登录页面,当浏览器关闭再打开访问登录页面时,自动显示上一次的访问登录用户名(用cookie):

新建一个jsp,命名为login.jsp(head标签内容已省略):

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  
  <body>
  <%
          String username="";
          Cookie[] cookie=request.getCookies();
          if(cookie!=null){
              for(Cookie c:cookie){
                  if("username".equals(c.getName())){
                      username=c.getValue();
                  }
              }
          }
  %>
  <form  action="<c:url value='/LoginServlet'/>" method="post">  
  <label style="font-color:red;">${errorLogin }</label><br>
   用户名:<input type="text" name="username" value="<%=username%>"/><br>
   密码:<input type="password" name="password"/><br>
   <input type="submit" value="登录"/>
  </form>
  
  </body>
</html>

新建一个servlet,命名为LoginServlet,用来处理登录逻辑,并完整各个功能(只提供关键代码):

public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("utf-8");
        response.setContentType("text/html; charset=utf-8");
    String username=request.getParameter("username");
    String password=request.getParameter("password");
    if(username.equals("wang")&&password.equals("123")){
        HttpSession session = request.getSession();
        session.setAttribute("username", username);
        session.setAttribute("password", password);
        Cookie cookie=new Cookie("username",username);
        cookie.setMaxAge(60*60*24*7);
        response.addCookie(cookie);
        response.sendRedirect("/test/sessionDemo1/succ1.jsp");
    }else{
        request.setAttribute("errorLogin", "用户名或密码错误");
        request.getRequestDispatcher("/sessionDemo1/login.jsp").forward(request, response);
    }
    }

最后新建一个登陆成功时的jsp页面,命名为succ1.jsp(只提供body部分代码):

<body>
    <%
        String username=(String)session.getAttribute("username");
        String password=(String)session.getAttribute("password");
        if(username==null){
            request.setAttribute("errorLogin", "您还没有登录,请先登录");
            request.getRequestDispatcher("/sessionDemo1/login.jsp").forward(request, response);
            return;
        }
            
    %>
    登陆成功,你好${username }
  </body>
  • HttpSession的其他方法:
  1. String getId():获取sessionId
  2. int getMaxInactiveInterval();获取session的最大不活动时间,默认为30分钟,如果session在30分钟内没有被使用,Tomcat就会在session池中移除这个session对象
  3. void invalidate();让session失效,用户退出登录时,可以调用该方法
  • web.xml中配置session的最大不活动时间:
      <session-config>
          <session-timeout>20</session-timeout>
      </session-config>

    session最常用的东西就是作为域对象,传递参数,也是最重要的,其他的知识点在某些地方也很重要,要好好理解.

 

相关文章
|
2月前
|
网络协议 前端开发 Java
异步Servlet学习笔记(一)
异步Servlet学习笔记(一)
|
7月前
|
XML 开发框架 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)
|
10月前
|
存储 XML Java
Servlet进阶(Session对象实现登录)
Servlet进阶(Session对象实现登录)
180 0
|
6月前
|
前端开发 Java 应用服务中间件
掌握JavaWeb开发的必备技能:Servlet、JSP、Cookie、Session、EL、JSTL详解 ~~~~B站老杜--Servlet-JSP-课堂笔记(一)
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议
50 0
|
7月前
|
XML 监控 Java
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)4
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)4
|
7月前
|
Java 应用服务中间件 API
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)2
Java Web 项目入门指南(http、Servlet、Request、Response、ServletContext、会话技术[cookie、session]、Filter、Listener)2
|
8月前
|
存储
Servlet Session基本概念和使用方法
Session是Web开发中的一种机制,用于在服务器端跟踪和管理用户的状态信息。它允许服务器在用户访问网站期间存储和检索与特定用户相关的数据。 当用户访问服务器时,服务器会为每个用户创建一个唯一的会话,并为该会话分配一个唯一的会话标识符(Session ID)。这个会话标识符通常通过Cookie在客户端保存,但也可以通过URL参数或其他方式传递。通过会话标识符,服务器能够识别特定用户的请求,并在会话中存储和检索数据。 通过使用Session,服务器可以在用户的整个访问过程中保持用户状态,并且可以在不同的页面和请求之间共享数据。这对于实现用户认证、数据共享、购物车管理等功能非常有用。 需要注意的
85 0
|
8月前
|
XML 存储 前端开发
Servlet技术入门(视频学习笔记)-2
2、ServletContext类的四大作用 获取web.xml中配置的上下文参数context-param 获取当前工程路径,格式:/工程路径 获取工程部署在服务器硬盘上的绝对路径
|
8月前
|
小程序 Java 应用服务中间件
Servlet技术入门(视频学习笔记)-1
一、Servlet技术 1、什么是Servlet Servlet是JaveEE规范之一,规范就是接口 Servlet是JavaWeb三大组件之一。三大组件分别是:Servlet程序、Filter过滤器、Listener监听器 Servlet是运行在服务器上的一个java小程序,它可以接收客户端发送来的请求,并响应数据给客户端
|
10月前
|
安全 Java 编译器
【Java Web编程 八】深入理解Servlet常用对象
【Java Web编程 八】深入理解Servlet常用对象
93 1