Web---session技术代码演示(request,session,servletContext)(1)

简介: Web---session技术代码演示(request,session,servletContext)

Session会话简介与基本知识点


当浏览器第一次访问服务器时,无论先访问哪一个页面,服务器就会给用户分配一个唯一的会话标识,即jsessionid然后以cookie的形式返回给用户。


会话是指在一段时间内,用户使用同一个浏览器进程与Web应用之间的交互过程。


会话(Session)通常用来跟踪用户的状态,缓存用户在此浏览器进程中的信息。


当用户关闭浏览器,上一个Session也就无法再次获得了(Cookie的maxAge为-1的情况)。再次打开新的浏览器,将开始一个新的会话。

类javax.servlet.http.HttpSession。每一个HttpSession代表用户的一个会话。


每一个Session的过期时间默认为30分钟。


服务器给每个用户创建一个会话,即HttpSession对象,保存在服务器端。

那么,当用户再次访问服务器时,服务器是如何知道还是当前用户呢?

当浏览器再次访问服务器时,会携带包含了jsessionid的cookie访问服务器。服务器根据此id返回此用户的HttpSession对象,就保持了会话。


每一个Session都一个唯一标识,即ID。

当浏览器获取一个新的Session时,用户即可以通过session.geId();打印出ID的值 。

再不关闭浏览器的情况下,在多个页面上跳转,使用的是同一个Session。


image.png


画图演示:

image.png


1、演示request,session,servletContext这3个容器:


index.jsp:


<h1>演示session技术</h1>
    <h2>演示request,session,servletContext这3个容器</h2>
    <form action="SaveServlet" method="post">
        name:<input type="text" name="name"/>&nbsp;&nbsp;
        <input type="submit" />         
    </form>
    <br/>
    <a href="GetServlet">读取这3个容器中的数据</a>

web.xml:

<servlet>
    <servlet-name>SaveServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.session.SaveServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>GetServlet</servlet-name>
    <servlet-class>cn.hncu.servlets.session.GetServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>SaveServlet</servlet-name>
    <url-pattern>/SaveServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>GetServlet</servlet-name>
    <url-pattern>/GetServlet</url-pattern>
  </servlet-mapping>


SaveServlet.java:

package cn.hncu.servlets.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class SaveServlet extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //System.out.println("aaaaa");
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        request.setCharacterEncoding("utf-8");//如果接收的字符有中文,要设这一句
        String name = request.getParameter("name");
        request.setAttribute("name", "request---"+name);
        request.getSession().setAttribute("name", "session---"+name);
        this.getServletContext().setAttribute("name", "servletContext---"+name);
        //把cookie技术和session技术联合起来做应用的一个例子---
        //功能:让用户在关闭浏览器之后,如果5分钟之内再登陆本网站,还能访问到session
        //其实原理很简单,就是向客户端写一个key为"JSESSIONID",value用sessionid的cookie
        //System.out.println(request.getSession().getId());
        //System.out.println(request.getSession().getAttribute("JSESSIONID"));//这个的值是null
        Cookie c = new Cookie("JSESSIONID", request.getSession().getId());
        c.setMaxAge(60*5);//5分钟后过期
        c.setPath(request.getContextPath());//权限给本站的所有网页/servlet
        //---根据客户端无论访问那个网站的哪个网页都会有JSESSIONID可以知道,这个的权限路径肯定是项目根目录下面
        response.addCookie(c);
        out.print("<h1>保存成功!</h1>");
        //System.out.println("bbbbbb");
        out.close();
    }
}


GetServlet.java:

package cn.hncu.servlets.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class GetServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        String reqName = (String) request.getAttribute("name");
        String sessName = (String) request.getSession().getAttribute("name");
        String contName = (String) request.getServletContext().getAttribute("name");
        out.print(reqName+"<br/>");
        out.print(sessName+"<br/>");
        out.print(contName+"<br/>");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }
}


演示结果:

image.png

我再到另外一个浏览器打开:

image.png

可以看到session的name值没有了。

