java logout session_会话跟踪技术--session的使用

会话跟踪技术--session的使用

会话跟踪:

1、使用隐藏表单字段

2、URL重写

http://host/path/file.jsp?sessionid=landril

3、持久Cookie

4、会话HttpSession

一、使用session的简单步骤

获取HttpSession(request.getSession()方法)对象,查找与该会话相关的信息(session.getAttribute()),存储会话中的信息(session.setAttribute()),删除会话中的数据(session.removeAttribute()),删除当前会话(session.invalidate())

在session中,可以存储任意数量的键值对,通过键即可获取相应的值,即使用:session.getAttribute(“key”);。

二、session的常用方法

1、getAttribute():从session中获取以前存储的值

2、getAttributeNames():返回session中所有属性的名称

3、setAttribute():将键与值关联起来,存储进session

4、removeAttribute():删除session中存储的对应键的值

5、invalidate():删除整个session及其存储的键值

6、logout():注销当前用户

7、getId():获取每个session对应的唯一ID

8、getCreationTime():获取session创建的时间

9、getLastAccessedTime():获取session最后被访问的时间

10、getMaxInactiveInterval():在用户没有访问的情况下,会话在被自动废弃之前应该保持多长时间

三、使用session的一个例子,拥有购物车的在线商店

1、CatalogPage.java

packagecom.landril.session;

importjava.io.IOException;

importjava.io.PrintWriter;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

