Servlet第五篇(会话技术之Session)
Session
 什么是Session
		  Session 是另一种记录浏览器状态的机制。不同的是Cookie保存在浏览器中,Session保存在服务器中。用户使用浏览器访问服务器的时候,服务器把用户的信息以某种的形式记录在服务器,这就是Session
	为什么要使用Session技术?
		  Session比Cookie使用方便,Session可以解决Cookie解决不了的事情【Session可以存储对象,Cookie只能存储字符串。】。
	Session API
		  long getCreationTime();【获取Session被创建时间】
		  String getId();【获取Session的id】
		  long getLastAccessedTime();【返回Session最后活跃的时间】
		  ServletContext getServletContext();【获取ServletContext对象】
		  void setMaxInactiveInterval(int var1);【设置Session超时时间】
		  int getMaxInactiveInterval();【获取Session超时时间】
		  Object getAttribute(String var1);【获取Session属性】
		  Enumeration getAttributeNames();【获取Session所有的属性名】
		  void setAttribute(String var1, Object var2);【设置Session属性】
		  void removeAttribute(String var1);【移除Session属性】
		  void invalidate();【销毁该Session】
		  boolean isNew();【该Session是否为新的】
	Session作为域对象
		  Session作为一种记录浏览器状态的机制,只要Session对象没有被销毁,Servlet之间就可以通过Session对象实现通讯
		  一般来讲,当我们要存进的是用户级别的数据就用Session,那什么是用户级别呢?只要浏览器不关闭,希望数据还在,就使用Session来保存。
	Session的生命周期和有效期
		  Session在用户第一次访问服务器Servlet,jsp等动态资源就会被自动创建,Session对象保存在内存里,这也就为什么上面的例子可以直接使用request对象获取得到Session对象。
		  如果访问HTML,IMAGE等静态资源Session不会被创建。
		  Session生成后,只要用户继续访问,服务器就会更新Session的最后访问时间,无论是否对Session进行读写,服务器都会认为Session活跃了一次。
		  由于会有越来越多的用户访问服务器,因此Session也会越来越多。为了防止内存溢出,服务器会把长时间没有活跃的Session从内存中删除,这个时间也就是Session的超时时间。
		  Session的超时时间默认是30分钟,有三种方式可以对Session的超时时间进行修改
			    第一种方式:在tomcat/conf/web.xml文件中设置,所有的WEB应用都有效
			    第二种方式:在单个的web.xml文件中设置,对单个web应用有效
			    第三种方式:通过setMaxInactiveInterval()方法设置
使用Session完成简单的购物功能
1、显示书籍并添加购买的处理数据超链接
response.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter=response.getWriter();
        printWriter.write("网页上所有的书籍"+"<br/>");
        LinkedHashMap<String,Book> linkedHashMap=DB.getAll();
        Set<Map.Entry<String, Book>> entry=linkedHashMap.entrySet();
        for(Map.Entry<String, Book> stringBookEntry:entry){
            Book book=stringBookEntry.getValue();
            String url="/firstServlet/Demo?id="+book.getId();
            printWriter.write(book.getName());
            printWriter.write("<a href='"+url+"'>购买</a>");
            printWriter.write("<br/>");
        }
2、处理数据(添加book到list并判断是否为空进行第一次初始化)
     response.setContentType("text/html;charset=UTF-8");
        String id=request.getParameter("id");
        Book book=(Book)DB.getAll().get(id);
        HttpSession httpSession=request.getSession();
        List<Book> list=(List<Book>)httpSession.getAttribute("list");
        if(list==null){
            list=new ArrayList<Book>();
            httpSession.setAttribute("list", list);
        }
        list.add(book);
        String ur1="/firstServlet/History";
        response.sendRedirect(ur1);
3、重定向显示购物记录页面(与直接在处理数据页面显示独立起来,且区别在链接id没有明文显示)
     response.setContentType("text/html;charset=UTF-8");
        PrintWriter printWriter=response.getWriter();
        HttpSession httpSession =request.getSession();
        List<Book> list=(List<Book>) httpSession.getAttribute("list");
        if(list==null||list.size()==0){
            printWriter.write("对不起,您还没有购买任何商品");
        }else{
            printWriter.write("您购买过以下商品");
            printWriter.write("<br/>");
            for(Book book:list){
                printWriter.write(book.getName());
                printWriter.write("<br/>");
            }
        }
Servlet第五篇(会话技术之Session)的更多相关文章
- 会话技术之Session(购物车加入、查看和清空)
		会话技术之Session session:服务器端会话技术 当我们第一次访问的服务器的时候,服务器获取id, 能获取id 要拿着这个id去服务器中查找有无此session 若查找到了:直接拿过来将数据 ... 
- 会话技术之 Session
		会话技术之 Session 不多废话,先来一个 HelloWorld. Session 有 get 肯定要先有 set . @Override protected void service(HttpS ... 
- php会话技术之Session用法
		php会话技术之Session用法举例. 本文原始链接:http://www.jbxue.com/article/8940.html1.创建session <?php //创建sessi ... 
- [转]【会话技术】Session技术
		创建时间:6.29 & 6.30 一.Session技术 Session技术是将数据存储在服务器端的技术,会为每个客户端都创建一块内存空间 存储客户的数据,但客户端需要每次都携带一个标识ID ... 
- Web核心之会话技术Cookie&Session
		什么是会话技术? http协议是无状态协议.为了满足在多次请求之间数据进行交互,推出了会话技术. 会话概念:一次会话,指的是从客户端和服务器建立起连接开始,到客户端或服务器断开连接为止.中间可能进行多 ... 
- java ->会话技术Cookie&Session
		会话技术Cookie&Session 会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户 ... 
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
		什么是会话技术 基本概念: 指用户开一个浏览器,访问一个网站,只要不关闭该浏览器,不管该用户点击多少个超链接,访问多少资源,直到用户关闭浏览器,整个这个过程我们称为一次会话. 为什么我们要使用会话技术 ... 
- JavaWeb学习笔记五 会话技术Cookie&Session
		什么是会话技术? 例如网站的购物系统,用户将购买的商品信息存储到哪里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并不知道该客户端是谁,所以需要会话技术识别客户端的状态.会话 ... 
- JavaWeb-10(会话技术之session&JSP)
		JavaWeb-会话技术之session&JSP 会话管理之Session技术 一.Session 在WEB开发中,server能够为每一个用户浏览器创建一个会话对象(session对象),注 ... 
- JavaEE之会话技术Cookie&Session
		会话技术简介 存储客户端的状态 由一个问题引出今天的内容,例如网站的购物系统,用户将购买的商品信息存储到哪 里?因为Http协议是无状态的,也就是说每个客户访问服务器端资源时,服务器并 ... 
随机推荐
- BeanUtils使用
			1.BeanUtils.populate 可以把一个map中的属性拷贝到实体javaBean,例子: Student: package com.cy.model; import org.apache. ... 
- Realm 处理List<String> 问题  Type parameter 'java.lang.String' is not within its bound; should implement 'io.realm.RealmModel
			public class InitAppBean extends RealmObject { private String sapling; private String logistics; pri ... 
- vscode中使用beautify插件格式化vue文件
			1.点击设置,找到beautify.language并在html一栏里加上vue "beautify.language": { "js": { "ty ... 
- linux 退出当前命令的编辑
			有时候输入命令,linux既不响应命令,也不提示错误.可以用如下方法结束当前命令: ctrl+z挂起当前进程如果需要恢复到前台输入fg,恢复到后台输入bgctrl+c,彻底终止该进程 
- (转)Windows下cmd  nginx的启动,重启,关闭功能
			转自:http://www.cnblogs.com/derekchen/archive/2011/02/17/1957209.html cls @ECHO OFF SET NGINX_PATH=D:\ ... 
- intellij与eclipse默认快捷键对比
			最近想用intellij,于是找找快捷键.用惯了eclipse,都不太适应intellij的快捷键.慢慢的就适应了常用的快捷键 Idea 与 Eclipse 快捷键的区别,上为Eclipse的快捷键, ... 
- Python:笔记2
			[文件操作] 1.fileopen = open(file).readlines() //type是list 2.filewrite = open(file,'w') filewrite ... 
- CSS:手机页面,常用字号和布局(工作中用)
			{literal} {/literal} 公用css .cOrange,.cOrange:visited,.cOrange > a {color: #ff7200;} .border1-to ... 
- iframe高度宽度自适应
			iframe { width: 100%; height: 100%; border: none; position: inherit; } 网上全是js方法,而且略显臃肿,故找到了一个css方法,宽 ... 
- python threading 用法
			python 多线程传参有点奇怪记录一下 import thread sql1 = 'select 1' sql2 = 'select 2' def run(sql): print sql # 说明 ... 
