Servlet——利用Session完成的简单购物车

1.创建登录页面
login.html
< !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > 
<html >
<head >
<meta http -equiv = "Content-Type" content = "text/html; charset=UTF-8" >
<title >登录 < /title >
< /head >
<body >
     <form action = "/login" method = "post" >
        姓名: <input type = "text" name = "username" / > <br / > 
        密码: <input type = "password" name = "password" / > <br / > 
         <input type = "submit" value = "登录" / >
     < /form >
< /body >
< /html >
 
2.购物页面
buy.html
< !DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd" > 
<html >
<head >
<meta http -equiv = "Content-Type" content = "text/html; charset=UTF-8" >
<title >购买 < /title >
< /head >
<body >
     <form action = "/buy" method = "post" >
        货品: <select name = "product" >
             <option value = "鼠标" >鼠标 < /option >
             <option value = "光盘" >光盘 < /option >
             <option value = "手机" >手机 < /option >
         < /select > <br / > 
        数量: <input type = "text" name = "number" / > <br / > 
         <input type = "submit" value = "购买" / >
     < /form >
< /body >
< /html >
 
3.实体类的创建
/day8_shopping_car/src/com/myself/domain/Car.java
package com.myself.domain; 

import java.util.ArrayList;
import java.util.List;

/**
 * 购物车类,可添加,删除和获取购物车项
 * @author Jungor
 *
 */

public class Car {
     // 用于存放CarItem(购物车项)的list
     private List <CarItem > list = new ArrayList <CarItem >();

     /**
     * 获取购物车中的所有购物车项
     * @return 包含所有购物车项的List
     */

     public List <CarItem > list() {

         return list;
    }

     /**
     * 添加购物车项到购物车
     * @param carItem 需要添加的购物车项
     */

     public void add(CarItem carItem) {
         this.list.add(carItem);
    }

     /**
     * 从购物车中删除购物车项
     * @param id 需要删除的购物车项ID
     */

     public void remove(String id) {
         for ( int i = 0; i < list.size(); i ++) {
             if (list.get(i).getId().equals(id)) {
                list.remove(i);
                 break;
            }
        }
    }
}
 
/day8_shopping_car/src/com/myself/domain/CarItem.java
package com.myself.domain; 

/**
 * 购物车项,包含id,货品名,数量
 * @author Jungor
 *
 */

public class CarItem {
     private String id;
     private String product;
     private Integer number;

     public String getId() {
         return id;
    }

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

     public String getProduct() {
         return product;
    }

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

     public Integer getNumber() {
         return number;
    }

     public void setNumber(Integer number) {
         this.number = number;
    }
}
 
/day8_shopping_car/src/com/myself/domain/User.java
package com.myself.domain; 

/**
 * 用户类,用于封装用户登录信息
 * @author Jungor
 *
 */

public class User {
     private String username;
     private String password;

     public String getUsername() {
         return username;
    }

     public void setUsername(String username) {
         this.username = username;
    }

     public String getPassword() {
         return password;
    }

     public void setPassword(String password) {
         this.password = password;
    }

    @Override
     public String toString() {
         return "User [" + username + ", " + password + "]";
    }

}
 
4.创建Servlet
/day8_shopping_car/src/com/myself/servlet/BuyServlet.java
package com.myself.servlet; 

import java.io.IOException;
import java.io.PrintWriter;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.myself.domain.Car;
import com.myself.domain.CarItem;
import com.myself.domain.User;

/**
 * 购买时需要的Servlet,可以将一个购物车项添加到购物车
 * @author Jungor
 *
 */

public class BuyServlet extends HttpServlet {

