JavaEE---Servlet会话跟踪之Cookie

servlet-cookie实现向客户端写cookie信息 title: servlet cookie实现向客户端写cookie信息 date: 2019-07-09 11:00:00 servlet**基础 servlet是Java web应用中最核心的组件,也是web服务器组件,它是一个中间控制层,负责处理客户端提交过来的请求数据以及调用业务逻辑对象,根据业务逻辑来控制页面转发。 cookie** 在互联网中,cookie是小段的文本信息,... 阅读详情

本文的书写参考自电子工业出版社的《Java Web程序设计》第二章第一节。

1、Cookie的创建和使用

Cookie userCookie = new Cookie("userName",userName);

两个参数分别指定了Cookie的属性名称和属性值。此外,Cookie还有其他的方法供调用:

getMaxAge()/setMaxAge() 指的是读取或者设置Cookie的过期时间,如果使用setMaxAge()方法设置了一个负值,则表示该Cookie在用户退出浏览器之后马上过期,如果setMaxAge()指定了一个0值,则表示删除此Cookie.

getValue()和setValue() 指的是读取/设置Cookie的属性值

getComment()和setComment()指读取或设置注释。


创建完成的Cookie对象,就可以使用HttpServletResponse的addCookie()方法将其发送到客户端。

当然使用HttpServletRequest的getCookies()方法可以从客户端获得这个网站的所有Cookie,该方法返回一个包含本站所有Cookie的数组,遍历该数组就可以获得对应的Cookie。


默认情况下,Cookie在客户端是保存在内存中的,如果浏览器关闭,Cookie也就失效了。如果想要让Cookie长久地保存在磁盘上,可以使用setMaxAge()方法设置其过期的时间为正数。比如设置某个Cookie的过期时间为1周则可以用:userCookie.setMaxAge(7 * 24 * 60 * 60);


2、实际开发例子

(1)编写用于接收用户输入的HTML表单文件。一般来说,我们登陆页面都是使用HTML写的,但是这里却没有直接使用,而是使用了一个Servlet来完成此功能。原因是需要通过Servlet去读取客户端的Cookie,HTML并无法完成此功能。JSP是Servlet的前身,所以可以完成Servlet的工作,所以登录页面也可以使用JSP写。

代码如下:

package servlet;

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 LoginServlet extends HttpServlet{
    public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException,IOException{
    	String cookieName = "userName";
    	String cookiePwd = "pwd";
    	Cookie[] cookies = request.getCookies();
    	String userName = "";
    	String pwd = "";
    	String isChecked = "";
    	if(cookies != null){
    		isChecked = "checked";
    		for(int i = 0; i < cookies.length; i++){
    			if(cookies[i].getName().equals(cookieName)){
    				userName = cookies[i].getValue();
    				//System.out.println(userName);
    			}
    			if(cookies[i].getName().equals(cookiePwd)){
    				pwd = cookies[i].getValue();
    				//System.out.println(pwd);
    			}
    		}
    	}
    	response.setContentType("text/html; charset = GBK");
    	PrintWriter out = response.getWriter();
    	out.println("<html>\n");
    	out.println("<head><title>Login</title></head>\n");
    	out.println("<body><center>\n");
    	out.println("<form action='CookieTest'"+" method='POST'>\n");
    	out.println("Name:<input type='text' name='Username' value='"+userName+"'><br/>\n");
    	out.println("Pass:<input type='password' name='Pwd' value='"+pwd+"'><br/>\n");
    	out.println("Keep Status<input type='checkbox' name='saveCookie' value='Yes'>\n");
    	out.println("<br/>\n");
    	out.println("<input type='submit'>\n");
    	out.println("</form></center></body>\n");
    	out.println("</html>\n");
    }
    public void doPost(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,IOException{
    	doGet(request,response);
    }
}
上面的Servlet作为前端使用,首先获取了Cookies数组,如果有则把对应的数据写入到相应的框框中,如果没有(也就是null)则不写入。运行这个Servlet后前端将获得页面。

(2)真正的Controller

package servlet;

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 CookieTest extends HttpServlet{
   public void doGet(HttpServletRequest request,HttpServletResponse response)
     throws ServletException,IOException
   {
	   Cookie userCookie = new Cookie("userName",request.getParameter("Username"));
	   Cookie pwdCookie = new Cookie("pwd",request.getParameter("Pwd"));
	   if(request.getParameter("saveCookie") != null
			   && request.getParameter("saveCookie").equals("Yes")
			   ){
		   userCookie.setMaxAge(7 * 24 * 60 * 60);
		   pwdCookie.setMaxAge(7 * 24 * 60 * 60);
	   }else{
		   userCookie.setMaxAge(0);
		   pwdCookie.setMaxAge(0);
	   }
	   
	   //userCookie.setMaxAge(7 * 24 * 60 * 60);
	   //pwdCookie.setMaxAge(7 * 24 * 60 * 60);
	   response.addCookie(userCookie);
	   response.addCookie(pwdCookie);
	   response.setContentType("text/html");
	   PrintWriter out = response.getWriter();
	   out.println("Welcome," + request.getParameter("Username"));
   }
   public void doPost(HttpServletRequest request,HttpServletResponse response)
		     throws ServletException,IOException{
		    	doGet(request,response);
		    } 
}
每一次用户进入登陆页面的时候都有可能会更改用户名和密码,所以Cookie的实时更新是很重要的。


3、实验过程中出现的错误

1)userName和UserName和Username混淆

