java web用于保持状态的4种方法

方法一:网址重写

通过在url地址后面添加若干的token作为查询字符串来实现。token的值一般为 键=值

    url?key1=value1&key2=value2&...&keyn=valuen

url与token之间需要用?分开,两个token之间则是需要用一个&符号隔开。

此方法适用于token不需要在多个页面中使用时使用。

缺点是

a.在某些浏览器当中url长度有限制

b.url中的信息是可见的,安全性差

c.某些字符需要进行编码

package com.SessionManage.Test;



import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "Top10Servlet", urlPatterns = {"/top10"})
public class Top10Servlet extends HttpServlet {
        private static final long serialVersionUID = 987654321L;
        
        private List<String> londonAttractions;
        private List<String> parisAttractions;
        @Override
        public void init() throws ServletException {
                londonAttractions = new ArrayList<String>(10);
                londonAttractions.add("Buckingham Palace");
                londonAttractions.add("London Eye");
                londonAttractions.add("British Museum");
                londonAttractions.add("National Gallery");
                londonAttractions.add("Big Ben");
                londonAttractions.add("Tower of London");
                londonAttractions.add("Natural History Museum");
                londonAttractions.add("Canary Wharf");
                londonAttractions.add("2012 Olympic Park");
                londonAttractions.add("St Paul's Cathedral");
                
                parisAttractions = new ArrayList<String>(10);
                parisAttractions.add("Eiffel Tower");
                parisAttractions.add("Notre Dame");
                parisAttractions.add("The Louvre");
                parisAttractions.add("Champs Elysees");
                parisAttractions.add("Arc de Triomphe");
                parisAttractions.add("Sainte Chapelle Church");
                parisAttractions.add("Les Invalides");
                parisAttractions.add("Musee d'Orsay");
                parisAttractions.add("Montmarte");
                parisAttractions.add("Sacre Couer Basilica");
        }
        
        @Override
        public void doGet(HttpServletRequest request,HttpServletResponse response)
                throws ServletException,IOException{
                String city = request.getParameter("city");
                if(city!=null&&(city.equals("london")||city.equals("paris"))){
                        showAttractions(request,response,city);
                }else{
                        showMainPage(request,response);
                }
        }

        private void showMainPage(HttpServletRequest request,
                        HttpServletResponse response) throws IOException {
                // TODO Auto-generated method stub
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                writer.print("<html><head>"
                                + "<title>Top 10 Tourist Attractions</title>"
                                + "</head><body>"
                                +"please select a city:"
                                +"<br/><a href='?city=london'>London</a>"
                                +"<br/><a href='?city=paris'>Paris</a>"
                                +"</body></html>");
        }

        private void showAttractions(HttpServletRequest request,
                        HttpServletResponse response, String city) throws ServletException,IOException {
                // TODO Auto-generated method stub
                int page = 1;
                String pageParameter = request.getParameter("page");
                if(pageParameter!=null){
                        try{
                                page = Integer.parseInt(pageParameter);
                        }catch(NumberFormatException e){
                                e.printStackTrace();
                        }
                        if(page>2){
                                page = 1;
                        }
                }
                List<String> attractions = null;
                if(city.equals("london")){
                        attractions = londonAttractions;
                }else if(city.equals("paris")){
                        attractions = parisAttractions;
                }
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                writer.println("<html><head>"
                                +"<title>Top 10 Tourist Attractions</title>"
                                +"</head><body>");
                writer.println("<a href='top10'>Select City</a>");
                writer.println("<hr/>Page"+page+"<hr/>");
                
                int start = page*5-5;
                for(int i = start; i < start+5; i++){
                        writer.println(attractions.get(i)+"<br/>");
                }
                writer.print("<hr />"
                                + "<a href='?city="+city
                                +"&page=1'>Page 1</a>");
                writer.print(" <a href='?city="
                                +city+"&page=2'>Page 2</a>");
                writer.println("</body></html>");
                
        }
}

  方法二:隐藏域

主要适用于页面当中含有表单的情况,当用户提交表单时,隐藏域中的值也传送到服务器。只有当页面包含表单,或者可以在页面添加表单时,才适合使用隐藏域。

此技术胜过网址重写的地方在于可以将更多的字符传递到服务器,且不需要进行字符编码。但仅当所需传递的信息不需要跨越多个页面时,才适合使用这种技术。

package com.SessionManage.Test2;