    @Override
     protected void service(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {

         // 设置编码
        request.setCharacterEncoding( "UTF-8");
        response.setContentType( "text/html;charset=UTF-8");
         // 获取打印流
        PrintWriter out = response.getWriter();

         // 获取货品名称
        String product = request.getParameter( "product");

        Integer number = null;     // 数量
         try {
             // 接收到的是一个String,将其转换为Integer,如果转换失败,则向页面输出提示信息
            number = Integer.parseInt(request.getParameter( "number"));
        } catch (NumberFormatException e) {
            out.println( "数量非法,<a href='/buy.html'>重新填写</a><br/>");
             return;
             //e.printStackTrace();
        }

         // 通过JSESSIONID,获取session对象,如果没有获取到,则新创建一个session对象
        HttpSession session = request.getSession();
         // 在session中获取user属性的对象
        User user = (User) session.getAttribute( "user");
         // 在session中获取car属性的对象
        Car car = (Car) session.getAttribute( "car");

         // 只有当用户已登录,且货品和数量不为空时,才允许添加项到购物车
         if (user != null && product != null && number != null) {

            CarItem carItem = new CarItem();     // 创建购物车项
             // UUID.randomUUID().toString(),一个随机且不重复的字符串,方便购物车项的查询
            carItem.setId(UUID.randomUUID().toString());
            carItem.setProduct(product);
            carItem.setNumber(number);

             // 如果购物车为空,则创建一个购物车,并添加到Session
             if (car == null) {
                car = new Car();
                session.setAttribute( "car", car);
            }

            car.add(carItem);

            out.println( "购买成功<br/>");
            out.println( "<a href='/buy.html'>继续购买</a><br/>");
            out.println( "<a href='/list'>管理列表</a><br/>");
        } else {
            out.println( "<a href='/login.html'>请登录</a><br/>");
        }
    }

}
 
/day8_shopping_car/src/com/myself/servlet/DeleteServlet.java
package com.myself.servlet; 

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;
import javax.servlet.http.HttpSession;

import com.myself.domain.Car;
import com.myself.domain.User;

/**
 * 删除购物加中的购物车项
 * @author Jungor
 *
 */

public class DeleteServlet extends HttpServlet {

    @Override
     protected void service(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {

         // 设置编码
        request.setCharacterEncoding( "UTF-8");
        response.setContentType( "text/html;charset=UTF-8");
         // 获取输出流
        PrintWriter out = response.getWriter();

         // 获取session,如果使用JSESSIONID没有找到则创建一个
        HttpSession session = request.getSession();
         // 获取session中属性名为user的对象
        User user = (User) session.getAttribute( "user");
         // 获取session中属性名为car的对象
        Car car = (Car) session.getAttribute( "car");

         // 接收需要删除的购物车项的id
        String id = request.getParameter( "id");

         // 如果用户已登录,则向下执行,否则向页面输出提示信息
         if (user != null) {
             // 当car对象存在时,才从此购物车中删除购物车项,且转入的id也不为空
             if (car != null && id != null && ! "".equals(id)) {
                car.remove(id);

                out.println( "删除成功<br/>");
                out.println( "<a href='/buy.html'>继续购买</a><br/>");
                out.println( "<a href='/list'>管理列表</a><br/>");
            } else {
                out.println( "也还没车车...");
            }
        } else {
            out.println( "还没登录,禁止操作。<a href='/login.html'>返回登录</a>");
        }
    }

}
 
/day8_shopping_car/src/com/myself/servlet/ListServlet.java
package com.myself.servlet; 

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;
import javax.servlet.http.HttpSession;

import com.myself.domain.Car;
import com.myself.domain.CarItem;
import com.myself.domain.User;

/**
 * 用于显示购物车里面的内容
 * @author Jungor
 *
 */

public class ListServlet extends HttpServlet {

    @Override
     protected void service(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {

         // 设置编码
        request.setCharacterEncoding( "UTF-8");
        response.setContentType( "text/html;charset=UTF-8");
         // 获取输出流
        PrintWriter out = response.getWriter();

         // 获取session,如果使用JSESSIONID没有找到则创建一个
        HttpSession session = request.getSession();
         // 获取session中属性名为car的对象
        Car car = (Car) session.getAttribute( "car");
         // 获取session中属性名为user的对象
        User user = (User) session.getAttribute( "user");

         // 如果user对象为空,则表示还没登录,要求用户登录后才能进行操作
         if (user == null) {
            out.println( "还没登录。<a href='/login.html'>请登录</a>");
             return;
        }

        out.println( "<b>" + user.getUsername() + "</b> 的购物车<br/>");

         // 如果car对象为空,表示还没创建购物车,如果不为空,就表示有购物车,可以依次输出其内容
         if (car != null) {
             for (CarItem carItem : car.list()) {
                out.println( "商品:" + carItem.getProduct() + " 数量:" + carItem.getNumber() + " <a href='/delete?id=" + carItem.getId() + "'>删除</a>");
                out.println( "<hr>");
            }
        } else {
            out.println( "还没购物车,所以没内容");
        }

    }

}
 
/day8_shopping_car/src/com/myself/servlet/LoginServlet.java
package com.myself.servlet; 

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;
import javax.servlet.http.HttpSession;

import com.myself.domain.User;

/**
 * 用户登录,将登录信息封装成一个User对象,并添加到Session
 * @author Jungor
 *
 */

public class LoginServlet extends HttpServlet {

