JavaEE---Servlet会话跟踪之Session

JAVA私房菜专栏之J2EE基础知识 Servlet总结 阐述Servlet和CGI的区别? CGI的不足之处: Servlet的优点: Servlet接口中有哪些方法及Servlet生命周期探秘 get和post请求的区别 什么情况下调用doGet()和doPost() 转发(Forward)和重定向(Redirect)的区别 自动刷新(Refresh) Servlet与线程安全 JSP和Servlet是什么关系 JSP工作原理 JSP有哪些内置对象、作用分别是什么 Request对象的主要方法有哪些 request.getAttr.. 阅读详情
<html>
<head>
<title>Session</title>
</head>
<body>
 <center>
   <form action="servlet/FirstServlet" method="POST">
     <table>
       <tr>
        <td>输入数据:<input type="text" name="count"></td>
        </tr>
     </table>
     <center><input type="submit"></center>
   </form>
 </center>
</body>
</html>
package servlet;

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

public class FirstServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public FirstServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
        request.setCharacterEncoding("GBK");
        response.setContentType("text/html;charset=GBK");
        PrintWriter out = response.getWriter();
        String str = request.getParameter("count");
        request.setAttribute("request_param", str);
        HttpSession session = request.getSession();
        session.setAttribute("session_param", str);
        out.println("<a href='SecondServlet'>NextPage</a>");
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}
package servlet;

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

public class SecondServlet extends HttpServlet {

	/**
	 * Constructor of the object.
	 */
	public SecondServlet() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
         doPost(request,response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
         Object obj = request.getAttribute("request_param");
         String request_param = null;
         if(obj != null){
        	 request_param = obj.toString();
         }else{
        	 request_param = "null";
         }
         HttpSession session = request.getSession();
         Object obj2 = session.getAttribute("session_param");
         String session_param = null;
         if(obj2 != null){
        	 session_param = obj2.toString();
         }else{
        	 session_param = "null";
         }
         response.setContentType("text/html;charset=GBK");
         PrintWriter out = response.getWriter();
         out.println("<h2>请求对象中的参数是:"+request_param+"</h2>");
         out.println("<h2>Session对象中的参数是:"+session_param+"</h2>");
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}

}

Session常用的方法如下:

public void setAttribute(String name,Object value);

public object getAttribute(String name);

public void removeAttribute(String name);

public Enumeration getAttributeNames();

public void invalidate();用于销毁Session对象

public Boolean isNew();

public long getCreationTime();

public long getLastAccessedTime();

public int getMaxInactiveInterval(int seconds);允许客户请求的最长时间

ServletContext getServletContext();

public String getId();

其中:

HttpSession session = request.getSession()或者HttpSession session = request.getSession(true);用于获取当前的Session;

前者如果该会话对象不存在则会创建一个新的会话;

getSession(boolean create)返回当前请求的会话,如果当前请求不属于任何会话,而且create为true的话则会创建一个新的会话,否则返回null,此后所有来自同一个对象的请求都属于这个会话,通过它的getSession(false)返回的是当前的会话。

这里需要厘清的是:当前会话的概念:

在应用程序有一个ServletContext的中心上下文;

里面有一个或者多个Session会话,每一个Session对应一个客户端。

在每个Session里面有一个或者多个request。每个request对应于每个Servlet

这也是上面的例子结果是,request_param为null而session_param为用户输入的字符串(注意设置字符编码)

Session的生命周期为:

1)客户端向服务器第一次发送请求的时候,request中并没有SessionID

2)此时服务器会创建一个Session对象,并分配一个SessionID。Session对象保存在服务器端,此时为新建的状态,调用session.isNew()方法会返回true

3)当服务器端处理完毕之后,会将SessionID通过response对象传回到客户端,浏览器负责保存到当前的进程中

4)当客户端再次发送请求的时候,会同时将SessionID发送给服务器

5)服务器根据传递过来的SessionID将这次的请求与保存在服务器端的Session对象联系起来,此时Session已经不处于新建状态

