Tomcat中获取资源文件:

ServletContext().getRealPath(/WEB-INF/classes/db.properties);//获取资源文件的在服务器中的绝对路径

ServletContext()getResourceAsStream() 得到资源文件,返回的是输入流

ServletContext().getRealPath

会话管理

  1.定义:管理浏览器和服务器间会话期间产生的会话数据

  2.域对象:实现资源之间数据的共享

  3.会话数据

    a) Cookie:会话数据保存在浏览器客户端

    1. 使用流程:

        1.Cookie对象在服务端被创建new Cookie(name,value,)->

        2.发送到客户端 respond.addCookie(cookie)(这里隐式发了一个set-Cookie的响应头set-Cookie:name=value)->

        3.浏览器得到这个Cookie会保存起来下次访问服务器时会带着Cookie信息(隐式带着一个Cookie:name=value的请求头)->

        4.服务器获得浏览器发来的Cookie对象request.getCookies()

    1.  主要方法

        构造:Cookie(String ,value);

        设置:setMaxAge(int expiry)//设置cookie的有效时间

          setValue(String newValue);//设置新的Cookie值

           setPath(String path);//设置有效的访问路径

        发生:addCookie(cookie);

        服务端接受:request.getCookies();

    1. 注意:

        Cookie只能保存非中文字符串类型,可以保存多个多个Cookie,一个浏览器可以保存300个Cookie,每个站点只能存20个,每个Cookie大小限制4kb;

        setMaxAge(int expiry):正数:保存在浏览器客户端硬盘时间;

       负数:保存在浏览器内存中,关闭浏览器就没有了

        零:删除同名的Cookie数据

    1.  例子:保存用户上次访问的时间
/**

 * 案例-用户上次访问时间

 * @author APPle

 *

 */

public class HistServlet extends HttpServlet {

/**

 *

 */

private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html;charset=utf-8");

//获取当前时间

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");

String curTime = format.format(new Date());

//取得cookie

Cookie[] cookies = request.getCookies();

String lastTime = null;

if(cookies!=null){

for (Cookie cookie : cookies) {

if(cookie.getName().equals("lastTime")){

//有lastTime的cookie,已经是第n次访问

lastTime = cookie.getValue();//上次访问的时间

//第n次访问

//1.把上次显示时间显示到浏览器

response.getWriter().write("欢迎回来,你上次访问的时间为:"+lastTime+",当前时间为:"+curTime);

//2.更新cookie

cookie.setValue(curTime);

cookie.setMaxAge(1*30*24*60*60);

//3.把更新后的cookie发送到浏览器

response.addCookie(cookie);

break;

}

}

}

/**

 * 第一次访问(没有cookie 或 有cookie,但没有名为lastTime的cookie)

 */

if(cookies==null || lastTime==null){

//1.显示当前时间到浏览器

response.getWriter().write("你是首次访问本网站,当前时间为:"+curTime);

//2.创建Cookie对象

Cookie cookie = new Cookie("lastTime",curTime);

cookie.setMaxAge(1*30*24*60*60);//保存一个月

//3.把cookie发送到浏览器保存

response.addCookie(cookie);

}

}

}

b) Session:会话数据保存在服务端

  1. 出现原因:

    a) Cookie有自己缺点,最大4kb,只能非中文限制多,Session就能解决这个问题,可以存对象,任何类型数据

    b) 服务器能够识别不同浏览器,数据存到哪个域就必须从那个域中或获得对象

  1. 使用流程:

    不同的浏览器request对象获得不同的域对象

    HttpSession session=request.getSession();只要解析他的流程就可以了

      a) 第一次一个浏览器创建Session域对象,服务器给这个session对象分配了一个JSESSIONID对象,用来唯一标识这个session对象的-》

      b) 再将这个JSESSIONID发送到客户端respond.addCookie("JSESSIONID", sessionID)->

      c) 之后浏览器发送请求到服务器带着JSESSIONID请求头从服务器中找配备的session对象-》

      d) 找到了就获得这个对象没有找到就重复a)

  1. 主要方法

     a) 创建:request.getSession([true]);

     b) 设置:setMaxInactiveInterval(int interval)//设置保存时间

         Invalidate();//销毁这个session对象

          getId();//获得这个Session的唯一标识JSESSIONID

  1. 注意:

     a)  销毁时间设置:默认情况30min,setMaxInactiveInterval(int interval);设置时间;全局设置销毁时间可以在web.xml中配置

      <!-- 修改session全局有效时间:分钟 -->

      <session-config>

      <session-timeout>1</session-timeout>

      </session-config>

      ;手动销毁:invalidate()

    b)  如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题

      手动设置浏览器的Cookie时间

      Cookie cookie=new Cookie();

      cookie.setMaxAge(60*60);

      response.addCookie(cookie);

  1. 例子:
//1.得到session对象

HttpSession session = request.getSession(false);

if(session==null){

System.out.println("没有找到对应的sessino对象");

return;

}

/**

 * 得到session编号

 */

System.out.println("id="+session.getId());

//2.取出数据

String name = (String)session.getAttribute("name");

System.out.println("name="+name);

java深入探究06的更多相关文章

  1. Java 集合系列 06 Stack详细介绍(源码解析)和使用示例

    java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...

  2. JAVA自学笔记06

    JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...

  3. 061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结

    061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结 本文知识点:一维数组总结 总结 注意点

  4. 060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序

    060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序 本文知识点:冒泡排序 冒泡排序 实际案例分析冒泡排序流程 第1轮比较: 第1轮比较的结果:把最 ...

  5. 059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环

    059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环 本文知识点:增强型for循环 增强型for循环格式 案例练习增强型for循环 数组名字 ...

  6. 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值

    058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...

  7. 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和

    057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...

  8. 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用

    056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...

  9. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

随机推荐

  1. PorterDuffXferMode不对的真正原因PorterDuffXferMode深入试验)

    菜鸡wing遇敌PorterDuffXferMode,不料过于轻敌,应战吃力. 随后与其大战三天三夜.三百余回合不分胜负. 幸得 @咪咪控 相助,侥幸获胜. keyword:PorterDuffXfe ...

  2. udp广播和多播

    使用UDP协议进行信息的传输之前不需要建立链接, 客户端向服务器发送信息时,客户端只需要给出服务器的ip地址和端口号,可以发送信息.至于服务器端是否存在,是否能够收到该报文,客户端根本不用管. 广播( ...

  3. Argparse 命令行解析模块常用参数

    Argparse模块可以轻松编写用户友好的命令行界面.该程序定义了它需要的参数,argparse 并将找出如何解析这些参数sys.argv.该argparse 模块还会自动生成帮助和用法消息,并在用户 ...

  4. 从零开始学android -- Service

    废话不多说了,Service是四大组件之一,是一个后台处理长时间运行在主线程不需要依赖ui界面显示的应用组件,切记不能在service中做耗时操作,会阻塞主线程,要做也要在service中开个子线程做 ...

  5. 从零开始学android -- dialog

    先看个效果图 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <Linear ...

  6. 探究css中各种情况下的元素的垂直和水平居中的问题(面试题)

    今天各种纠结,真的是不想写东西(ps 我比较懒)但是老是有人问这个问题,于是我就本着分享精神还是整理一下,好了废话不多说 开始上代码 问题:外边是一个容器,容器中还有一个容器,那么请问怎么让里边的容器 ...

  7. 查看apache,nginx,mysql,linux,php版本

    查看apache版本 /usr/sbin/apachectl -v httpd -v 安装目录,使用apachectl -v mysql版本查看 mysql -V 查看linux版本 1.cat /e ...

  8. element开源框架

    vue-element-admin:https://gitee.com/accest/bod-element   https://gitee.com/liuyuantao/vue-element-ad ...

  9. Python中使用__new__实现单例模式并解析

    阅读文章前请先阅读 Python中类方法.__new__方法和__init__方法解析 单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定 ...

  10. ios开发:如何加载大量图片 相册示例

    本文转载至 http://www.cnblogs.com/xiongqiangcs/archive/2013/06/13/3134486.html   1. Create a NSOperationQ ...