Session
##JSP
1. 概念:
* Java Server pages:java服务器端页面
* 可以理解为:一个特殊的页面,其中既可以直接定义html的标签,又可以定义java代码
* 用于简化书写!
2.原理
* JSP本质上就是一个Servlet
3. JSP的脚本: JAVA定义JAVA代码的方式:
1. <% 代码 %>:定义的java代码,在service方法中。service方法中可以定义什么,该脚本中就可以定义什么
2. <%! 代码 %> :定义的java代码,在jsp转换后的java类的成员位置。
3. <%= 代码 %> :‘=’相当于输出语句,定义的java代码,会输出到页面上。输出语句中可以定义什么,该脚本中就可以定义什么
4. JSP内置对象:
* 在jsp页面中不需要去创建获取,就可以直接使用的对象
* jsp一共有9个内置对象。
* 今天学习:
* request
* response
* out:字符输出流对象,可以将数据输出到页面上。和response.getWriter()类似
* response.getWriter()和out.writer()的区别:tomcat给客户端做出响应之前,会先去找response的缓冲区,再去找out的缓冲区。out在定义的位置输出,而response先于out输出
##Session
1. 概念:服务器端会话技术,再一次会话的多起请求间共享数据,将数据保存在服务器端的对象中。HttpSession
2. 快速入门:
1. 获取HttpSession对象:
request.getSession()
2. 使用HttpSession对象:
getAttribute()
setAttribute()
removeAttribute()
3. 原理
* Session的实现是依赖于Cookie 的
4.细节:
1. 当客户端关闭后,服务器端不关闭,两次获取的session是同一个吗
* 默认情况下不是(客户端关闭,cookie关闭,没有对应的cookie 头,session是依赖于cookie的)
* 期望客户端关闭后,session也能相同。
1. 创建cookie,键为JSESSION Cookie c = new Cookie("JSESSION",session.getId());
2. 设置cookie的最大存活时间 c.setMaxAge(60 * 60);
response.addCookie(c);
2. 客户端不关闭,服务器端关闭,两次获取的session是同一个吗
* 不是同一个,但是要确保数据不丢失
* session的钝化
* 在服务器正常关闭之前,将session对象序列化到硬盘上
* session的活化
* 在服务器启动后,将session文件转化为内存中的session对象即可。
* tomcat服务器可以进行session对象的序列化和反序列化,而idea可以序列化但是不能够反序列化读取session对象(先删除work文件再重新创建)
3. session什么时候被销毁?
1. 服务器关闭
2. session对象去调用一个方法invalidate();
3. session默认失效时间是30分钟(可以设置默认失效时间,在tomcat目录下web.xml的<session-config>标签内)
5. session的特点:
1. session用于存储一次会话的多次请求的数据,存在服务器端
2. session可以存储任意类型,任意大小的数据
* session与cookie的区别:
1. session存储数据在服务器端
2. session没有数据大小限制,cookie有
3. session数据安全,cookie相对于不安全
================================================================================================
验证码案例:
分析:1.设置request的编码
2. 获取参数Map集合
3. 获取验证码
4. 将用户信息封装到user对象
5. 先判断程序生成的验证码和用户输入的验证码是否一致(减小数据库的开销)。从session中获取程序生成的验证码。
* 一致:
* 再判断用户名和密码是否正确
* 正确:
* 登录成功
* 存储数据 session
* 跳转到successjsp(重定向)
* 不正确:
1. 给提示信息
2. 跳转登录页面
* 不一致:1. 给用户提示信息,验证码错误(request)
2. 跳转登录页面,转发