6)循环执行过程3-5,一直到Session超时或者被销毁。



Lenovo 拯救者15ISK硬件升级实战:从内存到固态硬盘的全面优化 本文详细介绍了为联想拯救者15ISK笔记本电脑进行硬件升级的完整实战指南。通过评估升级可行性,指导如何挑选兼容的内存条与NVMe固态硬盘,并提供详细的拆机安装步骤与系统安装避坑技巧。升级后,笔记本的开机速度、软件加载及多任务处理能力获得飞跃式提升,让老旧设备重获新生。 阅读详情

相关推荐

1.Fay-UE5数字人工程导入(UE数字人系统教程)

ue5数字人系列教程(含源文件工程)

1万+

Session会话追踪的实现机制

在Web应用程序中,我们经常要跟踪用户身份。例如:当一个用户登录成功后,如果他继续访问其他页面,Web程序如何才能识别出该用户身份?当一个用户在操作自己的购物车时,Web程序如何才能识别出该用户身份?因为HTTP协议是一个无状态协议,即Web应用程序无法区分收到的两个HTTP请求是否是同一个浏览器发出的。为了跟踪用户状态,服务器可以向浏览器分配一个唯一ID,并以Cookie的形式发送到浏览器,浏览器在后续访问时总是附带此Cookie,这样,服务器就可以识别用户身份。...

qq_55897122的博客 298

别再只调颜色阈值了!优化K210色块追踪性能的5个关键参数与实战技巧

本文深入探讨了K210色块追踪性能优化的五大核心策略,包括图像预处理参数精细调控、find_blobs参数进阶配置、运动控制算法升级、硬件时序优化以及可视化调试系统构建。通过实战技巧和参数调整方法,帮助开发者提升K210在色块追踪项目中的识别稳定性和响应速度,适用于云台追踪等应用场景。

weixin_42531588的博客 225

【面试】JavaEE基础

参考:https://github.com/Snailclimb/JavaGuide/blob/master/docs/java/J2EE基础知识.md 1、Servlet 参考:https://www.cnblogs.com/Rain1203/p/10919557.html 2、get和post请求的区别? 1)get请求用来从服务器上获取资源,post是用来向服务...

weixin_30666943的博客 61

数理统计四大分布---正态分布、卡方分布、学生t分布和F分布

在统计学上,我们会遇到一些常见的分布,除了正态分布外,,如t检验对应的t分布,检验对应的分布,方差分析对应的F分布等。这些分布是统计学的基础,在假设检验、方差分析等领域都起着至关重要的作用。在此,我们对这四种分布做详细的介绍,并附上MATLAB代码。 四种分布的讲解摘自MATLAB 2016的统计学和机器学习工具箱,有兴趣的可以去查看英文原版。 另外,为了方便,上传文档为图片格式,可能有些模糊...

suncangan的博客 5万+

用Arduino+ESP32复现TDOA定位:低成本实现厘米级精度的完整教程

本文提供了一套利用Arduino和ESP32平台,结合NRF24L01+模块与GPS/PPS时间同步方案,低成本复现高精度TDOA(到达时间差)定位系统的完整教程。教程详细阐述了从硬件选型、天线阵列设计、时间同步实现到核心算法与多径抑制的实战步骤,旨在帮助开发者和硬件爱好者以可控成本实现厘米级精度的定位演示系统。

weixin_29084111的博客 162

Servlet

会话对象是容器创建的,并保存在容器中,如果客户端连接到服务器后,不做任何操作,那么容器维护这些会话对象将占用很多资源。因此,容器会在默认时间内销毁会话对象,多数容器默认30分钟销毁会话对象。使用此对象异步向服务器发送请求,后端响应的内容会反馈给XMLHttpRequest对象,再从js中把响应的内容更新到网页的某个标签上,整个过程页面不会被覆盖,不会刷新。HttpSession是接口,会话对象是Web容器创建的,在Servlet中使用HttpServletRequest中的方法获得会话对象。...