目录
相关文章
|
16天前
|
SQL 缓存 搜索推荐
后端技术在现代Web开发中的应用与挑战
本文将深入探讨后端技术在现代Web开发中的重要性,涵盖从基础架构到性能优化的多个方面。通过分析当前主流后端技术的优缺点,并提供一些实用的解决方案和建议,帮助开发者更好地应对日常开发中的挑战。
33 1
|
7天前
|
前端开发 JavaScript 安全
深入理解Python Web开发中的前后端分离与WebSocket实时通信技术
在现代Web开发中,前后端分离已成为主流架构,通过解耦前端(用户界面)与后端(服务逻辑),提升了开发效率和团队协作。前端使用Vue.js、React等框架与后端通过HTTP/HTTPS通信,而WebSocket则实现了低延迟的全双工实时通信。本文结合Python框架如Flask和Django,探讨了前后端分离与WebSocket的最佳实践,包括明确接口规范、安全性考虑、性能优化及错误处理等方面,助力构建高效、实时且安全的Web应用。
20 2
|
10天前
|
前端开发 API Python
WebSocket技术详解:如何在Python Web应用中实现无缝实时通信
在Web开发的广阔领域中,实时通信已成为许多应用的核心需求。传统的HTTP请求-响应模型在实时性方面存在明显不足,而WebSocket作为一种在单个长连接上进行全双工通信的协议,为Web应用的实时通信提供了强有力的支持。本文将深入探讨WebSocket技术,并通过一个Python Web应用的案例分析,展示如何在Python中利用WebSocket实现无缝实时通信。
16 2
|
12天前
|
SQL 缓存 数据库
构建高效Web应用:掌握Python中的ORM映射技术
在Web开发中,数据库操作至关重要,但直接编写SQL语句会增加代码复杂度并降低效率。对象关系映射(ORM)技术通过将对象模型映射为数据库表,使开发者能以面向对象的方式处理数据,提升开发效率和代码可维护性。本文以Python和SQLAlchemy为例,介绍ORM的基本概念、安装方法及使用技巧,并展示其在提升Web应用性能方面的优势。通过ORM,开发者可以简化数据库操作,专注于业务逻辑实现,提高开发效率和代码质量。
35 1
|
7天前
|
前端开发 Java
org.springframework.web.multipart.MultipartException: Current request is not a multipart request
org.springframework.web.multipart.MultipartException: Current request is not a multipart request
20 0
|
20天前
|
数据处理 Python
Django视图:构建动态Web页面的核心技术
Django视图:构建动态Web页面的核心技术
|
1月前
|
数据库 开发者 Python
web应用开发
【9月更文挑战第1天】web应用开发
40 1
|
21天前
|
数据可视化 图形学 UED
只需四步,轻松开发三维模型Web应用
为了让用户更方便地应用三维模型,阿里云DataV提供了一套完整的三维模型Web模型开发方案,包括三维模型托管、应用开发、交互开发、应用分发等完整功能。只需69.3元/年,就能体验三维模型Web应用开发功能!
41 8
只需四步,轻松开发三维模型Web应用
|
11天前
|
安全 API 开发者
Web 开发新风尚!Python RESTful API 设计与实现,让你的接口更懂开发者心!
在当前的Web开发中,Python因能构建高效简洁的RESTful API而备受青睐,大大提升了开发效率和用户体验。本文将介绍RESTful API的基本原则及其在Python中的实现方法。以Flask为例,演示了如何通过不同的HTTP方法(如GET、POST、PUT、DELETE)来创建、读取、更新和删除用户信息。此示例还包括了基本的路由设置及操作,为开发者提供了清晰的API交互指南。
45 6
|
10天前
|
存储 JSON API
实战派教程!Python Web开发中RESTful API的设计哲学与实现技巧,一网打尽!
在数字化时代,Web API成为连接前后端及构建复杂应用的关键。RESTful API因简洁直观而广受欢迎。本文通过实战案例,介绍Python Web开发中的RESTful API设计哲学与技巧,包括使用Flask框架构建一个图书管理系统的API,涵盖资源定义、请求响应设计及实现示例。通过准确使用HTTP状态码、版本控制、错误处理及文档化等技巧,帮助你深入理解RESTful API的设计与实现。希望本文能助力你的API设计之旅。
33 3
下一篇
无影云桌面