public class Customer {
        private int id;
        private String name;
        private String city;
        public int getId() {
                return id;
        }
        public void setId(int id) {
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public String getCity() {
                return city;
        }
        public void setCity(String city) {
                this.city = city;
        }
        
}

  

package com.SessionManage.Test2;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "CustomerServlet",urlPatterns = {
                "/customer","/editCustomer","/updateCustomer"})
public class CustomerServlet extends HttpServlet {
        private static final long serialVersionUID = -20L;
        private List<Customer> customers = new ArrayList<Customer>();
        
        @Override
        public void init() throws ServletException{
                Customer customer1 = new Customer();
                customer1.setId(1);
                customer1.setName("Donald D.");
                customer1.setCity("Miami");
                customers.add(customer1);
                
                Customer customer2 = new Customer();
                customer2.setId(2);
                customer2.setName("Mickey M.");
                customer2.setCity("Orlando");
                customers.add(customer2);
        }
        
        private void sendCustomerList(HttpServletResponse response)
                throws IOException {
                        response.setContentType("text/html");
                        PrintWriter writer = response.getWriter();
                        writer.println("<html><head><title>Customer</title></head>"
                                        +"<body><h2>Customers </h2>");
                        writer.println("<ul>");
                        for(Customer customer : customers){
                                writer.println("<li>"+customer.getName()
                                                +"("+customer.getCity()+") "
                                                +"<a href='editCustomer?id="+customer.getId()
                                                +"'>edit</a>");
                        }
                        writer.println("</ul>");
                        writer.println("</body></html>");
        }
        
        private Customer getCustomer(int customerId){
                for(Customer customer : customers){
                        if(customer.getId()==customerId){
                                return customer;
                        }
                }
                return null;
        }
        
        private void sendEditCustomerForm(HttpServletRequest request,HttpServletResponse response)
                                                                        throws IOException {
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                int customerId = 0;
                try{
                        customerId = Integer.parseInt(request.getParameter("id"));
                }catch(NumberFormatException e){
                        e.printStackTrace();
                }
                Customer customer = this.getCustomer(customerId);
                if(customer!=null){
                        writer.println("<html><head>"
                                        +"<title>Edit Customer</title></head>"
                                        +"<body><h2>EditCustomer<h2>"
                                        +"<form method='post'"
                                        +"action='updateCustomer'>");
                        writer.println("<input type='hidden' name='id' value='"
                                        +customerId+"'/>");
                        writer.println("<table>");
                        writer.println("<tr><td>Name:</td><td>"
                                        +"<input name='name' value='"
                                        +customer.getName().replaceAll("'", "'")
                                        +"'/></td></tr>");
                        writer.println("<tr><td>City:</td><td>"
                                        +"<input name='city' value='"
                                        +customer.getCity().replaceAll("'", "'")
                                        +"'/></td></tr>");
                        writer.println("<tr>"
                                        +"<td colspan='2' >"
                                        +"<input type='submit' value='Update'/></td>"
                                        +"</tr>");
                        writer.println("<tr><td colspan='2'>"
                                        +"<a href='customer'>Customer List</a>"
                                        +"</td></tr>");
                        writer.println("</table>");
                        writer.println("</form></body>");
                }else{
                        writer.println("No customer found");
                }
        }
        
        @Override
        public void doGet(HttpServletRequest request,HttpServletResponse response)
                                        throws ServletException, IOException {
                String uri = request.getRequestURI();
                if(uri.endsWith("/customer")){
                        this.sendCustomerList(response);
                }else if(uri.endsWith("/editCustomer")){
                        this.sendEditCustomerForm(request, response);
                }
        }
        
        @Override
        public void doPost(HttpServletRequest request,HttpServletResponse response)
                                                throws ServletException, IOException{
                int customerId = 0;
                try{
                        customerId = Integer.parseInt(request.getParameter("id"));
                }catch(NumberFormatException e){
                        e.printStackTrace();
                }
                Customer customer = this.getCustomer(customerId);
                if(customer!=null){
                        customer.setName(request.getParameter("name"));
                        customer.setCity(request.getParameter("city"));
                }
                this.sendCustomerList(response);
        }
}

方法三:cookie

cookie信息可以跨越多个页面,这点是采用网址重写和隐藏域所无法实现的。cookie是自动在web服务器和浏览器之间传递的一小块信息。

cookie适用于那些需要跨越许多页面的信息。因为cookie是作为http标头嵌入的,因此传输它的过程由http协议处理。此外,可以根据自

