HttpServlet 会话管理(二) (Cookie Session 简单示例)

来源:互联网 发布:胸肌 知乎 编辑:程序博客网 时间:2024/04/29 01:46
本文代码转载自

《Servlet、JSP和Spring MVC初学指南》



Cookie就是简单的键值传送方法,并能设置其过期时间,这里唯一值得注意的是如果要删除一个Cookie方法为设置同名Cookie(response.addCookie(cookie))预先设置过期时间为0即可(cookie.setMaxAge(0))下面是一个使用Cookie设置页面字体的简单示例
package main.ServletStudy;/** * Created by ehang on 2017/2/9. */import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpServlet;@WebServlet(        name = "PreferenceServlet",        urlPatterns = {"/preference"})public class PreferenceServlet extends HttpServlet {        private static final long serialVersionUID = 888L;        public static final String MENU =                "<div style = 'background:#e8e8e8;padding:15px'>" +                        "<a href = 'cookieClass'>Cookie Class</a>  " +                        "<a href = 'cookieInfo'>Cookie Info</a>  " +                        "<a href = 'preference'>Preference</a></div>";        @Override        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{            response.setContentType("text/html");            PrintWriter writer = response.getWriter();            writer.println("<html><head><title>Preference</title>" +                    "<style>table{font-size:small;background:NavajoWhite}</style>" +                    "</head><body>" +                    MENU +                    "Please Select the values below:" +                    "<form method = 'post'>"                    + "<table>"                    + "<tr><td>Title Font Size: </td><td><select name = 'titleFontSize'>" +                    "<option>large</option>" +                    "<option>x-large</option>" +                    "<option>xx-large</option>" +                    "</select></td></tr>" +                    "<tr><td>Title Style & Weight: </td><td><select name = 'titleStyleAndWeight' multiple>" +                    "<option>italic</option>" +                    "<option>bold</option>" +                    "</select></td></tr>" +                    "<tr><td>Max, Records in Table: </td><td><select name = 'maxRecords'>" +                    "<option>5</option>" +                    "<option>10</option>" +                    "</select></td></tr>" +                    "<tr><td rowspan = '2'><input type = 'submit' value = 'Set'></td></tr>"                    + "</table></form></body></html>");        }        @Override        public void doPost(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{            String maxRecords = request.getParameter("maxRecords");            String[] titleStyleAndWeight = request.getParameterValues("titleStyleAndWeight");            String titleFontSize = request.getParameter("titleFontSize");            response.addCookie(new Cookie("maxRecords", maxRecords));            response.addCookie(new Cookie("titleFontSize", titleFontSize));            Cookie cookie = new Cookie("titleFontWeight", "");            cookie.setMaxAge(0);            response.addCookie(cookie);            cookie = new Cookie("titleFontStyle", "");            cookie.setMaxAge(0);            response.addCookie(cookie);            if(titleStyleAndWeight != null){                for(String style: titleStyleAndWeight){                    if(style.equals("bold")){                        response.addCookie(new Cookie("titleFontWeight", "bold"));                    }else if(style.equals("italic")){                        response.addCookie(new Cookie("titleFontStyle", "italic"));                    }                }            }            response.setContentType("text/html");            PrintWriter writer = response.getWriter();            writer.println("<html><head></head><body>" +                    MENU +                    "Your preference has been set." +                    "<br/><br/>Max. Record in Table: " + maxRecords +                    "<br/>Title Font Size: " + titleFontSize +                    "<br/>Title Font Style & Weight: ");            if(titleStyleAndWeight != null){                writer.println("<ul>");                for(String style:titleStyleAndWeight){                    writer.print("<li>" + style + "</li>");                }                writer.println("</ul>");            }                  writer.println("</body></html>");        }}

上面是一个生成设置Cookies的示例,下面是两个使用Cookies的示例(分别是数量及字体)
package main.ServletStudy;/** * Created by ehang on 2017/2/9. */import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(        name = "CookieClassServlet",        urlPatterns = {"/cookieClass"})public class CookieClassServlet extends HttpServlet  {    private static final long serialVersionUID = 837369L;    private String[] methods = {      "clone", "getComment", "getDomain",            "getMaxAge", "getName", "getPath",            "getSecure", "getValue", "getVersion",            "isHttpOnly", "setComment", "setDomain",            "setHttpOnly", "setMaxAge", "setPath",            "setSecure", "setValue", "setVersion"    };    @Override    public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{        Cookie[] cookies = request.getCookies();        Cookie maxRecordsCookie = null;        if(cookies != null){            for(Cookie cookie: cookies){                if(cookie.getName().equals("maxRecords")){                    maxRecordsCookie = cookie;                    break;                }            }        }        int maxRecords = 5;        if(maxRecordsCookie != null){            try{                maxRecords = Integer.parseInt(maxRecordsCookie.getValue());            }catch(NumberFormatException e){            }        }        response.setContentType("text/html");        PrintWriter writer = response.getWriter();        writer.println("<html><head><title>Cookie Class</title></head>" +                PreferenceServlet.MENU +                "<div>Here are some of the methods in javax.servlet.http.Cookie<ul>");        for(int i = 0;i < maxRecords;i++){            writer.print("<li>" + methods[i] + "</li>");        }         writer.print("</ul></div>" +                "<body></body></html>");    }}

package main.ServletStudy;/** * Created by ehang on 2017/2/9. */import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.Cookie;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;@WebServlet(        name = "CookieInfoServlet",        urlPatterns = {"/cookieInfo"})public class CookieInfoServlet extends HttpServlet {    private static final long serialVersionUID = 3829L;    @Override    public void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException{        Cookie[] cookies = request.getCookies();        StringBuilder styles = new StringBuilder();        styles.append(".title{");        if(cookies != null){            for(Cookie cookie: cookies){                String name = cookie.getName();                String value = cookie.getValue();                if(name.equals("titleFontSize")){                    styles.append("font-size:" + value + ";");                }else if(name.equals("titleFontWeight")){                    styles.append("font-weight:" + value + ";");                }else if(name.equals("titleFontStyle")){                    styles.append("font-style:" + value + ";");                }            }        }        styles.append("}");        response.setContentType("text/html");        PrintWriter writer = response.getWriter();        writer.println("<html><head><title>Cookie Info</title><style>" +                styles.toString() +                "</style></head><body>" +                PreferenceServlet.MENU +                "<div class='title'>Session Management with Cookies:</div>" +                "<div>");        if(cookies == null){            writer.print("No cookies in this HTTP response.");        }else{            writer.println("<br/>Cookies in this HTTP response:");            for(Cookie cookie: cookies){                writer.println("<br/>" + cookie.getName() + ":" + cookie.getValue());            }        }         writer.print("</div></body></html>");    }}

都是进行状态数据传输的方法 Cookie的方法将记录状态的内容放在浏览器能够·看到的地方(Headers)
而session是将实际内容以对象的形式记录于内存中
下面是session的一个简单示例

package SessionStudy;/** * Created by admin on 2017/2/14. */import java.io.IOException;import java.io.PrintWriter;import java.text.NumberFormat;import java.util.ArrayList;import java.util.List;import java.util.Locale;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;@WebServlet(        name = "ShoppingCartServlet",        urlPatterns = {                "/products", "/viewProductDetails",                "/addToCart", "/viewCart"        })public class ShoppingCartServlet extends HttpServlet {        private static final long serialVersionID = -20L;        private static final String CART_ATTRIBUTE = "cart";        private List<Product> products = new ArrayList<>();        private NumberFormat currencyForamt = NumberFormat.getCurrencyInstance(Locale.US);        @Override        public void init()throws ServletException{                products.add(new Product(1, "Bravo 32' HDTV", "Low-cost HDTV from renowned TV manufacturer",                        159.95F));                products.add(new Product(2, "Bravo BluRay Player", "High quality stylish BluRay player", 99.95F));                products.add(new Product(3, "Bravo Stereo System", "5 speaker hifi system with iPod player", 129.95F));                products.add(new Product(4, "Bravo iPod player", "An iPod plug-in ", 39.95F));        }        @Override        public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException{                String uri = request.getRequestURI();                if (uri.endsWith("/products")){                        sendProductList(response);                }else if(uri.endsWith("/viewProductDetails")){                        sendProductDetails(request, response);                }else if(uri.endsWith("viewCart")){                        showCart(request, response);                }        }        private void sendProductList(HttpServletResponse response)throws  IOException{                response.setContentType("text/html");                PrintWriter writer = response.getWriter();                writer.println("<html><head><title>Products</title></head><body>" +                        "<h2>Products</h2>" +                        "<ul>" );                for(Product product: products){                        writer.println("<li>" + product.getName() + "(" + currencyForamt.format(product.getPrice()) +   ") ( " +                                "<a href = 'viewProductDetails?id=" +product.getId() + "'>Details</a> ) </li>");                }                writer.println("</ul><a href = 'viewCart'>View Cart</a></body></html>");        }        private Product getProduct(int productId){                for(Product product: products){                        if(product.getId() == productId){                                return product;                        }                }                return null;        }        private void sendProductDetails(HttpServletRequest request, HttpServletResponse response) throws IOException{                response.setContentType("text/html");                PrintWriter writer = response.getWriter();                int productId = 0;                try{                        productId = Integer.parseInt(request.getParameter("id"));                }catch(NumberFormatException e){                }                Product product = getProduct(productId);                if(product != null){                        writer.println("<html><head><title>Product Details</title></head><body><h2>Product Details</h2>" +                                "<form method = 'post' action = 'addToCart'>" +                                "<input type = 'hidden' name = 'id' value = '" + productId +"'/>" +                                "<table>" +                                "<tr><td>Name:</td><td>" + product.getName() + "</td></tr>" +                                "<tr><td>Descriptiom:</td><td>" + product.getDescription() +  "</td></tr>" +                                "<tr><td><input name = 'quantity'/></td><td><input type='submit' value = 'Buy'/></td></tr>" +                                "<tr><td colspan='2'><a href = 'products'>Products List</a></td></tr>" +                                "</table></form></body></html>");                }                else{                        writer.println("Mo product found");                }        }        private void showCart(HttpServletRequest request, HttpServletResponse response)throws  IOException{                response.setContentType("text/html");                PrintWriter writer = response.getWriter();                writer.println("<html><head><title>Shopping Cart</title></head><body>" +                        "<a href = 'products'>Product List</a>");                HttpSession session = request.getSession();                List<ShoppingItem> cart = (List<ShoppingItem>) session.getAttribute(CART_ATTRIBUTE);                if(cart != null){                        writer.println("<table>" +                                "<tr><td style = 'width:150px'>Product</td><td style = 'width:150px'>Price</td><td>Amount</td></tr>") ;                        double total = 0.0;                        for(ShoppingItem shoppingItem: cart){                                Product product = shoppingItem.getProduct();                                int quantity = shoppingItem.getQuantity();                                if(quantity != 0){                                        float price = product.getPrice();                                        writer.println("<tr><td>" + quantity +"</td><td>" + product.getName() + "</td>" +                                                "<td>"  + currencyForamt.format(price) + "</td>");                                        double subtotal = price * quantity;                                        writer.println("<td>" + currencyForamt.format(subtotal) + "</td>" +                                                "</tr>");                                        total += subtotal;                                }                        }                        writer.println("<tr><td colspan='4' style = 'text-align:right'>" + "Total:" + currencyForamt.format(total) + "</td></tr>");                        writer.println(                        "</table>");                }                writer.println(                        "</body></html>");        }        @Override        public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{                int productId = 0;                int quantity = 0;                try{                     productId = Integer.parseInt(request.getParameter("id"));                     quantity = Integer.parseInt(request.getParameter("quantity"));                }catch(NumberFormatException e){                }                Product product = getProduct(productId);                if(product != null && quantity >= 0){                        ShoppingItem shoppingItem = new ShoppingItem(product, quantity);                        HttpSession session = request.getSession();                        List<ShoppingItem> cart = (List<ShoppingItem>) session.getAttribute(CART_ATTRIBUTE);                        if(cart == null){                                cart = new ArrayList<ShoppingItem>();                                session.setAttribute(CART_ATTRIBUTE, cart);                        }                        cart.add(shoppingItem);                }                sendProductList(response);        }}


0 0
原创粉丝点击