⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cookieapply.java

📁 jsp 应用开发技术光盘 是《jsp应用开发技术》这本书的源代码
💻 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 + -