己的需要设置cookie的有效期限。对于web浏览器而言,每台web服务器最多可以支持20个cookie。

cookie的不足之处是用户可以通过修改其浏览器设置来拒绝接受cookie。

关于cookie的代码如下:

package com.SessionManage.Test3;

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="PreferenceServlet",urlPatterns={"/preference"})
public class PreferenceServlet extends HttpServlet {
        private static final long serialVersionUID = 888L;

        public static final String MENU = 
                        "<div 
                        +"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.print("<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 ServletException,IOException{
                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>"+"<title>Preference</title>"
                                        +"</head><body>"+MENU
                                        +"Your preference has been set."
                                        +"<br/><br/>Max. Records 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>");
        }
}

  

package com.SessionManage.Test3;

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="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"
        };
        
        public void doGet(HttpServletRequest request,HttpServletResponse response)
                                        throws ServletException,IOException{
                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){
                                e.printStackTrace();
                        }
                }
                
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                writer.print("<html><head>"+"<title>Cookie Class</title>"
                                        +"</head><body>"
                                        +PreferenceServlet.MENU
                                        +"<div>Here are some of the methods in "+
                                        "javax.servlet.http.Cookie");
                writer.print("<ul>");
                
                for(int i = 0;i < maxRecords; i++){
                        writer.print("<li>"+methods[i]+"</li>");
                }
                writer.print("</ul>");
                writer.print("</div></body></html>");
        }
}

  

package com.SessionManage.Test3;

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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.core.Cookie;


