`
sentirZ
  • 浏览: 6375 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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>
 
 
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics