会话
一次会话 功能方式cookie
概念快速使用
使用步骤 使用原理cookie细节
一次是否可以发送多个cookiecookie在浏览器中的保存时长
默认情况持久化存储 cookie能不能存中文cookie获取范围
假设一个tomcat服务器中部署了多个项目,cookie能否共享?不同tomcat服务器间cookie共享问题? cookie的特点 JSP学习
概念原理JSP脚本:JSP定义Java代码的方式JSP内置对象
jsp总共有9个内置对象:response.getWriter()和out的区别: session
概念快速入门session原理细节
客户端关闭,服务器不关闭,两次获取的session是同一个吗?客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
session的钝化session的活化 session 失效时间特点session与cookie的区别
会话一次会话中包含多次请求和响应
一次会话浏览器第一次给服务器资源发送请求,会话建立,直至一方断开为止
功能在一次会话的范围内,共享数据
方式- 客户端会话技术:cookie服务器端会话技术:session
客户端会话技术,将数据保存在客户端
快速使用 使用步骤- 创建cookie对象,绑定数据:new cookie(“msg”, “hellocookie”)发送cookie对象:Response.addcookie©获取cookie,拿到数据:cookie[] cookies = req.getcookies();
@WebServlet("/cookieDemo1") public class cookieDemo1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1 创建cookie对象 cookie c = new cookie("msg", "hellocookie"); //2 发送cookie resp.addcookie(c); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } }
@WebServlet("/cookieDemo2") public class cookieDemo2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //3 获取cookie cookie[] cookies = req.getcookies(); //4 便利cookies if (cookies != null){ for (cookie cookie : cookies) { String name = cookie.getName(); String value = cookie.getValue(); System.out.println(name+":"+value); } } } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doGet(req,resp); } }使用原理
基于响应头set-cookie和请求头cookie实现的
cookie细节 一次是否可以发送多个cookie可以创建多个cookie对象,经response多次调用addcookie方法即可
cookie在浏览器中的保存时长 默认情况浏览器关闭后,cookie数据会销毁
持久化存储setMaxAge(int seconds)
- 正数:持久将将cookie数据写到硬盘的文件中,持续化存储,seconds:存活时间负数:默认值零:删除cookie信息
tomcat8之前不能直接存中文:中文数据转码–一般采用URL编码
tomcat8之后可以直接存中文
默认情况下cookie不能共享
setPath(String path):设置cookie的获取范围,默认是当前的虚拟目录
如果要共享,可以将path设置未"/"
setDomain(String path):如果设置他的一级域名相同
setDomain(".baidu.com"),那么tieba.baidu.com与news.baidu.com中的cookie可以共享
cookie存储数据在客户端浏览器
浏览器对于单个cookie的大小有限制,对于同一域名下总cookie的数量有限制
作用:
- cookie存储少量的不太敏感的数据在不登录的情况下来完成服务器对客户端的登录
Java服务器端页面:一个特殊的页面,既可以定义html标签,又可以定义Java代码;用于简化书写
原理- 服务器解析请求消息,找对应的jsp文件找到后将对饮的jsp文件转化为.java文件编译.java文件,生成.class文件由字节码文件提供访问
- <% 代码%>:定义的Java代码,在service方法中。service中可以定义啥,该脚本中就可以定义啥<%! 代码%>:定义的Java代码,在jsp转化后的Java类的成员位置。<%= 代码%>:定义的Java代码,会输出到页面上。输出语句定义的啥,前端展示的就是啥
<%@ page contentType="text/html;charset=UTF-8" language="java" %>JSP内置对象$Title$ $END$ <% System.out.println("hello jsp"); int i = 5; %> <%! int i = 3; %> <%= i %> hello ~jsp
在jsp中不用定义的对象,可以直接使用的对象为内置对象。只要service方法对这些对象声明,可以直接使用
jsp总共有9个内置对象:request、response、out:字符输出流对象,可以将数据输出到页面上。和response.getWriter()
response.getWriter()和out的区别:out定义到哪,就在那显示;response.getWriter()不管在哪都会在最上面;tomcat服务器真正给客户端做出相应的时候,会先找response缓冲区数据,再找out缓冲区数据。
session 概念服务器端会话技术,在一次会话的多次请求间共享数据,将数据保存在服务器端的对象中。HttpSession
快速入门- 获取session对象‘
HttpSession session = req.getSession();使用session对象
Object getAtrribute(String name )
void setAtrribute(String name,Object value)
void removeAtrribute(String name )
@WebServlet("/sessionDemo1") public class sessionDemo1 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1 获取session HttpSession session = req.getSession(); // 2 设置数据 session.setAttribute("msg","hello session"); } }
@WebServlet("/sessionDemo2") public class sessionDemo2 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 1 获取session HttpSession session = req.getSession(); //2 获取session值 Object msg = session.getAttribute("msg"); System.out.println(msg); } }session原理
session依赖于cookie实现的
默认情况下。不是。
如果需要相同,则可以创建cookie,键值为JSESSIONID,设置最大存储时间,让cookie持久化保存
// 1 获取session HttpSession session = req.getSession(); // 客户端关闭后,session相同 cookie jsessionid = new cookie("JSESSIONID", session.getId()); jsessionid.setMaxAge(60*60); resp.addcookie(jsessionid); //2 获取session值 Object msg = session.getAttribute("msg"); System.out.println(msg);客户端不关闭,服务器关闭后,两次获取的session是同一个吗?
不是同一个,但是要确保数据不丢失
session的钝化在服务器正常关闭之前,将session对象序列化到硬盘上
session的活化在服务器启动后,将session文件转化为内存中的session对象即可。
session 失效时间- 服务器关闭session对象调用invalidate()方法session默认失效时间是30分钟
选择性配置修改
- session用于一次会话的多次请求的数据,存在服务器端session可以存储任意类型,任意大小的数据
- session存储数据在服务器端,cookie在客户端session没有数据大小限制,cookie有大小限制session相对安全,cookie相对不安全
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)