1.cookie
- cookie存储在哪里?
cookie临时以文件的形式将数据存储在用户的计算机上,存储方式是key-value,存储在浏览器的temp文件夹 - 解决中文乱码问题
URLEncoder或URLDecoder将字符串以指定的字符集进行编码或解码
String cu_name_utf8 = URLEncoder.encode(cu_name, "utf-8");//编码
cu_name=URLDecoder.decode(cu_name_utf8,"utf-8");
编写cookie小案例:登录成功后保存,关闭浏览器再次打开保存用户名
注意:保存cookie是浏览器的动作,如果放在跳转之后,代码是执行的 ,但是浏览器已经跳转了,就无法保存
核心代码:
//当你的用户名和密码判断正确时,将用户名保存至cookie
String cu_name_utf8 = URLEncoder.encode(cu_name, "utf-8");
Cookie cookie = new Cookie("cu_name",cu_name_utf8); //new Cookie(String ket,String value)
//单位是秒,是cookie保存的最大时间,时间到了,浏览器自动清除
cookie.setMaxAge(60);
response.addCookie(cookie);
//如果查到的值大于0则,登录成功,跳转到welcome.jsp页面
request.getRequestDispatcher("welcome.jsp").forward(request, response);
//读取cookie并赋值给cu_name
String cu_name="";
//获取浏览器中所有的cookie,如果没有 返回null
Cookie[] cookies = request.getCookies();
if(cookies!=null && cookies.length>0){
for(Cookie c:cookies){
if("cu_name".equals(c.getName())){
String cu_name_utf8 =c.getValue();
cu_name=URLDecoder.decode(cu_name_utf8,"utf-8");
}
}
}
清除cookie:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//实现登出功能 清除cookie后跳转至主页
Cookie cookie = new Cookie("cu_name","");
cookie.setMaxAge(0);
response.addCookie(cookie);
response.sendRedirect("/web03_0904");
%>
2.session
- session:一个会话就是浏览器与服务器之间的一次通话。
- 重新打开浏览器或不同的浏览器,算一次新的会话
- sessionid:在服务器接收到第一次的请求的时候,就建立新的会话。服务器就会为这次会话创建一个整个服务器都唯一的sessionid
- 关闭浏览器后重新打开浏览器获取不到以前的session中的内容,sessionid变了;因此,浏览器既得不到其他浏览器会话的数据,也得不到上一次浏览器会话的数据。
session的使用
可以使用session来保存用户名称,即可以解决中文的问题,还有一个非常重要的特点
session的value可以存Object
方法:session.setAttribute(String, Object);
session.setAttribute("cu_name", cu_name);
session.getAttribute("cu_name");
session会话的清除和过期
(1)若没有清理机制,会导致性能问题或服务器崩溃
- 程序主动清除session数据
- 服务器主动清除长时间没有再次发出请求的session
(2)程序主动清除session数据 - 设置会话失效:session.invalidate();
- 移除会话的一个属性
public void removeAttribute(String name);
用法:session.removeAttribute("userName");
(3)服务器主动清除长时间(默认30分钟)没有再次发出请求的session
设置会话过期时间:
方法一:public void setMaxInactiveInterval(int interval);
方法二:<session-config>
<session-timeout>30</session-timeout>
</session-config>
3.application
application:作用于真个服务器的存储数据的地方,一般不到万不得已不用。
小案例:application实现计数器
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import = "java.util.Random" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>主页</title>
</head>
<body>
<%
int count=100000;
if(application.getAttribute("count")==null){
application.setAttribute("count", 100000);
}else{
int c =(int)application.getAttribute("count");
c+=new Random().nextInt(10000);
count=c;
application.setAttribute("count", count);
}
%>
<h1>欢迎您!你是我们网站的第<%=count %>个访问者</h1>
</body>
</html>
在谷歌浏览器中打开页面后
再再ie浏览器中打开实现计数的实现