回顾:
1.request常用方法(14种),response常用方法(7种)
2.乱码处理
请求乱码:
get:server.xml的端口号的地方配置URIEcoding=“utf-8”
post:request.setCharacterEncoding(“utf-8”)
get/post:String重新编码
响应乱码:
response.setCharacterEncoding(“utf-8”);
response.setContentType(“text/html;charset=utf-8”);
3.get VS post:安全性不同;传参方式和位置不同;传参的参数长度限制;效率不同.
1.Http:
http协议是一种无状态协议,下一次请求无法获得上次请求中数据,因为一次请求完成 后,这个请求中数据就销毁了.如果在项目中我们需要多次请求中数据共享就得用会 话技术.
2.会话:
当打开一个浏览器访问服务器端的网站,发送多次请求,到浏览器关闭这个过程就是一次会话.常用会话技术有两种cookie和session.
3.Cookie(依赖浏览器):
通过浏览器将用户数据存在客户端的会话技术.cookie按key-value方 式来存值的.如果cookie没有设置有效期,cookie中数据是存在客户端的内存 中.如果cookie设置了有效期,cookie中数据就存在客户端的硬盘上.
注意:
cookie必须依赖浏览器,然后大部分浏览器不支持离线版cookie,但是所有浏 览器都支持在线版cookie;每个浏览器最多只能存300个cookie,浏览器针对每个网站最多能存20个cookie,每个cookie最大只能4kb.
3.1:优点:减轻服务器端的压力;用户第二次加载数据时效率高;可长久存数据;
缺点:数据不安全;cookie存数据的长度有限制;
3.2:适用场景:存储一些跨请求的不重要的用户数据用cookie.eg:购物车,历史记录
3.3:常用方法:
3.3.1:创建cookie对象存数据:
Cookie ob=new Cookie(String name, String value);
3.3.2:将cookie对象通过浏览器存在客户端:
response.addCookie(Cookie cookie);
3.3.3:得到客户端的所有cookie信息.request.getCookies();
3.3.4:设置cookie有效期,以秒为单位:cookie对象.setMaxAge(int expiry);
注意:如果cookie的有效期设置为0或负数,表示cookie失效,相当于 删除了当前cookie.
3.3.5:修改cookie对象中value值:cookie对象.setValue(String newValue)
3.3.6:获得cookie对象中键名:cookie对象.getName()
3.3.7:获得cookie对象中value值:cookie对象.getValue()
特别注意:cookie按key-value方式存值,key和value是String类型,但是cookie中value只能存ASCII,也就是说只能存英文,数字不能存中文,如果想用cookie中value存中文,先将中文编码,客户端再解码
注意:编码和解码只对中文有用.
4.Session:
将用户的数据存在服务器端的内存中会话技术.按key-value对方式存值.
session的存值原理:当浏览器第一次访问服务器的网站时,服务器会根据当前的浏览器在服务器端的内存中开辟一个空间专门用来存与当前这个浏览器会话的数据,并且生成一个sessionId,将sessionId存在当前浏览器的cookie中.当浏览器第二个访问服务器的网站时,服务器检查到浏览器中sessionId,会根据这个sessionId找到服务端对应内存空间来存值和取值.
4.1:优点:数据安全;存数据无长度限制.
缺点:服务器压力大;用户加载数据效率较低;session不能长久存数据.
4.2:适用场景:存储跨请求的一些重要数据用session.eg:密码等.
4.3:常用方法:
4.3.1:按key-value方式将值存在session中:
session.setAttribute(String name, Object value);
4.3.2:按Key取出session中value值:
session.getAttribute(String name);
4.3.3:按Key删除session中key-value对:
session.removeAttribute(String name)
4.3.4:获得sessionId:session.getId();
4.3.5:获得上下文对象: session.getServletContext()
4.3.6:设置session有效期:
第一种设置session有效期,单位是秒:
session.setMaxInactiveInterval(int interval);
第二种设置session有效期,单位是分种,在web.xml中设置:
<!-- 设置session有效期 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
5.记住我功能:
5.1:在html页面做记住我复选框
<input type="checkbox" name="rememberMe"/>记住我
5.2:在登录成功时判断是否要记住用户信息,要记住,就要用session/cookie将用户信息记住
//判断是否勾选记住我
if ("on".equals(rememberMe)) {
//用cookie记住用户信息
Cookie c1=new Cookie("uname1", stu1.getName());
Cookie c2=new Cookie("pwd1", stu1.getPassword());
//设置cookie有效期
c1.setMaxAge(60);
c2.setMaxAge(60);
//将cookie对象写入到客户端
response.addCookie(c1);
response.addCookie(c2);
}
5.3:在html页面获得记住我信息就可以在页面上展示用户信息
<!-- 用小脚本可以写java代码,获得cookie记住用户信息 -->
<%
//声明两个变量存cookie中获得的用户名和密码
String uname2="";
String pwd2="";
//获得所有cookie
Cookie[] cs=request.getCookies();
if(cs!=null){
//遍历cookie,找到用户名和密码存下来
for(Cookie c:cs){
if(c.getName().equals("uname1")){
uname2=c.getValue();
}else if(c.getName().equals("pwd1")){
pwd2=c.getValue();
}
}
}
%>
<!-- 表达式,在浏览中输出变量的值 -->
<td><input type="text" id="uname" name="uname" onblur="isUname()" value="<%=uname2 %>"/></td>
<!-- 表达式,在浏览中输出变量的值 -->
<td><input type="password" id="pwd" name="pwd" onblur="isPwd()" value="<%=pwd2 %>"/></td>
总结:
1.转发 VS 重定向
1.1:方法不同
1.2:URL不同
1.3:数据的共享性不同
1.4:作用地方不同
1.5:作用范围
1.6:适用场景
2.http协议是一种无状态
3.会话对象:cookie和session 共同点就是实现跨请求的数据共享.
4.cookie:浏览器的会话技术
5.session:服务器的会话技术
6.Servlet
7.Servlet中常用对象:ServletContext,ServletConfig,httpServletRequest,
httpServletResponse,response.getWriter(),httpSession