📄 cookieapply.java
字号:
package ch08.bookstore;
import javax.servlet.http.*;
import java.util.*;
/*
* Cookie操作类,该类封装了对Cookie操作,并负责维护User对象。
*/
public class CookieApply {
private static int expireTime = 30* 24 * 60 * 60;//Cookie的有效时间为一个月
private User user;
public User getUser(){
return user;
}
/*
* 根据Cookie判断用户是否第一次访问,如果不是第一次访问,取出Cookie内记录的用户信息,
* 并根据这些信息实例化User类
*/
public boolean isFirstAccess(HttpServletRequest request){
String username =getCookieValue(request.getCookies(),"username",null);
String password =getCookieValue(request.getCookies(),"password",null);
String useremail=getCookieValue(request.getCookies(),"useremail",null);
if(username!=null){ //username不为空,说明用户不是第一次访问
user=new User(username,password,useremail);
//将定购过的图书信息从Cookie中取出,放入user对象内
String booksIDOrdered=getCookieValue(request.getCookies(),"booksID",null);
if(booksIDOrdered!=null){
String[] booksID=booksIDOrdered.split("-");
booksOrdered(booksID);
}
return false;
}
return true;
}
/*
* 用户登录,将用户信息写入Cookie,并实例化User类
*/
public void login(HttpServletResponse response, String username,
String password,String useremail)
{
saveCookie(response,"username",username);
saveCookie(response,"password",password);
saveCookie(response,"useremail",useremail);
user=new User(username,password,useremail);
}
/*
* 写Cookie的通用方法
*/
public void saveCookie(HttpServletResponse response, String name,
String value)
{
// Check to make sure the new value is not null (appservers like Tomcat
// 4 blow up if the value is null).
if (value == null) {
value = "";
}
//将值存入Cookie前,使用chineseToUnicode()方法转换编码,解决中文问题
Cookie cookie = new Cookie(name, chineseToUnicode(value));
cookie.setMaxAge(expireTime);
cookie.setPath("/");
response.addCookie(cookie);
}
/*
* 读Cookie的通用方法
*/
public String getCookieValue(Cookie[] cookies,String cookieName,String defaultValue)
{
if(cookies==null) return(defaultValue);
for(int i=0; i<cookies.length; i++) {
Cookie cookie = cookies[i];
if (cookieName.equals(cookie.getName()))
//返回Cookie值前,使用chineseToUnicode()方法转换编码,解决中文问题
return(unicodeToChinese(cookie.getValue()));
}
return(defaultValue);
}
/*
* 将用户定购的图书写入Cookie。
*/
public void orderBooks(HttpServletRequest request,HttpServletResponse response){
String[] booksID=request.getParameterValues("bookID");
if(booksID==null) return;
BookDB bookDB=new BookDB();
for(int i=0;i<booksID.length;i++){
String bookID=booksID[i];
BookDetails book=bookDB.getBook(bookID);
//更新用户的历史定购信息
user.addBookOrdered(book);
}
//将用户曾经定购图书写入Cookie:图书ID转换类似"1-12-13-18...."的形式存入Cookie
String booksIDOrdered="";
Iterator books=user.getBookOrdered();
while (books.hasNext()){
BookDetails bookOrdered=(BookDetails)books.next();
booksIDOrdered=booksIDOrdered + "-" + bookOrdered.getBookID();
}
saveCookie(response,"booksID",booksIDOrdered);
}
//把图书放到用户的历史定购链表中
public void booksOrdered(String[] booksID){
BookDB bookDB=new BookDB();
for(int i=0;i<booksID.length;i++){
String bookID=booksID[i];
BookDetails book=bookDB.getBook(bookID);
user.addBookOrdered(book);
}
}
/*
* 将Unicode编码转换为汉字编码,解决汉字乱码问题
*/
public String unicodeToChinese(String unicodeStr) {
if(unicodeStr==null) return null;
try{
unicodeStr = new String(unicodeStr.getBytes("ISO8859_1"), "gb2312");
return unicodeStr;
}catch(Exception e){
return null;
}
}
/*
* 将汉字编码转换为Unicode编码,解决汉字乱码问题
*/
public String chineseToUnicode(String chineseStr) {
if(chineseStr==null) return null;
try{
chineseStr = new String(chineseStr.getBytes("gb2312"), "ISO8859_1");
return chineseStr;
}catch(Exception e){
return null;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -