会话跟踪技术--session的使用
会话跟踪:
1、使用隐藏表单字段
2、URL重写
http://host/path/file.jsp?sessionid=landril
3、持久Cookie
4、会话HttpSession
一、使用session的简单步骤
获取HttpSession(request.getSession()方法)对象,查找与该会话相关的信息(session.getAttribute()),存储会话中的信息(session.setAttribute()),删除会话中的数据(session.removeAttribute()),删除当前会话(session.invalidate())
在session中,可以存储任意数量的键值对,通过键即可获取相应的值,即使用:session.getAttribute(“key”);。
二、session的常用方法
1、getAttribute():从session中获取以前存储的值
2、getAttributeNames():返回session中所有属性的名称
3、setAttribute():将键与值关联起来,存储进session
4、removeAttribute():删除session中存储的对应键的值
5、invalidate():删除整个session及其存储的键值
6、logout():注销当前用户
7、getId():获取每个session对应的唯一ID
8、getCreationTime():获取session创建的时间
9、getLastAccessedTime():获取session最后被访问的时间
10、getMaxInactiveInterval():在用户没有访问的情况下,会话在被自动废弃之前应该保持多长时间
三、使用session的一个例子,拥有购物车的在线商店
1、CatalogPage.java
packagecom.landril.session;
importjava.io.IOException;
importjava.io.PrintWriter;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
publicclassCatalogPageextendsHttpServlet {
privateCatalogItem[]items;
privateString[]itemIds;
privateStringtitle;
protectedvoidsetItems(String[] itemIds) {
this.itemIds= itemIds;
items=newCatalogItem[itemIds.length];
for(inti = 0; i
items[i] = Catalog.getItem(itemIds[i]);
}
}
protectedvoidsetTitle(String title) {
this.title= title;
}
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
if(items==null){
response.sendError(response.SC_NOT_FOUND,"Missing Items:");
return;
}
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("
"+title+""+title+"
");CatalogItem item;
for(inti = 0; i
out.println("
");
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("
");out.println("");
out.println(newString(item.getSDesc().getBytes("utf-8"),"GBK")+"$"+item.getPrice()+item.getLDesc());
out.println("
");}
}
}
}
2、ComputerBook.java
packagecom.landril.session;
publicclassComputerBookextendsCatalogPage{
publicvoidinit(){
String[] ids = {"book1","book2","book3","book4"};
setItems(ids);
setTitle("Japanese Book");
}
}
3、JapaneseBook.java
packagecom.landril.session;
publicclassJapaneseBookextendsCatalogPage{
publicvoidinit(){
String[] ids = {"book5","book6"};
setItems(ids);
setTitle("Computer Book");
}
}
4、OrderPage.java
packagecom.landril.session;
importjava.io.IOException;
importjava.io.PrintWriter;
importjava.util.List;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importjavax.servlet.http.HttpSession;
publicclassOrderPageextendsHttpServlet {
publicvoiddoGet(HttpServletRequest request, HttpServletResponse response)
throwsServletException, IOException {
HttpSession session = request.getSession();
ShoppingCart cart;
synchronized(session){
cart = (ShoppingCart)session.getAttribute("shop");
if(cart ==null){
cart =newShoppingCart();
session.setAttribute("shop", cart);
}
String itemId = request.getParameter("itemId");
if(itemId !=null){
String num = request.getParameter("num");
if(num ==null)
cart.addItem(itemId);
else{
intnumItems;
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("
"+title+""+title+"
");synchronized(session){
List itemOrders = cart.getItemOrders();
if(itemOrders.size() == 0)
out.println("No items");
else{
out.println("
Item ID | Short Description | Long Description | Unit Price | Number | Total Price"); ItemOrder order; for(inti = 0; i < itemOrders.size(); i++) { order = (ItemOrder)itemOrders.get(i); out.println(" |
---|---|---|---|---|---|
"+order.getItemId()+" | "+order.getSDesc()+" | "+order.getLDesc()+" | "+order.getUnitPrice()+" | "); out.println(" ");out.println(""); out.println(" | "); out.println(order.getTotalPrice()); } String checkURL = response.encodeURL(request.getContextPath()+"/check.html"); out.println(" |
out.println("
");}
}
}
}
5、ShoppingCart.java
packagecom.landril.session;
importjava.util.ArrayList;
importjava.util.List;
publicclassShoppingCart {
privateListitemOrders;
publicShoppingCart() {
itemOrders=newArrayList();
}
publicList getItemOrders(){
returnitemOrders;
}
publicsynchronizedvoidaddItem(String itemId){
ItemOrder order;
for(inti=0;i
order = (ItemOrder)itemOrders.get(i);
if(itemId.equals(order.getItemId())){
order.addNum();
return;
}
}
ItemOrder newOrd =newItemOrder(Catalog.getItem(itemId));
itemOrders.add(newOrd);
}
publicsynchronizedvoidsetNum(String itemId,intnum){
ItemOrder order;
for(inti = 0; i
order = (ItemOrder)itemOrders.get(i);
if(itemId.equals(order.getItemId())){
if(num <=0)
itemOrders.remove(i);
else
order.setNum(num);
}
return;
}
ItemOrder newOrd =newItemOrder(Catalog.getItem(itemId));
itemOrders.add(newOrd);
}
}
6、CatalogItem.java
packagecom.landril.session;
publicclassCatalogItem {
privateStringitemId;
privateStringsDesc;
privateStringlDesc;
privatefloatprice;
publicString getItemId() {
returnitemId;
}
publicvoidsetItemId(String itemId) {
this.itemId= itemId;
}
publicString getLDesc() {
returnlDesc;
}
publicvoidsetLDesc(String desc) {
lDesc= desc;
}
publicfloatgetPrice() {
returnprice;
}
publicvoidsetPrice(floatprice) {
this.price= price;
}
publicString getSDesc() {
returnsDesc;
}
publicvoidsetSDesc(String desc) {
sDesc= desc;
}
publicCatalogItem(String itemId, String desc, String desc2,floatprice) {
super();
this.itemId= itemId;
sDesc= desc;
lDesc= desc2;
this.price= price;
}
}
7、ItemOrder.java
packagecom.landril.session;
publicclassItemOrder {
privateCatalogItemitem;
privateintnum;
publicItemOrder(CatalogItem item) {
setItem(item);
setNum(1);
}
publicCatalogItem getItem() {
returnitem;
}
publicvoidsetItem(CatalogItem item) {
this.item= item;
}
publicintgetNum() {
returnnum;
}
publicvoidsetNum(intnum) {
this.num= num;
}
publicString getItemId() {
returnitem.getItemId();
}
publicString getSDesc() {
returnitem.getSDesc();
}
publicString getLDesc() {
returnitem.getLDesc();
}
publicfloatgetUnitPrice() {
returnitem.getPrice();
}
publicvoidaddNum() {
setNum(num+ 1);
}
publicvoidcancelOrder() {
setNum(0);
}
publicfloatgetTotalPrice() {
returnnum* getUnitPrice();
}
}
8、Catalog.java
packagecom.landril.session;
publicclassCatalog {
privatestaticCatalogItem[]items= {
newCatalogItem("book1","Hibernate","Hibernate,Hibernate", 57),
newCatalogItem("book2","Spring","Spring,Spring", 36),
newCatalogItem("book3","Tomcat","Tomcat,Tomcat", 23),
newCatalogItem("book4","Jboss","Jboss,Jboss", 35),
newCatalogItem("book5","Japanese1","Japanese1,Japanese1", 35),
newCatalogItem("book6","Japanese2","Japanese2,Japanese2", 23) };
publicstaticCatalogItem getItem(String itemId) {
CatalogItem item;
if(itemId ==null)
returnnull;
for(inti = 0; i
item =items[i];
if(itemId.equals(item.getItemId()))
returnitem;
}
returnnull;
}
}
9、check.html
checking outChecking out
posted on 2007-04-28 21:33 landril 阅读(2497) 评论(1) 编辑 收藏 所属分类: Jsp&Servlet