會(huì)話(huà)跟蹤技術(shù)--session的使用
會(huì)話(huà)跟蹤技術(shù)--session的使用
會(huì)話(huà)跟蹤:
1、 使用隱藏表單字段
<INPUT TYPE=”HIDDEN” NAME=”session” VALUE=”landril”
2、 URL重寫(xiě)
http://host/path/file.jsp?sessionid=landril
3、 持久Cookie
4、 會(huì)話(huà)HttpSession
一、使用session的簡(jiǎn)單步驟
獲取HttpSession(request.getSession()方法)對(duì)象,查找與該會(huì)話(huà)相關(guān)的信息(session.getAttribute()),存儲(chǔ)會(huì)話(huà)中的信息(session.setAttribute()),刪除會(huì)話(huà)中的數(shù)據(jù)(session.removeAttribute()),刪除當(dāng)前會(huì)話(huà)(session.invalidate())
在session中,可以存儲(chǔ)任意數(shù)量的鍵值對(duì),通過(guò)鍵即可獲取相應(yīng)的值,即使用:session.getAttribute(“key”);。
二、session的常用方法
1、 getAttribute():從session中獲取以前存儲(chǔ)的值
2、 getAttributeNames():返回session中所有屬性的名稱(chēng)
3、 setAttribute():將鍵與值關(guān)聯(lián)起來(lái),存儲(chǔ)進(jìn)session
4、 removeAttribute():刪除session中存儲(chǔ)的對(duì)應(yīng)鍵的值
5、 invalidate():刪除整個(gè)session及其存儲(chǔ)的鍵值
6、 logout():注銷(xiāo)當(dāng)前用戶(hù)
7、 getId():獲取每個(gè)session對(duì)應(yīng)的唯一ID
8、 getCreationTime():獲取session創(chuàng)建的時(shí)間
9、 getLastAccessedTime():獲取session最后被訪(fǎng)問(wèn)的時(shí)間
10、 getMaxInactiveInterval():在用戶(hù)沒(méi)有訪(fǎng)問(wèn)的情況下,會(huì)話(huà)在被自動(dòng)廢棄之前應(yīng)該保持多長(zhǎng)時(shí)間
三、使用session的一個(gè)例子,擁有購(gòu)物車(chē)的在線(xiàn)商店
1、CatalogPage.java
package com.landril.session;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class CatalogPage extends HttpServlet {
private CatalogItem[] items;
private String[] itemIds;
private String title;
protected void setItems(String[] itemIds) {
this.itemIds = itemIds;
items = new CatalogItem[itemIds.length];
for (int i = 0; i < items.length; i++) {
items[i] = Catalog.getItem(itemIds[i]);
}
}
protected void setTitle(String title) {
this.title = title;
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if(items == null){
response.sendError(response.SC_NOT_FOUND,"Missing Items:");
return;
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>"+title+"</title></head><body><h3>"+title+"</h3>");
CatalogItem item;
for (int i = 0; i < items.length; i++) {
out.println("<hr>");
item = items[i];
if(item == null)
out.println("Unknow itemId: "+itemIds[i]);
else{
out.println();
String formURL = request.getContextPath()+"/orderPage";
formURL = response.encodeURL(formURL);
out.println("<form action='"+formURL+"'>");
out.println("<input type='hidden' name='itemId' value='"+item.getItemId()+"'>");
out.println(new String(item.getSDesc().getBytes("utf-8"),"GBK")+"$"+item.getPrice()+item.getLDesc());
out.println("<input type='submit' value='add to shopping cart'></form></body></html>");
}
}
}
}
2、ComputerBook.java
package com.landril.session;
public class ComputerBook extends CatalogPage{
public void init(){
String[] ids = {"book1","book2","book3","book4"};
setItems(ids);
setTitle("Japanese Book");
}
}
3、JapaneseBook.java
package com.landril.session;
public class JapaneseBook extends CatalogPage{
public void init(){
String[] ids = {"book5","book6"};
setItems(ids);
setTitle("Computer Book");
}
}
4、OrderPage.java
package com.landril.session;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class OrderPage extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
ShoppingCart cart;
synchronized(session){
cart = (ShoppingCart)session.getAttribute("shop");
if(cart == null){
cart = new ShoppingCart();
session.setAttribute("shop", cart);
}
String itemId = request.getParameter("itemId");
if(itemId != null){
String num = request.getParameter("num");
if(num == null)
cart.addItem(itemId);
else{
int numItems;
try {
numItems = Integer.parseInt(num);
} catch (NumberFormatException e) {
numItems = 1;
}
cart.setNum(itemId, numItems);
}
}
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String title = "Your Order";
out.println("<html><head><title>"+title+"</title></head><body><h3>"+title+"</h3>");
synchronized(session){
List<ItemOrder> itemOrders = cart.getItemOrders();
if(itemOrders.size() == 0)
out.println("No items");
else{
out.println("<table border=1><tr><th>Item ID<th>Short Description<th>Long Description<th>Unit Price<th>Number<th>Total Price");
ItemOrder order;
for (int i = 0; i < itemOrders.size(); i++) {
order = (ItemOrder)itemOrders.get(i);
out.println("<tr><td>"+order.getItemId()+"<td>"+order.getSDesc()+"<td>"+order.getLDesc()+"<td>"+order.getUnitPrice()+"<td>");
out.println("<form><input type='hidden' name='itemId' value='"+order.getItemId()+"'>");
out.println("<input type='text' name='num' size=3 value='"+order.getNum()+"'>");
out.println("<input type='submit' value='update order'></form><td>");
out.println(order.getTotalPrice());
}
String checkURL = response.encodeURL(request.getContextPath()+"/check.html");
out.println("</table><form action='"+checkURL+"'>");
out.println("<input type='submit' value='submit'></form></body></html>");
}
}
}
}
5、ShoppingCart.java
package com.landril.session;
import java.util.ArrayList;
import java.util.List;
public class ShoppingCart {
private List<ItemOrder> itemOrders;
public ShoppingCart() {
itemOrders = new ArrayList<ItemOrder>();
}
public List<ItemOrder> getItemOrders(){
return itemOrders;
}
public synchronized void addItem(String itemId){
ItemOrder order;
for(int i=0;i<itemOrders.size();i++){
order = (ItemOrder)itemOrders.get(i);
if(itemId.equals(order.getItemId())){
order.addNum();
return;
}
}
ItemOrder newOrd = new ItemOrder(Catalog.getItem(itemId));
itemOrders.add(newOrd);
}
public synchronized void setNum(String itemId,int num){
ItemOrder order;
for (int i = 0; i < itemOrders.size(); i++) {
order = (ItemOrder)itemOrders.get(i);
if(itemId.equals(order.getItemId())){
if(num <=0)
itemOrders.remove(i);
else
order.setNum(num);
}
return;
}
ItemOrder newOrd = new ItemOrder(Catalog.getItem(itemId));
itemOrders.add(newOrd);
}
}
6、CatalogItem.java
package com.landril.session;
public class CatalogItem {
private String itemId;
private String sDesc;
private String lDesc;
private float price;
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
public String getLDesc() {
return lDesc;
}
public void setLDesc(String desc) {
lDesc = desc;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public String getSDesc() {
return sDesc;
}
public void setSDesc(String desc) {
sDesc = desc;
}
public CatalogItem(String itemId, String desc, String desc2, float price) {
super();
this.itemId = itemId;
sDesc = desc;
lDesc = desc2;
this.price = price;
}
}
7、ItemOrder.java
package com.landril.session;
public class ItemOrder {
private CatalogItem item;
private int num;
public ItemOrder(CatalogItem item) {
setItem(item);
setNum(1);
}
public CatalogItem getItem() {
return item;
}
public void setItem(CatalogItem item) {
this.item = item;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getItemId() {
return item.getItemId();
}
public String getSDesc() {
return item.getSDesc();
}
public String getLDesc() {
return item.getLDesc();
}
public float getUnitPrice() {
return item.getPrice();
}
public void addNum() {
setNum(num + 1);
}
public void cancelOrder() {
setNum(0);
}
public float getTotalPrice() {
return num * getUnitPrice();
}
}
8、Catalog.java
package com.landril.session;
public class Catalog {
private static CatalogItem[] items = {
new CatalogItem("book1", "Hibernate", "Hibernate,Hibernate", 57),
new CatalogItem("book2", "Spring", "Spring,Spring", 36),
new CatalogItem("book3", "Tomcat", "Tomcat,Tomcat", 23),
new CatalogItem("book4", "Jboss", "Jboss,Jboss", 35),
new CatalogItem("book5", "Japanese1", "Japanese1,Japanese1", 35),
new CatalogItem("book6", "Japanese2", "Japanese2,Japanese2", 23) };
public static CatalogItem getItem(String itemId) {
CatalogItem item;
if (itemId == null)
return null;
for (int i = 0; i < items.length; i++) {
item = items[i];
if (itemId.equals(item.getItemId()))
return item;
}
return null;
}
}
9、check.html
<html>
<head>
<title>checking out</title>
</head>
<body>
Checking out
</body>
posted on 2007-04-28 21:33 landril 閱讀(2646) 評(píng)論(1) 編輯 收藏 所屬分類(lèi): Jsp&Servlet