java深入探究06
Tomcat中获取资源文件:
ServletContext().getRealPath(/WEB-INF/classes/db.properties);//获取资源文件的在服务器中的绝对路径
ServletContext()getResourceAsStream() 得到资源文件,返回的是输入流
ServletContext().getRealPath
会话管理
1.定义:管理浏览器和服务器间会话期间产生的会话数据
2.域对象:实现资源之间数据的共享
3.会话数据
a) Cookie:会话数据保存在浏览器客户端
- 使用流程:
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()
- 主要方法
构造:Cookie(String ,value);
设置:setMaxAge(int expiry)//设置cookie的有效时间
setValue(String newValue);//设置新的Cookie值
setPath(String path);//设置有效的访问路径
发生:addCookie(cookie);
服务端接受:request.getCookies();
- 注意:
Cookie只能保存非中文字符串类型,可以保存多个多个Cookie,一个浏览器可以保存300个Cookie,每个站点只能存20个,每个Cookie大小限制4kb;
setMaxAge(int expiry):正数:保存在浏览器客户端硬盘时间;
负数:保存在浏览器内存中,关闭浏览器就没有了
零:删除同名的Cookie数据
- 例子:保存用户上次访问的时间
/**
* 案例-用户上次访问时间
* @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:会话数据保存在服务端
- 出现原因:
a) Cookie有自己缺点,最大4kb,只能非中文限制多,Session就能解决这个问题,可以存对象,任何类型数据
b) 服务器能够识别不同浏览器,数据存到哪个域就必须从那个域中或获得对象
- 使用流程:
不同的浏览器request对象获得不同的域对象
HttpSession session=request.getSession();只要解析他的流程就可以了
a) 第一次一个浏览器创建Session域对象,服务器给这个session对象分配了一个JSESSIONID对象,用来唯一标识这个session对象的-》
b) 再将这个JSESSIONID发送到客户端respond.addCookie("JSESSIONID", sessionID)->
c) 之后浏览器发送请求到服务器带着JSESSIONID请求头从服务器中找配备的session对象-》
d) 找到了就获得这个对象没有找到就重复a)
- 主要方法
a) 创建:request.getSession([true]);
b) 设置:setMaxInactiveInterval(int interval)//设置保存时间
Invalidate();//销毁这个session对象
getId();//获得这个Session的唯一标识JSESSIONID
- 注意:
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.得到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的更多相关文章
- Java 集合系列 06 Stack详细介绍(源码解析)和使用示例
java 集合系列目录: Java 集合系列 01 总体框架 Java 集合系列 02 Collection架构 Java 集合系列 03 ArrayList详细介绍(源码解析)和使用示例 Java ...
- JAVA自学笔记06
JAVA自学笔记06 1.二维数组 1)格式: ①数据类型[][]数组名 = new 数据类型[m][n]; 或 数据类型[]数组名[]=new 数据类型[m][n]; m表示这个二维数组有多少个一维 ...
- 061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结
061 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 08 一维数组总结 本文知识点:一维数组总结 总结 注意点
- 060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序
060 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 07 冒泡排序 本文知识点:冒泡排序 冒泡排序 实际案例分析冒泡排序流程 第1轮比较: 第1轮比较的结果:把最 ...
- 059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环
059 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 06 增强型for循环 本文知识点:增强型for循环 增强型for循环格式 案例练习增强型for循环 数组名字 ...
- 058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值
058 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 05 案例:求数组元素的最大值 本文知识点:求数组元素的最大值 案例:求数组元素的最大值 程序代码及其执行过程 ...
- 057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和
057 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 04 案例:求整型数组的数组元素的元素值累加和 本文知识点:求整型数组的数组元素的元素值累加和 案例:求整型数 ...
- 056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用
056 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 03 一维数组的应用 本文知识点:数组的实际应用 程序开发中如何应用数组? 程序代码及其运行结果: 不同数据类 ...
- 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念
055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...
随机推荐
- rplidar 扫描角度设置
参考网站:: https://blog.csdn.net/sunyoop/article/details/78302090 https://blog.csdn.net/dzhongjie/arti ...
- laravel模型建立和数据迁移和数据填充(数据填充没有成功)未完
开始创建我们的第一个 Article 模型及其对应迁移文件了,我们在项目根目录运行如下 Artisan 命令一步到位: php artisan make:model Article -m -m 是 - ...
- Unmapped Spring configuration files found.
© 版权声明:本文为博主原创文章,转载请注明出处 1.问题描述: 搭建SSH框架后,IDEA弹出如下提示: 2.解决方案: File --> Project Structure --> M ...
- CentOS7 yum 安装 Nginx最新版本
CentOS7 yum 安装 Nginx最新版本 下载对应当前系统版本的nginx包(package) # wget http://nginx.org/packages/centos/7/noarc ...
- HTML5 2D平台游戏开发#10Wall Jump
这个术语不知道怎么翻译比较贴切,但并不妨碍对字面意思的理解,大概就是飞檐走壁.比如: 这是游戏<忍者龙剑传>中的场景,玩家可以通过操纵角色在墙面上移动并跳跃. 首先需要实现角色抓墙这一动作 ...
- quartz项目中的运用
下面是之前项目中quartz的运用,我将它梳理出来. 测试类: public class OrdExpireTaskMain { public static void main(String[] ar ...
- Junit内部解密之三: 单元测试用例运行的全过程
转自:http://blog.sina.com.cn/s/blog_6cf812be0100x8sb.html 我们以一个非常简单的TestCalculator类为例,只有一个测试方法: Public ...
- sersync简介与测试报告
在分布式应用中会遇到一个问题,就是多个服务器间的文件如何能始终保持一致.一种经典的办法是将需要保持一致的文件存储在NFS上,这种方法虽然简单方便但却将本来多点的应用在文件存储上又变成了单点,这违背了分 ...
- nginx 查看接口请求时间 每个请求图片的时间或者文件的
根据nginx的access_log查看接口请求时间 muyuren 发表于 1年前 阅读 2300 收藏 0 推荐 0 评论 0 推荐 收藏 首先修改修改生成日志的格式,在nginx配置文件的htt ...
- 在Ubuntu下利用Eclipse调试FFmpeg
[编辑]第一步:准备编译环境 .tar.bz2 -2245/ ./configure -linux-i586.tar.gz 解压后得到jre1.7.0_17目录 最后通过java -version检查 ...