qq_52150810的博客 167

使用这个算法我可以实现英雄联盟里英雄的走位|Java 开发实战

A算法,A(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。 基本概念 首先在大学我们遇到最多的算法Dijkstra、Floyd、广度搜索、深度搜索。关于这些算法我们以后再慢慢的研究,今天的重点在A算法上。A算法是一种启发式算法。与上述几种算法不同的是A*算法在考虑起始节点的同时还会考虑到目标节点的代价。 在A*算法中我们给每个节点都定义一些属性。最基本的就是下文提到的三基数-这里的三基数是我自己定义.

Java进阶营 312

JavaWeb三大组件之Servlet详解:Servlet使用案例、继承关系、生命周期、会话跟踪 以及 服务器内部转发和客户端重定向 详解

本文通过一个Servlet使用案入门,进而分析Servlet 的继承关系、生命周期、会话跟踪 以及 服务器内部转发和客户端重定向 详解,通过本章学习,还能巩固计算机网络的相关知识,并且能实际体验如何使用cookie和session来维持客户端和服务端的会话的。

正在努力工作的搬砖人 1901

SGP4/SDP4详解

**SGP4** (Simplified General Perturbations Version 4) 和 **SDP4** (Simplified Deep-space Perturbations Version 4) 是一组**解析轨道预报模型**,用于预测地球轨道卫星的位置和速度。它们是北美防空司令部(NORAD)维护的**TLE**数据格式的标准配套算法。 简单来说:**TLE是卫星轨道的"身份证",而SGP4/SDP4是解读这张身份证的"说明书"**。

ScilogyHunter的博客 589

反光柱定位算法实战05:Cartographer Landmark融合定位——从原理到实战

本文介绍了CartographerLandmark融合定位方案,该方案将反光柱作为Landmark节点直接融入Cartographer后端优化框架,避免了传统双系统切换导致的位姿跳变问题。文章详细阐述了Landmark的核心原理、数据发布格式(包括ID、坐标、权重等关键字段)以及两种工作模式(建图模式和导航模式)。特别指出组合反光柱作为Landmark可提供方向参考,有效解决镜像歧义问题。该方案通过统一优化框架实现稳定定位,尤其适用于缺乏自然特征的环境,但存在ID匹配不稳定等局限性。整体而言,Cartogr

Studying…… 424

Java EE入门教程系列第四章Servlet(三)——会话跟踪

4.3 会话跟踪 4.3.1 Cookie HTTP协议是一个无状态的协议,无状态也就是说,如果此时的状态是连接的,下一刻状态就可能是断开的,状态是不稳定的。 Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站信息的一种方式。Cookie是由web服务器保存在用户浏览器(客户端)上的小文本文件,可以包含有关用户的信息。无论何时用户链接到服务器,web站点都可以访问Cookie信息...

Hedy的博客 296

STM32入门教程:智能汽车控制

智能汽车是近年来快速发展的领域之一,它结合了嵌入式系统、传感器和通信技术,通过智能化的控制算法和决策系统实现自主导航、避障、环境感知等功能。在这篇教程中,我们将以 STM32 微控制器为核心,通过编写代码案例来介绍智能汽车的控制原理和实现方法。步骤三:决策与执行 最后,我们根据传感器数据做出相应的决策,并执行相应的动作。案例:智能汽车的避障功能 在这个案例中,我们将实现智能汽车的避障功能。感知系统负责感知汽车周围的环境,包括障碍物的距离、车辆的角度等信息。下面我们通过一个具体的案例来演示代码的编写。

2401_85258012的博客 928

Session

服务端会话跟踪技术:将数据保存到服务端JavaEE提供HttpSession接口,来实现一次会话的多次请求数据共享功能使用:1:获取session对象2:session对象功能void setAttribute(String name,Object o) :将数据存储到session中Object getAttribute(String name) 根据键获取值void removeAttribute(String name) 根据键,删除值创建一个Servlet1存session。

学习笔记 233

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Java EE(Java Web)】期末复习 知识点总结 第四节 Servlet(超详细讲解 !!!一篇学会Servlet)

Servlet是用于扩展服务器功能的Java应用程序,可生成动态Web页面。它通过HttpServlet类处理HTTP请求,使用doGet()和doPost()方法分别处理GET和POST请求。Servlet支持会话跟踪技术(Cookie、URL重写、HttpSession)来维持用户状态,并能通过ServletContext实现应用级别的数据共享。虽然开发效率较低且功能有限,但Servlet作为Java Web开发的基础技术,为后续框架提供了底层支持。典型应用包括表单处理、动态内容生成和数据库交互等场景。

2301_81897737的博客 1414

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Servlet教程

Servlet教程一、 Servlet简单介绍Servlet是对支持Java的server的一般扩充。它最常见的用途是扩展Webserver,提供非常安全的、可移植的、易于使用的CGI替代品。它是一种动态载入的模块,为来自Webserver的请求提供服务。它全然运行在Java虚拟机上。由于它在server端运行,因此它不依赖于浏览器的兼容性。servlet容器:负责处理...

weixin_30914981的博客 61

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

javaee开发笔记

javaee开发笔记     tomcat处理静态html的能力差,可以将tomcat与apache集成到一起,apache处理html,而tomcat处理jsp和servlet,如果要进行EJB开发,也需要集成JBoss     Lomboz插件可以将很多j2ee组件,java应用服务器和web应用开发集成到eclipse中,myeclipse插件主要用来对structs,sf,hibe

stay hungry ! stay foolish! 545

Java知识大整理(2) JavaEE基础

J2EE基础Servlet概述CGI和ServletServlet生命周期get和postdoGet和doPost转发forward和重定向redirectServlet与线程安全解决:JSP和ServletJSP内置对象Requests、Response对象方法有哪些getAttribute()和getParameter()include指令和行为JSP九大内置对象、七动作、三指令JSP四种作用...

technique_otaku的博客 199

关于session的实现:cookie与url重写

本文讨论的语境是java EE servlet。我们都知道session的实现主要两种方式:cookie与url重写,而cookie是首选(默认)的方式,因为各种现代浏览器都默认开通cookie功能,但是每种浏览器也都有允许cookie失效的设置。由于浏览器默认启动cookie功能,而且普通客户一般都不会取消cookie功能。久而久之,我们写代码的时候,也就不会在意session的具体实现,其实这...

网站开发初中级代码参考-转载 120

JavaEE总结

JavaEE总结

Bedded的博客 545

Java EE

Java EE

m0_62254872的博客 148

springboot项目url有jsessionid=3E24748E9E..错误

解决springboot中url的;jsessionid=问题

qq_45600119的博客 436

servlet学习

1.创建 注意javaee7 2.创建类配置web.xml servlet默认第一次访问时创建,可以通过< load-on-startup >改变,负数第一次访问,正数放服务器启动.servlet是单例设计模式,是一个接口 注解配置 GET请求参数在url后,url长度有限制,不安全,没有请求体 POST请求参数在请求体中,url长度没有限制,安全,有请求体 Requet 原理:to...

qq_40691682的博客 195

会话管理机制:Cookie和Session

Cookie与Session都可以进行会话跟踪,但是实现的原理不太一样。一般情况下二者均可以满足需求,但有时候不可以使用Cookie,有时候不可以使用Session。一、Session与Cookie的比较 1、 从存取方式上比较Cookie中只能保存ASCII字符串,如果需要存取Unicode字符或者二进制数据,需要进行UTF-8,GBK或者BASE64等方式的编码。Cookie中也不能直接存取Ja

wujingjing_crystal的专栏 1326
上一篇: JavaEE---Servlet会话跟踪之Cookie
下一篇: 最字头之五:最长递增子序列(未完成)
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值