会话技术:1.会话:一次会话中包含多次请求和响应。浏览器第一次给服务器发送请求,会话建立,直到有一方断开连接
2:功能在一次会话的范围内多次请求间,共享数据
3方式1客户端会话技术:cookie2服务器端会话技术Session
##cookie会话技术,将数据保存在客户端 1 创建cookie对象,绑定数据 new cookie (String name,String value) 2发送cookie对象 response.addCookie(Cookie cookie) 3获取cookie,拿到数据 *cookie 【】 getCookies 特别注意:仅在一次会话中可用,如果客户端或者浏览器关闭,就无法在获取到cookie的值
cookie 原理:基于第一次响应的响应头发送到客户端,再由客户端的请求头发送到服务器
cookie的细节:1 一次可否发送多个cookie 可以
2持久化存储:setMaxAge(int seconds) 1正数:将cookie数据写到硬盘的文件中。持久化存储,并制定cookie的存活时间,时间到后cookie自动消亡 2负数:默认值 即浏览器关闭,cookie消亡 3零:删除cookie信息
3cookie中能不能存储中文 在tomcat8之前 cookie中不能直接使用中文数据,需要将中文数据转码 在tomcat8之后,cookie支持中文数据 但是特殊字符如空格等依旧是不能存储
4cookie中的共享问题? 1.假设在一个tomcat服务器中,部署了多个web项目,那么这些web项目中cookie能不能共享?默认情况下不能共享 setPath(String path):设置cookie的获取范围。默认情况下,设置当前的虚拟目录,如果要共享的话可将path设置为“/” 2不同tomcat服务器的cookie共享问题 setDomain(String path):如果设置的一级域名相同,那么多个服务器之间cookie可以共享 如setDomain(“.baidu.com”),那么tieba.baidu.com和news.baidu.com中的cookie就可以共享
5cookie的特点和作用
cookie存储数据在客户端浏览器 2浏览器对于单个cookie的大小有限制4kb,以及对同一个域名下总cookie数有限制 作用:cookie一般用于存储少量不太敏感的数据 在不登录的情况下,完成服务器对客户端的身份识别 (给存储在客户端的cookie设置一个时限,下次就知道原先的设置了)
案例: 第一次访问servlet提示第一次访问,第二次访问提示欢迎回来,您的上次访问时间为***
Cookie[] cookies = request.getCookies();
response.setContentType("text/html;charset=utf-8");
boolean flag=false;
if (cookies!=null&&cookies.length!=0){
for (Cookie cookie : cookies) {
String name = cookie.getName();
if (name.equals("lastTime")){
String value = cookie.getValue();
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String str_value = sdf.format(date);
cookie.setValue(str_value);
flag=true;
cookie.setMaxAge(60*60);
response.addCookie(cookie);
response.getWriter().write("<h1>欢迎回来,您上次访问时间为:</h1>"+value);
break;
}
}
}
if (cookies==null||cookies.length==0||flag==false){
Date date=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyy年MM月dd日HH:mm:ss");
String str_value = sdf.format(date);
Cookie cookie = new Cookie("lastTime", str_value);
flag=true;
cookie.setMaxAge(60*60);
response.addCookie(cookie);
response.getWriter().write("<h1>欢迎您首次访问</h1>");
}
}
jsp: 概念 java Server Page:java服务器端页面 可以理解为:一个特殊的页面,里面既可以定义html标签,又可以定义java代码 用于简化书写
2原理 :jsp的本质是是一个Servlet
3Jsp脚本:jsp定义java代码的方式:<%%>:定义java代码,在service方法中,可以定义什么,该脚本就可以定义什么<%!%> 定义java代码,在jsp转换后的java类的成员位置<%=%> 定义的Java代码,会输出到页面上,输出语句可以定义什么,该脚本中就可以定义什么 注意:同一个变量在成员位置定义,在service里也定义,就近原则先执行service中的变量
4jsp内置对象:在jsp中直接可以使用的的对象:9个内置对象request response out :(字符输出流)将数据输出到页面上 和response。getwrite()类似 但是无论response写在何处都会优先于out输出(tomcat服务器会优先寻找response对象进行输出)
session 服务器端会话技术 概念:服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中,httpsession
快速入门:1获取session对象:httpSession session =request.getSession();2使用httpSession对象:Object getAttribute(String name ) void setAttribute (String name ,Object value) void removeAttribute(String name) 注意: 一次会话
session 原理 session的实现依赖于cookie
4细节:当客户端关闭后,服务器不关闭,两次获取的session是否为同一个 ?默认情况下不是 可以通过COOKIE发送JSESSIONID来传送远来的cookie
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
System.out.println(session);
Cookie cookie = new Cookie("JSESSIONID",session.getId());
cookie.setMaxAge(60*60);
response.addCookie(cookie);
System.out.println(session);
当客户端不关闭,服务器关闭后,两次获取的session是同一个吗?不是同一个,但是要确保数据不丢失*session的钝化 *session的活化
session的失效时间 ? 什么时候被销毁,1服务器关闭 2默认失效时间30分钟 修改tomcat - conf-webxml中的配置 选择性配置修改<session-config><session-timeout>30<session-timeout> 即可调整为想要的时间3session对象调用invalidate()方法自杀
session的特点:1session用于存储一次会话的多次请求的数据,存储在服务器端2session可以存储任意类型,任意大小的数据
session与cookie的区别 session在服务器端,cookie在客户端2session没有大小限制,cookie有3session数据安全,cookie相对于不安全