session的使用

    技术2022-05-11  39

    一、使用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

     

    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>


    最新回复(0)