    @Override
     protected void service(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {

         // 设置编码
        request.setCharacterEncoding( "UTF-8");
        response.setContentType( "text/html;charset=UTF-8");
         // 获取输出流
        PrintWriter out = response.getWriter();

         // 接收到的参数
        String username = request.getParameter( "username");
        String password = request.getParameter( "password");

         // 获取session,如果使用JSESSIONID没有找到则创建一个
        HttpSession session = request.getSession();
         // 获取session中属性名为user的对象
        User user = (User) session.getAttribute( "user");

         // 如果user对象为空,用户名和密码不为空,则将登录信息封装为一个User对象,并添加至session中
         if (user == null 
                 && username != null && ! "".equals(username)
                 && password != null && ! "".equals(password)) {

             // 将username和password封装成一个User对象
            user = new User();
            user.setPassword(password);
            user.setUsername(username);

             // 将对象添加到session中
            session.setAttribute( "user", user);

            out.println( "欢迎回来:<b>" + user.getUsername() + "</b> <a href='/logout'>注销</a><br/>");
            out.println( "<a href='/buy.html'>购物</a><br/>");
            out.println( "<a href='/list'>管理购物</a>");

        } else if (user != null && username == null && password == null) {
             //当user对象不为空,但username和password为空,直接读取session中user对象

            out.println( "欢迎回来:<b>" + user.getUsername() + "</b> <a href='/logout'>注销</a><br/>");
            out.println( "<a href='/buy.html'>购物</a><br/>");
            out.println( "<a href='/list'>管理购物</a>");


        } else {

             // 当前面条件不满足时,向页面输出提示信息
            out.println( "<a href='/login.html'>重新登录</a>");
        }

    }

}
 
/day8_shopping_car/src/com/myself/servlet/LogoutServlet.java
package com.myself.servlet; 

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;
import javax.servlet.http.HttpSession;

import com.myself.domain.User;

/**
 * 用户注销
 * @author Jungor
 *
 */

public class LogoutServlet extends HttpServlet {

    @Override
     protected void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

         // 设置编码
        request.setCharacterEncoding( "UTF-8");
        response.setContentType( "text/html;charset=UTF-8");

         // 获取session
        HttpSession session = request.getSession();

         // 注销,让session失效,同时清除user和car在session中的对象
        session.invalidate();
         // 注销后,重定向到登录页面
        response.sendRedirect( "/login.html");
    }
}
 
5.web.xml注册
< ?xml version = "1.0" encoding = "UTF-8" ? > 
<web -app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns :xsi = "http://www.w3.org/2001/XMLSchema-instance"
    xsi :schemaLocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    version = "2.5" >

     <welcome -file -list >
         <welcome -file >index.html < /welcome -file >
         <welcome -file >index.htm < /welcome -file >
         <welcome -file >index.jps < /welcome -file >
     < /welcome -file -list >

     < ! -- 用户登录 -- >
     <servlet >
         <servlet -name >LoginServlet < /servlet -name >
         <servlet - class >com.myself.servlet.LoginServlet < /servlet - class >
     < /servlet >
     <servlet -mapping >
         <servlet -name >LoginServlet < /servlet -name >
         <url -pattern > /login < /url -pattern >
     < /servlet -mapping >

     < ! -- 将购物车项添加到购物车 -- >
     <servlet >
         <servlet -name >BuyServlet < /servlet -name >
         <servlet - class >com.myself.servlet.BuyServlet < /servlet - class >
     < /servlet >
     <servlet -mapping >
         <servlet -name >BuyServlet < /servlet -name >
         <url -pattern > /buy < /url -pattern >
     < /servlet -mapping >

     < ! -- 列出购物车项 -- >
     <servlet >
         <servlet -name >ListServlet < /servlet -name >
         <servlet - class >com.myself.servlet.ListServlet < /servlet - class >
     < /servlet >
     <servlet -mapping >
         <servlet -name >ListServlet < /servlet -name >
         <url -pattern > /list < /url -pattern >
     < /servlet -mapping >