2)web.xml的格式应该为:

<servlet-mapping>
    <servlet-name>CookieTest</servlet-name>
    <url-pattern>/CookieTest</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Hello</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/LoginServlet</url-pattern>
  </servlet-mapping>

注意<servlet-mapping></servlet-mapping>内只有一个Servlet及其对应url不然运行会出错,但是不报错。


javaEE复习重点 javaEE 期末复习重点 第一章JavaEE 概述: 1:两层体系应用体系结构 安全性低,部署困难,消耗系统资源 2 三层体系结构应用 安全性高 ;易维护,快速响应 ;系统扩展灵活 JavaEE是一个标准的中间件体系结构 客户层, 表示逻辑层(WEB) 业务逻辑层和企业信息系统层 javaEE的编程思想:组件——容器 ,分布式组件:JSP ,servlet ,EJB JAVAEE框架:组件技... 阅读详情

相关推荐

无迹卡尔曼滤波(UKF)推导

提出,使用了一种不同的方法来计算误差协方差矩阵。它不使用(连续时间)黎卡提方程(Riccati Equations,形如。的一类非线性方程)或(离散时间)协方差传播和更新规律。关键的思想是基于一组特殊的样本点来估计误差协方差,这些点被称为。无迹卡尔曼滤波(Unscented Kalman Filter),最初由。点(Sigma Points),这些点直接通过原始非线性模型传播。无迹变换表示有三个特殊样本点的高斯分布,称为。

生活如此美好,致敬每一个热爱“热爱”的人! 1777

selvlet模板

package ${enclosing_package}; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.serv...

Tw368WJZ的博客 579

腾讯文档API逆向分析:不用Selenium也能批量导出的黑科技

本文揭秘了如何通过Python逆向分析腾讯文档的隐藏API,实现无需Selenium即可批量导出在线表格的高效方法。详细解析了API调用流程、Cookie维护及异常处理技巧,相比传统方案性能提升显著,适用于大量文档导出的自动化场景。

h9j8k7l6m5n的博客 1201

IT兄弟连 JavaWeb教程 Servlet会话跟踪 创建Cookie

Tomcat作为Web服务器,对Cookie提供了良好的支持。那么,运行在Tomcat的Servlet该如何访问Cookie呢?幸运的是,Servlet无需直接和HTTP请求或响应中的原始Cookie数据打交流,这项工作由Servlet容器来完成。Java Servlet API为Servlet访问Cookie提供了简单易用的接口,Cookie用javax.servlet.h...

weixin_33953249的博客 144

硅基半导体量子点:单电子自旋量子比特技术手册

现在我们已经了解了从硅片到容错计算的全部环节,让我们用一张总览图把碎片拼成完整拼图。fill:#333;important;important;fill:none;color:#333;color:#333;important;fill:none;fill:#333;height:1em;important;important;important;color:#000!important;important;important;important;important;color:#000!

VectorShift的博客 371

threejs中使用Reflector实现出倒影效果,并实现背景透明的效果(Reflector镜面背景透明, 倒影弱化)

在项目中遇到要实现倒影效果,threejs给我们提供了Reflector,可以轻松完成镜面效果,实现倒影。但背景不透明;并且反射出的倒影太亮了;网上没搜到解决方案, 自己修改了下源码实现了想要的效果,做个记录...

weixin_40856652的博客 5721

Servlet 会话技术 Cookie的使用

会话技术 http协议请求事务处理没有记忆能力,每次请求都是一次新请求,无法对用户的状态保存,尤其是同一台浏览器的访问,服务器不知道这是刚才的浏览器,所以为了保存和跟踪用户的状态使用会话技术,从用户访问某个网站到关闭浏览器的过程称为会话。 会话技术有两中,客户端会话:Cookie,服务端会话:Session。 Cookie的使用 Cookie是浏览器每次请求后再关闭时从服务端以响应头set-cookie发送给每一个用户的浏览器,最终保存在本机的文件夹中。 构造方法 javax.servlet.http 包中

yc_1314的博客 192

Android一个APP里面最少有几个线程

Android应用启动时,默认会创建一个进程,该进程中最少包含负责处理用户交互、UI更新等核心操作,所有与界面相关的逻辑必须在此线程执行。若在此线程执行耗时操作(如网络请求),会导致界面卡顿甚至触发ANR(应用无响应)。当对象重写了finalize()方法时,该线程负责将这些对象放入队列并调用其finalize()方法,完成资源释放后再由GC回收。监控的执行效率。如果finalize()方法执行超时(默认10秒),此线程会触发虚拟机退出以防止应用长时间阻塞。

编程进化论 613