publicclassCatalogPageextendsHttpServlet {

privateCatalogItem[]items;

privateString[]itemIds;

privateStringtitle;

protectedvoidsetItems(String[] itemIds) {

this.itemIds= itemIds;

items=newCatalogItem[itemIds.length];

for(inti = 0; i

items[i] = Catalog.getItem(itemIds[i]);

}

}

protectedvoidsetTitle(String title) {

this.title= title;

}

publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

if(items==null){

response.sendError(response.SC_NOT_FOUND,"Missing Items:");

return;

}

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("

"+title+"

"+title+"

");

CatalogItem item;

for(inti = 0; i

out.println("


");

item =items[i];

if(item ==null)

out.println("Unknow itemId: "+itemIds[i]);

else{

out.println();

String formURL = request.getContextPath()+"/orderPage";

formURL = response.encodeURL(formURL);

out.println("

");

out.println("");

out.println(newString(item.getSDesc().getBytes("utf-8"),"GBK")+"$"+item.getPrice()+item.getLDesc());

out.println("

");

}

}

}

}

2、ComputerBook.java

packagecom.landril.session;

publicclassComputerBookextendsCatalogPage{

publicvoidinit(){

String[] ids = {"book1","book2","book3","book4"};

setItems(ids);

setTitle("Japanese Book");

}

}

3、JapaneseBook.java

packagecom.landril.session;

publicclassJapaneseBookextendsCatalogPage{

publicvoidinit(){

String[] ids = {"book5","book6"};

setItems(ids);

setTitle("Computer Book");

}

}

4、OrderPage.java

packagecom.landril.session;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.util.List;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importjavax.servlet.http.HttpSession;

publicclassOrderPageextendsHttpServlet {

publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)

throwsServletException, IOException {

HttpSession session = request.getSession();

ShoppingCart cart;

synchronized(session){

cart = (ShoppingCart)session.getAttribute("shop");

if(cart ==null){

cart =newShoppingCart();

session.setAttribute("shop", cart);

}

String itemId = request.getParameter("itemId");

if(itemId !=null){

String num = request.getParameter("num");

if(num ==null)

cart.addItem(itemId);

else{

intnumItems;

try{

numItems = Integer.parseInt(num);

}catch(NumberFormatException e) {

numItems = 1;

}

cart.setNum(itemId, numItems);

}

}

}

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title ="Your Order";

out.println("

"+title+"

"+title+"

");

synchronized(session){

List itemOrders = cart.getItemOrders();

if(itemOrders.size() == 0)

out.println("No items");

else{

out.println("

Item IDShort DescriptionLong DescriptionUnit PriceNumberTotal Price");

ItemOrder order;

for(inti = 0; i < itemOrders.size(); i++) {

order = (ItemOrder)itemOrders.get(i);

out.println("

"+order.getItemId()+""+order.getSDesc()+""+order.getLDesc()+""+order.getUnitPrice()+"");

out.println("

");

out.println("");

out.println("

");

out.println(order.getTotalPrice());

}

String checkURL = response.encodeURL(request.getContextPath()+"/check.html");

out.println("

");

out.println("

");

}

}

}

}

5、ShoppingCart.java

packagecom.landril.session;

importjava.util.ArrayList;

importjava.util.List;

publicclassShoppingCart {

privateListitemOrders;

publicShoppingCart() {

itemOrders=newArrayList();

}

publicList getItemOrders(){

returnitemOrders;

}

publicsynchronizedvoidaddItem(String itemId){

ItemOrder order;

for(inti=0;i

order = (ItemOrder)itemOrders.get(i);

if(itemId.equals(order.getItemId())){

order.addNum();

return;

}

}

ItemOrder newOrd =newItemOrder(Catalog.getItem(itemId));

itemOrders.add(newOrd);

}

publicsynchronizedvoidsetNum(String itemId,intnum){

ItemOrder order;

for(inti = 0; i

order = (ItemOrder)itemOrders.get(i);

if(itemId.equals(order.getItemId())){

if(num <=0)

itemOrders.remove(i);

else

order.setNum(num);

}

return;

}

ItemOrder newOrd =newItemOrder(Catalog.getItem(itemId));

itemOrders.add(newOrd);

}

}

6、CatalogItem.java

packagecom.landril.session;

publicclassCatalogItem {

privateStringitemId;

privateStringsDesc;

privateStringlDesc;

privatefloatprice;

publicString getItemId() {

returnitemId;

}

publicvoidsetItemId(String itemId) {

this.itemId= itemId;

}

publicString getLDesc() {

returnlDesc;

}

publicvoidsetLDesc(String desc) {

lDesc= desc;

}

publicfloatgetPrice() {

returnprice;

}

publicvoidsetPrice(floatprice) {

this.price= price;

}

publicString getSDesc() {

returnsDesc;

}

publicvoidsetSDesc(String desc) {

sDesc= desc;

}

publicCatalogItem(String itemId, String desc, String desc2,floatprice) {

super();

this.itemId= itemId;

sDesc= desc;

lDesc= desc2;

this.price= price;

}

}

7、ItemOrder.java

packagecom.landril.session;

publicclassItemOrder {

privateCatalogItemitem;

privateintnum;

publicItemOrder(CatalogItem item) {

setItem(item);

setNum(1);

}

publicCatalogItem getItem() {

returnitem;

}

publicvoidsetItem(CatalogItem item) {

this.item= item;

}

publicintgetNum() {

returnnum;

}

publicvoidsetNum(intnum) {

this.num= num;

}

publicString getItemId() {

returnitem.getItemId();

}

publicString getSDesc() {

returnitem.getSDesc();

}

publicString getLDesc() {

returnitem.getLDesc();

}

publicfloatgetUnitPrice() {

returnitem.getPrice();

}

publicvoidaddNum() {

setNum(num+ 1);

}

publicvoidcancelOrder() {

setNum(0);

}

publicfloatgetTotalPrice() {

returnnum* getUnitPrice();

}

}

8、Catalog.java

packagecom.landril.session;

publicclassCatalog {

privatestaticCatalogItem[]items= {

newCatalogItem("book1","Hibernate","Hibernate,Hibernate", 57),

newCatalogItem("book2","Spring","Spring,Spring", 36),

newCatalogItem("book3","Tomcat","Tomcat,Tomcat", 23),

newCatalogItem("book4","Jboss","Jboss,Jboss", 35),

newCatalogItem("book5","Japanese1","Japanese1,Japanese1", 35),

newCatalogItem("book6","Japanese2","Japanese2,Japanese2", 23) };

publicstaticCatalogItem getItem(String itemId) {

CatalogItem item;

if(itemId ==null)

returnnull;

for(inti = 0; i

item =items[i];

if(itemId.equals(item.getItemId()))

returnitem;

}

returnnull;

}

}

9、check.html

checking out

Checking out

posted on 2007-04-28 21:33 landril 阅读(2497) 评论(1)  编辑  收藏 所属分类: Jsp&Servlet

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/497581.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Science》杂志:机器学习究竟将如何影响人类未来的工作?

作者&#xff1a;Smiletalker概要&#xff1a;《Science》杂志也发表了一篇长文&#xff0c;从几个不同角度详细阐述了机器学习对于未来人类工作的影响。人工智能、机器学习相关技术已经多次刷新了人们对于「计算机能做什么」的认知&#xff0c;那么紧接着的一个问题就是「计算…

部署流水线

1、多阶段部署流水线 2、包含适应度函数阶段的部署流水线 3、部署流水线扇出测试多个场景 1、多阶段部署流水线 2、包含适应度函数阶段的部署流水线 3、部署流水线扇出测试多个场景 扇入&#xff1a;是指直接调用该模块的上级模块的个数。扇入大表示模块的复用程度高。 扇出…

java函数和构造函数_JAVA的构造器和C++的构造函数有什么区别?

慕瓜9086354Java和C在构造函数中调用虚函数的区别首先可以认为&#xff0c;Java所有instance函数都是虚函数。C类的构造函数中调用虚函数&#xff0c;并不能有多态效果。这样设计的理由是&#xff1a;在基类的构造函数中&#xff0c;派生类的成员尚未初始化&#xff0c;而派生类…

活用ognl表达式

转载&#xff1a;https://github.com/alibaba/arthas/issues/11 前言 Arthas 3.0中使用ognl表达式替换了groovy来实现表达式的求值功能&#xff0c;解决了groovy潜在会出现内存泄露的问题。灵活运用ognl表达式&#xff0c;能够极大提升问题排查的效率。 ognl官方文档&#x…

Jeff Dean晒Google Brain团队2017成绩单!

来源&#xff1a;全球人工智能谷歌大脑负责人 Jeff Dean 今天发文晒AutoML、语言理解、机器学习算法、机器学习系统等核心研究工作成绩单&#xff0c;全面总结谷歌大脑在2017年取得的成绩。一、自动化机器学习&#xff08;AutoML&#xff09;我们开发了使用强化学习和进化算法设…

mysql恢复主服务器_MySQL 5.6主从复制第二部分[恢复某一台从服务器]

MySQL 5.6主从复制第二部分[恢复某一台从服务器]&#xff0c;本来第二部分是想测试主服务器挂掉&#xff0c;提升从服务器的情况&#xff0c;可是出了点点意外&#xff0c;改本来第二部分是想测试主服务器挂掉&#xff0c;提升从服务器的情况&#xff0c;可是出了点点意外&…

亮相2018CES:解读阿里云IoT筹谋全球物联网市场的一盘大棋!

来源&#xff1a;阿里巴巴概要&#xff1a;近年来国内物联网市场高歌猛进&#xff0c;2017年也被称为物联网真正意义上的元年。成立还不到一年的阿里云IoT&#xff0c;以平台、市场、标准三位一体的策略&#xff0c;迅速在物联网领域崭露头角、稳固地位。一年一度的CES在拉斯维…

CompletableFuture 异步编程

本文从实例出发&#xff0c;介绍 CompletableFuture 基本用法。不过讲的再多&#xff0c;不如亲自上手练习一下。所以建议各位小伙伴看完&#xff0c;上机练习一把&#xff0c;快速掌握 CompletableFuture。 全文摘要&#xff1a; Future VS CompletableFuture CompletableFu…

java 线程 api_Java核心API之线程(上)

实例代码如下&#xff1a;package ThreadDemo;class RunnableDemo implements Runnable {private Thread t;private String threadName;RunnableDemo( String name) {threadName name;System.out.println("Creating " threadName );}public void run() {System.ou…

麦肯锡:物联网九大应用潜力无限 2025年经济价值高达11.1万亿美元

来源&#xff1a;WPR概要&#xff1a;物联网有可能从根本上改变人类与周围世界的互动方式。如果一切顺利的话&#xff0c;那么到2025年&#xff0c;物联网——将实体和数字世界连接起来的这项技术&#xff0c;其经济价值可达每年11&#xff0e;1万亿美元。物联网有可能从根本上…

线程池原理——生产者/消费者

import java.util.ArrayList; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue;/*** 简化的线程池&#xff0c;仅用来说明工作原理.<br>* author gongqiang <br>* version 1.0.0 2021年6月9日…

java程序移植_java JDBC 提高程序可移植性

介绍jdbc一般的程序: 【程序编程相关:jboracleweblogic c】很多java初学者在开始接触jdbc编程的时候,在网上与大部分的教材上都是这样 【推荐阅读:Java线程入门——什么是线程】import java.sql.*; 【扩展信息:关于J2ME与C#通过HTTP进行通信时】//可以运行的完整程序public cla…

致开发者:2018年AI技术趋势展望

来源&#xff5c;公众号“AI 前线”&#xff0c;&#xff08;ID&#xff1a;ai-front&#xff09;译者&#xff5c;核子可乐编辑&#xff5c;Emily概要&#xff1a;在 2018 年&#xff0c;开发者如何将一系列 AI 技术成果应用于当前的工作当中呢&#xff1f;近日&#xff0c;一…

svn java注释_svn 强制用户添加注释 和 允许用户修改注释

当我们用TortoiseSVN提交代码时&#xff0c;有很多人不喜欢写注释&#xff0c;导致以后代码版本多&#xff0c;也不清楚哪个版本到底改了什么东西。所以在提交的时候&#xff0c;我会强制要求添加注释。这是如何实现的&#xff1f;这个话题就涉及到了svn的Hooks功能的使用。所谓…

CES2018:英特尔披露量子计算和神经拟态计算研究最新进展

来源&#xff1a;科学网概要&#xff1a;今年上半年&#xff0c;英特尔计划与顶级院校和研究机构共享Loihi测试芯片&#xff0c;同时将其应用于解决更加复杂的数据集和问题。1月8日&#xff0c;在拉斯维加斯举办的2018年国际消费电子产品展&#xff08;CES&#xff09;上&#…

EDA风格与Reactor模式

来源&#xff1a;https://www.cnblogs.com/ivaneye/p/10129896.html 本文将探讨如下几个问题&#xff1a; Event-Driven架构风格的约束EDA风格对架构属性的影响Reactor架构模式Reactor所解决的问题redis中的EventDriven 从观察者模式到EDA风格 GOF的23种设计模式中&#xff…

sha java实现_关于Java实现SHA算法加密 @杨章隐

首先我们在实际开发过程中肯定是需要对明文密码进行加密的&#xff0c;这样&#xff0c;就算密码被获取&#xff0c;他们获取到的也是一串乱码。而目前主流的加密算法有MD5和SHA&#xff0c;这篇文章就带你来实现SHA加密import java.math.BigInteger;import java.security.Mess…

神经尘埃、脑波打字…… 2018年的脑科学要研究什么?

来源&#xff1a;科技日报概要&#xff1a;21世纪是脑科学时代。为了进一步了解大脑&#xff0c;监测大脑活动的研究进行得如火如荼&#xff0c;已在学术界和商业界掀起一股淘金热。人脑可谓人体最复杂、最神秘的器官&#xff0c;无数科学家殚精竭虑&#xff0c;也不过才揭开其…

webapp入门到实战_web前端入门到实战:前端高手在CSS 开发效率的必备片段

这篇文章会记录我们平时常用到的 CSS 片段&#xff0c;使用这些 CSS 可以帮助我们解决许多实际项目问题中遇到的&#xff0c;墙裂建议点赞收藏再看&#xff0c;方便日后查找清除浮动浮动给我们的代码带来的麻烦&#xff0c;想必不需要多说&#xff0c;我们会用很多方式来避免这…

FutureTask 示例

1、简单示例 2、泡茶 1、简单示例 // 创建 FutureTask FutureTask<Integer> futureTask new FutureTask<>(()-> 12); // 创建并启动线程 Thread t1 new Thread(futureTask); t1.start();// 获取计算结果(阻塞主线程&#xff0c;等待结果...) Integer result…