     < ! -- 删除购物车中的购物车项 -- >
     <servlet >
         <servlet -name >DeleteServlet < /servlet -name >
         <servlet - class >com.myself.servlet.DeleteServlet < /servlet - class >
     < /servlet >
     <servlet -mapping >
         <servlet -name >DeleteServlet < /servlet -name >
         <url -pattern > /delete < /url -pattern >
     < /servlet -mapping >

     < ! -- 注销 -- >
     <servlet >
         <servlet -name >LogoutServlet < /servlet -name >
         <servlet - class >com.myself.servlet.LogoutServlet < /servlet - class >
     < /servlet >
     <servlet -mapping >
         <servlet -name >LogoutServlet < /servlet -name >
         <url -pattern > /logout < /url -pattern >
     < /servlet -mapping >

< /web -app >
 
6.测试OK
 
登录页面
 
登录后页面
 
购物页面
 
购物成功
 
购物车





转载于:https://www.cnblogs.com/jungor/archive/2012/04/07/2436632.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的JavaWeb购物功能的完整代码。 首先,我们需要创建一个Servlet来处理购物相关的请求: ``` import java.io.IOException; import java.util.HashMap; import java.util.Map; 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("/cart") public class ShoppingCartServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); // get shopping cart from session Map<String, Integer> cart = (Map<String, Integer>) session.getAttribute("cart"); if (cart == null) { cart = new HashMap<>(); session.setAttribute("cart", cart); } // handle different actions String action = request.getParameter("action"); if ("add".equals(action)) { String item = request.getParameter("item"); Integer quantity = Integer.valueOf(request.getParameter("quantity")); cart.put(item, cart.getOrDefault(item, 0) + quantity); } else if ("remove".equals(action)) { String item = request.getParameter("item"); cart.remove(item); } else if ("clear".equals(action)) { cart.clear(); } // redirect back to shopping cart page response.sendRedirect(request.getContextPath() + "/cart.jsp"); } } ``` 在这个Servlet中,我们首先获取当前Session中的购物对象,如果Session中没有购物对象则创建一个新的购物对象。 然后根据请求参数中的action参数来处理不同的操作。如果是添加商品到购物,则从请求参数中获取商品名和数量,然后将其添加到购物中。如果是从购物中删除商品,则从请求参数中获取商品名,然后将其从购物中删除。如果是清空购物,则清空购物对象。 最后,我们重定向回购物页面。 接下来,我们需要创建一个JSP页面来显示购物中的商品: ``` <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>购物</title> </head> <body> <h1>购物</h1> <table border="1"> <tr> <th>商品名称</th> <th>数量</th> <th>操作</th> </tr> <c:forEach items="${cart}" var="entry"> <tr> <td>${entry.key}</td> <td>${entry.value}</td> <td> <form action="${pageContext.request.contextPath}/cart" method="post"> <input type="hidden" name="action" value="remove"> <input type="hidden" name="item" value="${entry.key}"> <button type="submit">删除</button> </form> </td> </tr> </c:forEach> </table> <form action="${pageContext.request.contextPath}/cart" method="post"> <input type="hidden" name="action" value="clear"> <button type="submit">清空购物</button> </form> <h2>添加商品</h2> <form action="${pageContext.request.contextPath}/cart" method="post"> <input type="hidden" name="action" value="add"> <label>商品名称:</label> <input type="text" name="item"><br> <label>数量:</label> <input type="number" name="quantity"><br> <button type="submit">添加</button> </form> </body> </html> ``` 在这个JSP页面中,我们使用JSTL的<c:forEach>标签来遍历购物中的商品,并显示商品名称、数量和删除按钮。我们还提供了一个清空购物的按钮和一个表单来添加新的商品到购物中。 最后,我们需要在Web应用程序的部署描述符(web.xml)中添加一个Servlet映射: ``` <servlet> <servlet-name>ShoppingCartServlet</servlet-name> <servlet-class>com.example.ShoppingCartServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ShoppingCartServlet</servlet-name> <url-pattern>/cart</url-pattern> </servlet-mapping> ``` 这样,我们就完成了一个简单的JavaWeb购物功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值