cookie,session: 实现JavaWeb会话跟踪技术, Http 无状态的,
在同一次会话中, 不同请求之间的数据的传递
记住密码功能实现
Cookie: 特征: 创建于服务器, 保存在客户端浏览器, 以后每次请求, 把该服务器存在客户端的浏览器的cookie通过请求头带回到服务器
用户名,密码保存到cookie,
提供方法: getNname() getValue()
思路:
LoginServlet:
判断是否登录成功
登录成功之后, 判断是否勾选"记住我"
如果勾选, 把用户名,密码保存cookie,
如果没有勾选: 判断是否有用户名,密码的cookie, 如果,删除
login.jsp:
用户名,密码的表单获取cookie的值
Cookie存放中文:
tomcat7以及之前的, Cookie不能存储中文, 把中文使用url编码
UTF-8: 中(3个字节): %两位十六进制%两位十六进制%两位十六进制
String str ="中国"; //%E4%B8%AD%E5%9B%BD //URL编码 String str1 = URLEncoder.encode(str, "UTF-8"); System.out.println(str1); //URL解码 String str2 = URLDecoder.decode(str1, "UTF-8"); System.out.println(str2);Tomcat8以及之后, Cookie支持中文, 如果有特殊符号, 不能存储, 借助url编码
<%= %> 往页面输出内容: 如果内容null, 也会在页面显示
替换<%= %>的, 使用EL表达式 : ${域中的属性名}
从全域获取数据
${域中的属性名}
全域查找:首先从page域查找,如果找到,直接返回
如果没找到, 从request查找, 如果找到,直接返回
如果没找到, 从session查找, 如果找到,直接返回
如果没找到, 从application查找, 如果找到,直接返回
如果没找到: 直接返回null
如果el表达式的结果为null, 在页面不展示
EL支持 对象导航语言: ${对象.属性名..}
域中存了user对象
HttpSession
主要作用: 作为session域, 实现同一次会话内.数据的共享, 一次会话,包含n次请求
同一次会话: 从打开浏览器访问服务器开始, 到关闭浏览器, 表示一次会话
HttpSession的使用:
得到HttpSession对象,
request对象的getSession(), getSession(boolean)
>getSession(): 如果当前请求有session,返回当前请求session的对象, 如果没有,创建一个新的session对象 > >getSession(boolean create): true: 与getSession() 一样, > >• false: 如果当前请求有session,返回当前请求session的对象,如果没有, 返回nullvoid invalidate() 让session失效, 这个session无效, session中存储的数据都失效
void setMaxInactiveInterval(int interval) 设置session最大存活时间, 单位:秒
默认的存放时间: 30分钟, 从上一次请求到下一次请求之间超过30分钟, session删除
特征: 创建于服务器, 保存于服务器
Tomcat维护一个session池
退出:
发送一个请求到LogoutServlet
让session失效
重定向到login.jsp
验证码的实现
用户填写验证, 点击登录,发送登录请求
先判断验证码是否一致(存在session的验证码与用户输入的验证码)
如果不一致, 直接响应"验证码错误",转发到login.jsp
如果一致, 做登录操作
Session实现原理 面试题
服务器会为用户创建一个Session对象,并且把sessionId 以cookie的形式,保存在客户端浏览器上, 用户之后每次请求, 自动把cookie(JSESSIONID) 带回到服务器, 服务器根据sessionId匹配session池的对应的session的对象, 服务器知道当前请求是哪个会话的, 如果客户端的cookie被删除, 请求不会带JSessionId, 服务器,不知道哪个Session是这个用户的, 之前的为该用户创建的session失效了,谁也无法访问,就是个垃圾,服务器,等30分钟,删除这个session,
如果服务器把session删除, 就算客户端有jsession的Cookie, 也无法得到Session, 服务器会为你重新创建Session,并新的sessionId以Cookie的形式保存客户端
MVC
MCV: 软件架构, 把项目分为三大模块:
M: model 模型层: pojo, dao
C: controller 控制层: Servlet
V: view 视图层: jsp,html
javaWeb开发: javaWeb经典三层模型, java类的分层概念
接收用户请求的角色: web层
处理业务逻辑的角色: service层
与数据库通信的角色: dao层
分层目的: 技术隔离, 比如dao层使用到技术,只能在dao层存在, 不能延伸到其他其他
好处: 项目扩展, 替换某一层的技术,只需要更换这一层,其他层不需要变
注意事项:
跨层调用, 调用顺序: web--调用->service--调用->dao
只能上层调用下层, web调用service, service调用到dao, 不能下层调用上层
层与层使用接口隔离, service:提供接口, 让web使用, dao层提供接口,让service使用
更新项目, 使用javaWeb经典三层模型实现
实现list功能