web程序常用的数据管理有三个类,Cookie,Session和Application。
Cookie:数据存在客户端,安全性差,可以设置过期时间,在时间周期内数据一直有效。
Session:数据存在服务器,每一个浏览器占用一个单独的Session,默认过的期时间20分钟,浏览器关闭后Session数据清空。
Application:数据存在服务器端,所有用户共享该数据。
下面通过几个常用功能来演示这三个类的使用。
第一个功能:登录状态保存(Cookie)
功能描述:有两个页面,登录和个人中心。第一次访问登录页面时,如上图所示。如果勾选了“10天内自动登录”,则10天内可以直接访问个人中心,否则访问个人中心时会跳转到登录页面。
先完成基本登录功能,再完成10天内自动登录功能。
一、基本登录功能实现步骤:
1.创建login.jsp和user.jsp页面。
2.编写login.jsp登录功能。
<form action="user.jsp" method="post">
<label>账号:</label>
<input type="text" id="txtLoginID" name="txtLoginID" /><br />
<input type="password" id="txtLoginPWD" name="txtLoginPWD" /> <br />
<input type="checkbox" id="chkSave" name="chkSave" value="true" />记住账号密码<br />
<input type="submit" value="登录" />
</form>
3.登录后跳转到user.jsp页面,并显示账号名。
<body>
<%
//一、读取从login.jsp页面传递过来的数据
String loginID = request.getParameter("txtLoginID");
String loginPWD = request.getParameter("txtLoginPWD");
if(loginID != null){
response.getWriter().write("输入的账号是:"+loginID);
response.getWriter().write("输入的密码是:"+loginPWD);
}
%>
</body>
二、10天内自动登录功能实现步骤:
1. 修改login.jsp页面,如果Cookie中有用户信息,则直接跳转到用户页面。
<body>
<%
//1. 判断是否在Cookie保存过用户信息
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0; i<cookies.length; i++){
//2. 如果有则跳转到用户页面
if(cookies[i].getName().equals("loginID")){
response.sendRedirect("user.jsp");
}
}
}
%>
<form action="user.jsp" method="get">
<label>账号:</label>
<input type="text" id="txtLoginID" name="txtLoginID" /><br />
<label>密码:</label>
<input type="password" id="txtLoginPWD" name="txtLoginPWD"/><br />
<input type="checkbox" id="chkSave" name="chkSave" value="true" />记住账号密码<br />
<input type="submit" value="登录" />
</form>
</body>
二、修改user.jsp代码,将用户的登录信息保存到Cookie中。
<body>
<%
request.setCharacterEncoding("utf-8");
//一、如果是已保存到Cookie,则直接读取数据
String loginID = null;
//1. 判断是否在Cookie保存过用户信息
Cookie[] cookies = request.getCookies();
if(cookies != null){
for(int i=0; i<cookies.length; i++){
//2. 如果有则存到变量
if(cookies[i].getName().equals("loginID")){
loginID = cookies[i].getValue();
break;
}
}
}
//二、否则根据参数读取数据
if(loginID == null){
//1. 获取接收的数据
String chkSave = request.getParameter("chkSave");
loginID = request.getParameter("txtLoginID");
if(chkSave != null){
/* response.getWriter().write(chkSave); */
//2. 如果选中,则把账号保存到Cookie
Cookie loginIDCookie = new Cookie("loginID", loginID);
loginIDCookie.setMaxAge(60);
response.addCookie(loginIDCookie);
}
}
//三、 登录成功显示账号信息,否则跳转到登录页面
if(loginID != null){
response.getWriter().write("输入的账号是:"+loginID);
response.getWriter().write("输入的密码是:"+loginPWD);
}
else{
response.sendRedirect("login.jsp");
}
%>
</body>
这样,一个简单的10天自动登录就完成了。主要使用Cookie来保存数据。
第二个功能:顶部用户中心显示效果(Session)
功能描述:未登录时显示,登录后显示个人信息。
1. 新建blog.jsp页面,编写从Session读取数据的代码。
<body>
<%
String str = "<a href=\"login.jsp\">登录</a> <a href=\"#\">注册</a>";
Object loginID = session.getAttribute("loginID");
if(loginID != null){
str = "<a href='#'>"+loginID+"</a>";
}
%>
<div><%=str %></div>
</body>
2.修改user.jsp,加上将登录信息保存到Session的代码。
<body>
<%
String loginID = null;
String loginPWD = null;
loginID = request.getParameter("txtLoginID");
loginPWD = request.getParameter("txtLoginPWD");
//验证密码是否为123,正确则保存用户信息,否则回到登录功能,并返回错误信息
if(loginPWD.equals("123")){
session.setAttribute("loginID", loginID);
}
else{
session.setAttribute("err", "账号或密码错误!");
response.sendRedirect("login.jsp");
}
%>
</body>
这样,一个简单的登录状态显示效果就完成了。
第三个功能:显示所有在线用户(当前不考虑用户退出的情况)(Application)
1. 修改用户登录的代码,当用户登录成功后,将账号保存到集合,再将集合存到Application中。
<body>
<%
String loginID = null;
String loginPWD = null;
loginID = request.getParameter("txtLoginID");
loginPWD = request.getParameter("txtLoginPWD");
//验证密码是否为123,正确则保存用户信息,否则回到登录功能,并返回错误信息
if(loginPWD.equals("123")){
session.setAttribute("loginID", loginID);
//将当前登录用户保存到全局对象域
List<String> list = (ArrayList<String>)application.getAttribute("userList");
if(list == null){
list = new ArrayList<String>();
}
list.add(loginID);
application.setAttribute("userList", list);
}
else{
session.setAttribute("err", "账号或密码错误!");
response.sendRedirect("login.jsp");
}
%>
</body>
2. 在blog.jsp页面显示所有在线用户。
<body>
<%
String str = "<a href=\"#\">登录</a> <a href=\"#\">注册</a>";
Object loginID = session.getAttribute("loginID");
if(loginID != null){
str = "<a href='#'>"+loginID+"</a>";
}
%>
<div><%=str %></div>
<div>
<p>所有在线用户:</p>
<div>
<%
String userol = "";
//显示所有在线用户
List<String> list = (ArrayList<String>)application.getAttribute("userList");
if(list != null){
for(int i=0; i<list.size(); i++){
userol += list.get(i)+"<br />";
}
}
%>
<%=userol %>
</div>
</div>
</body>
3. 使用不同的浏览器登录,就能在blog.jsp页面看到所有在线用户了。