基于Cookies的会话跟踪技术

会话跟踪: Java Servlet API使用Session来跟踪会话和管理会话内的状态通过在每一个请求和响应中包含SessionID,服务器就可将用户分开。 在Servlet规范中,有三种机制用于会话跟踪: 1、SSL(secure socket layer)会话 2、Cookies 3、URL重写 1、Cookies: Cookies是一种由服务器发给客户的片段信息,存储在客户

lalalalalala_的博客 466

LVGL misc timer 定时器(lv_timer.c)

定时器机制是LVGL中非常重要的一项功能,它承载了LVGL的延时任务执行,周期任务执行,时序任务执行等,可以说理解定时器的设计就一定程度上理解发LVGL的任务调度机制。

Bigan(安)的博客 4730

【XSRP软件无线电】基于软件无线电平台的FM数字接收系统设计(含有完整工程资料获取链接)

随着无线通信技术的快速发展,软件无线电(Software Defined Radio, SDR)作为一种新兴的无线通信技术,逐渐成为研究和应用的热点。传统的无线接收机通常依赖于专用硬件实现其功能,灵活性和可扩展性有限。相较之下,软件无线电利用软件来实现信号处理和调制解调功能,能够适应多种频率和调制方式,使无线通信系统更加灵活和高效。在FM(频率调制)广播中,数字接收技术的应用不仅提高了信号的抗干扰能力,还能提供更好的音质和更多的附加信息(如广播电台名称、节目内容等)。

嵌入式技术开发 1367

javaee2020-教程直播-11用Servlet会话跟踪技术与读写Cookie

Servlet使用cookie 许多应用程序希望将用户浏览历史的当前状态存储在客户机中,以便当用户再次返回应用程序时,他从离开的位置开始。通常,对于这个要求,使用cookie。您可以将cookie视为存储在客户机上的键值对数据。当从浏览器中发出请求时,浏览器可以读取或写入这些值。 简单地实例化一个新的Javax.servlet.http.Cookie类创建一个cookie对象。一旦实例化了cook...

fhzheng for c java javascript sql html css 529

图文教程本地部署开源扣子Coze Studio工作流并接入 Gemini 大模型(windows亲测) Coze Studio 本地部署、Gemini 模型接入、开源 AI 工具平台、大模型工作流搭建

本文介绍了在Windows系统本地部署开源AI工具平台Coze Studio并接入Google Gemini大模型的完整教程。主要内容包括:1) 环境准备要求(Docker等);2) 获取源码和配置Gemini模型(需API密钥);3) 通过Docker Compose部署服务;4) 浏览器访问验证。文章指出该平台适合私有化部署,支持智能体和工作流搭建,但也存在插件系统不完善等局限。最后提供了相关资源链接,为开发者实现本地AI解决方案提供了实用指南。

代码简单说 Vue、JAVA、PHP、Node.js 熟练运用,接口、架构、性能全搞定。 2780

Servlet

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

qq_52150810的博客 167

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

不确定客户端是否禁用cookie,可以使用URL重写技术

客户端禁用cookie情况下的URL重写: 我们都知道session的实现主要两种方式:cookie与url重写,而cookie是首选(默认)的方式,因为各种现代浏览器都默认开通cookie功能,但是每种浏览器也都有允许cookie失效的设置。 由于浏览器默认启动cookie功能,而且普通客户一般都不会取消cookie功能。久而久之,我们写代码的时候,也就不会在意session的具体实现,其实这里面还是有很多值得注意的地方,尤其在用户取消cookie功能的情况下。 Java EE servlet: pack

代码小白 487

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

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

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

正在努力工作的搬砖人 1901

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

JavaWeb---HttpServlet会话管理

javaEE的三层架构:web层、Service层、Dao层。 web层 JSP:获取用户信息,展示数据(利用重定向、请求转发),使用EL表达式展示页面 Service层 具体的业务层(用Servlet) 调用Dao层 Dao层(Data Access Object:数据访问对象) 查询数据库 Session:一个闭环 Session于Session之间没有关系 会话技术 程序中...

253

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

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

Hedy的博客 296

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

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

technique_otaku的博客 199

【面试】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

Session会话追踪的实现机制

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

qq_55897122的博客 298

JavaEE复习资料

JavaEE概述(组件-容器编程思想) 两层体系结构(C/S)和三层体系结构(B/S) C/S分为客户端和数据库服务器。 缺点:安全性低,部署困难,耗费系统资源 B/S分为客户端,WEB应用服务器,数据库服务器 优点:安全性高,易维护,快速响应,系统扩展灵活 什么是JavaEE? 标准中间件体系结构 企业分布式应用开发标准 Servlet(Web组件) 概述 独立于操作系统平台和网络传输协议的服务端Java应用程序,可生成动态web页面。 与传统Java应用程序的区别 由包含Ja

m0_46210273的博客 549

Java EE

Java EE

m0_62254872的博客 148

【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
上一篇: Java内存分配浅析
下一篇: JavaEE---Servlet会话跟踪之Session
louis9212
博客等级 码龄14年 8粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值