@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 ServletException,IOException{
                javax.servlet.http.Cookie[] cookies = request.getCookies();
                StringBuilder styles = new StringBuilder();
                styles.append(".title{");
                if(cookies!=null){
                        for(javax.servlet.http.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.print("<html><head>"+"<title>Cookie Info</title>"
                                        +"<style>"+styles.toString()+"</style>"
                                        +"</head><body>"+PreferenceServlet.MENU
                                        +"<div class='title'>"
                                        +"Session Management with Cookies:</div>");
                writer.print("<div>");
                
                if(cookies==null){
                        writer.print("No cookie in this Http response");
                }else{
                        writer.println("<br/>Cookie in this Http response");
                        for(javax.servlet.http.Cookie cookie : cookies){
                                writer.println("<br/>"+cookie.getName()+":"+cookie.getValue());
                        }
                }
                writer.print("</div>");
                writer.print("</body></html>");
        }
}

方法四:HttpSession对象

用户可以没有或者有一个HttpSession,并且只能访问自己的HttpSession。HttpSession是当一个用户第一次访问某个站点时创建的。通过request中getSession()方法,可以获取用户的HttpSession。而通过HttpSession的setAttribut(name,value)方法可以将值放入到HttpSession当中。

同网址重写、隐藏域和cookie所不同的地方在于,放在HttpSession中的值是保存在内存中的。因此,你只能将尽可能小的对象放在里面,并且数量不能太多。

添加到HttpSession当中的值不一定是String,可以为任意的java对象,只要它的类实现了java.io.Serializable接口即可,以便当Servlet容器认为有必要的时候,保存的对象可以序列化成一个文件或者保存到数据库中。

setAttribute方法要求不同的对象有不同的名称。如果传递一个之前用过的属性名称,那么该名称将与旧值无关联,而与新值关联。

通过HttpSession的getAttribute(name)属性可以获取HttpSession中保存的对象。其另外一个方法getAttributeNames()返回一个Enumeration,迭代一个HttpSession中的

所有属性。

注:HttpSession中保存的值不发送到客户端,这与其它的Session管理方法不同。而是Servlet容器为它所创建的每一个HttpSession生成一个唯一标示符,并将这个标示符作为一个token发送给浏览器,一般是作为一个名为JSESSIONID的cookie,或者作为一个jsessionid参数添加到url后面。在后续的请求中,浏览器会将这个token发送回服务器,使服务器知道是哪个用户在发出请求。

相关代码如下:

package com.SessionManage.Test4;

public class Product {
        private int id;
        private String name;
        private String description;
        private float price;
        
        public Product(int id,String name,String description,float price){
                this.id = id;
                this.name = name;
                this.description = description;
                this.price = price;
        }

        public int getId() {
                return id;
        }

        public void setId(int id) {
                this.id = id;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                this.name = name;
        }

        public String getDescription() {
                return description;
        }

        public void setDescription(String description) {
                this.description = description;
        }

        public float getPrice() {
                return price;
        }

        public void setPrice(float price) {
                this.price = price;
        }
        
}

  

package com.SessionManage.Test4;

public class ShoppingItem {
        private Product product;
        private int quantity;
        
        public ShoppingItem(Product product,int quantity){
                this.product = product;
                this.quantity = quantity;
        }

        public Product getProduct() {
                return product;
        }

        public void setProduct(Product product) {
                this.product = product;
        }

        public int getQuantity() {
                return quantity;
        }

        public void setQuantity(int quantity) {
                this.quantity = quantity;
        }
        
}

  

package com.SessionManage.Test4;

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 serialVersionUID = -20L;
        private static final String CART_ATTRIBUTE = "cart";
        
        private List<Product> products = new ArrayList<Product>();
        private NumberFormat currencyFormat = 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 that can play multiple formats",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")){
                        sendProductDetail(request,response);
                }else if(uri.endsWith("/viewCart")){
                        showCart(request,response);
                }
        }
        
        
        @Override
        protected 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){
                        e.printStackTrace();
                }
                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);
        }

        private Product getProduct(int productId) {
                // TODO Auto-generated method stub
                for(Product product : products){
                        if(product.getId()==productId){
                                return product;
                        }
                }
                return null;
        }

        private void showCart(HttpServletRequest request,
                        HttpServletResponse response) throws IOException {
                // TODO Auto-generated method stub
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                writer.println("<html><head><title>Shopping Cart</title>"
                                                +"</head>");
                writer.println("<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>");
                        writer.println("<tr><td >Quantity"
                                                        +"</td>"
                                                        +"<td >Product</td>"
                                                        +"<td >Price</td>"
                                                        +"<td>Amout</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>");
                                        writer.println("<td>"+quantity+"</td>");
                                        writer.println("<td>"+product.getName()+"</td>");
                                        writer.println("<td>"+currencyFormat.format(price)+"</td>");
                                        double subtotal = price*quantity;
                                        writer.println("<td>"+currencyFormat.format(subtotal)+"</td>");
                                        total += subtotal;
                                        writer.println("</tr>");
                                }
                        }
                        writer.println("<tr><td colspan='4'"
                                                        +">"
                                                        +"Total:"
                                                        +currencyFormat.format(total)
                                                        +"</td></tr>");
                }
                writer.println("</table></body></html>");
        }

        private void sendProductDetail(HttpServletRequest request,
                        HttpServletResponse response) throws IOException {
                // TODO Auto-generated method stub
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                int productId = 0;
                try{
                        productId = Integer.parseInt(request.getParameter("id"));
                }catch(NumberFormatException e){
                        e.printStackTrace();
                }
                Product product = this.getProduct(productId);
                
                if(product!=null){
                        writer.println("<html><head>"
                                                        +"<title>Product Details</title></head>"
                                                        +"<body><h2>Product Details</h2>"
                                                        +"<form method='post' action='addToCart'>");
                        writer.println("<input type='hidden' name='id' "
                                                        +"value='"+productId+"'/>");
                        writer.println("<table>");
                        writer.println("<tr><td>Name:</td><td>"
                                                        +product.getName()+"</td></tr>");
                        writer.println("<tr><td>Description:</td><td>"
                                                        +product.getDescription()+"</td></tr>");
                        writer.println("<tr>"+"<tr>"
                                                        +"<td><input name='quantity'/></td>"
                                                        +"<td><input type='submit' value='Buy'/>"
                                                        +"</td>"
                                                        +"</tr>");
                        writer.println("<tr><td colspan='2'>"
                                                        +"<a href-'products'>Product List</a>"
                                                        +"</td></tr>");
                        writer.println("</table>");
                        writer.println("</form></body>");
                }else{
                        writer.println("No product found");
                }
                
        }

        private void sendProductList(HttpServletResponse response) throws IOException {
                // TODO Auto-generated method stub
                response.setContentType("text/html");
                PrintWriter writer = response.getWriter();
                writer.println("<html><head><title>Products</title>"
                                                +"</head><body><h2>Products</h2>");
                writer.println("<ul>");
                for(Product product :products){
                        writer.println("<li>"+product.getName()+"("
                                                        +currencyFormat.format(product.getPrice())
                                                        +") ("+"<a href='viewProductDetails?id="
                                                        +product.getId()+"'>Details</a>)");
                }
                writer.println("</ul>");
                writer.println("<a href='viewCart'>View Cart</a>");
                writer.println("</body></html>");
        }
}