Servlet+JavaBean应用
[实验任务]实现购物车功能
[任务介绍]
1、任务描述
网上购物是人们日常生活的重要事情之一。作为学生,网上买书更是一件稀疏平常的事情,比如我们学的数据库,数据结构等,都可以通过网络购买,便宜又快捷。
本任务要求,通过所学Servlet的Session知识以及购物车的访问流程(详见P.152),模拟实现购物车功能。用户需要先登录,然后跳转到商品列表页面,点击购买则跳转到购物车中所购买商品的列表页面,否则,返回商品列表页面。另外,在商品列表页面,可以按照商品名称进行查询。
备注:
(1)本任务需要编写1个html页面(可以参考下图)、5个Servlet文件(一个实现验证码,一个是实现登录,一个是商品列表,一个实现添加购物车功能,一个显示购物车信息)、2个JavaBean文件和1个列表文件,参考下图。
(2)当首次登录商品列表页面,提示用户进行登录。登录成功进入到商品列表页面;
(3)选择某个商品,点击“购买”,可以把该商品添加到购物车内;
(4)每次加入,查询购物车里该商品是否存在,如果存在,数量加1;
(5)计算购买物品总价格。
2、运行结果
图1 登录界面
图2 登录失败
图3 商品信息列表
图4 购物车列表页面
图5 首次登录购物车列表页面
[任务目标]
- 学会分析“实现购物车”程序的实现思路;
- 根据思路独立完成“实现购物车”的源代码编写、编译和运行;
- 掌握Servlet运行原理;
- 掌握购物车的工作流程;
- 熟练应用Servlet技术和Session对象完成购物车。
[实现思路]
- 通过Login.html进行界面登录,与Servlet文件进行链接。
- CheckServlet主要用于产生随机验证码。
- LoginServlet用于判断用户输入账号、密码以及验证码是否正确。当信息填写正确跳转到购买界面(PuechaseServlet),否则提示错误,重新跳转到登录界面。
- ListBookServlet用于输出图书信息。
- CartServlet用于统计购买信息,通过list数组进行购买图书的信息输出以及全部图书的总价格统计。
[实现代码以及运行效果]
Login.html(其中url调用的图片需要自己设置哦~)
<!DOCTYPE html>
<html>
<head>
<title>Login.html</title>
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="this is my page">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
<style type="text/css">
body{
background-image: url(images/3.jpg);
}
#title{
font-family:"新宋体";
position:absolute;
color:brown;
font-size:60px;
left:40px;
}
#content{
background-image: url(images/5.jpg);
position:absolute;
top:25%;
left:10%;
width:50%;
height:400px;
margin-top:-200;
background-color:#34495e;
text-align-last:left;
padding-left:30%;
filter:alpha(Opacity=60);
-moz-opacity:0.8;
opacity:0.8;
}
#a{
color:#3498db;
font-size:20px;
height:25px;
width:230px;
border-radius:25px;
}
#a1{
color:#3498db;
font-size:15px;
height:25px;
width:230px;
border-radius:25px;
}
#denglu{
background-color:white;
border-radius:10px;
border:0;
height:30px;
width:90px;
padding:5px 26px;
font-size:16px;
margin-left:15%;
}
#content h1{
color:white;
font-size:50px;
padding-left:55px;
padding-top:20px;
}
</style>
</head>
<body>
<div id="content">
<h1>Welcom</h1><br/>
<form name="reg" action="servlet/LoginServlet" method="POST">
<h4>账 号 <input name="usename" id="a" type="text"></h4>
<h4>密 码 <input name="password" id="a" type="password"></h4>
<h4>验证码 <input type="text" name="identify" id="a1">
<img src="servlet/CheckServlet">
</h4>
<h3><input type="submit" value="登录" id="denglu" name="denglu"></h3>
</form>
</div>
</body>
</html>
LoginServlet.java
package myservlet;
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;
public class LoginServlet extends HttpServlet {
public LoginServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
String usename = request.getParameter("usename");
String password = request.getParameter("password");
String identify1 = request.getParameter("identify");
String identify2 = (String) request.getSession().getAttribute("identify");
if (usename.equals("admin")&&password.equals("123")&&identify1.equals(identify2)){
String url = "PurchaseServlet";
String newurl = response.encodeRedirectURL(url);
response.sendRedirect(newurl);
}else if(!identify1.equals(identify2))
response.getWriter().print("验证码输入错误,请<a href = '/shiyan1/Login.html'>重新输入</a>");
else if(!usename.equals("admin")||!password.equals("123"))
response.getWriter().print("账号或密码错误,请<a href = '/shiyan1/Login.html'>重新登录</a>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
public void init() throws ServletException {
// Put your code here
}
}
ListBookServlet.java
package myservlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import javabean.Book;
import javabean.BookDB;
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 ListBookServlet extends HttpServlet {
public ListBookServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
Collection<Book> books = BookDB.getAll();
out.write("您已登录,欢迎你,admin!<br/>");
out.write("本站提供的图书有:<br>");
for (Book book : books) {
String url = "PurchaseServlet?id=" + book.getId();
String newUrl=response.encodeRedirectURL(url);
out.write(book.getName() +"\t"+book.getPrice()+ "\t <a href='" + newUrl + "'>点击购买</a><br>");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
public void init() throws ServletException {
// Put your code here
}
}
CartServlet.java
package myservlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;
import java.util.List;
import javabean.Book;
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 CartServlet extends HttpServlet {
public CartServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
@SuppressWarnings("null")
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 变量cart引用用户的购物车
List<Book> cart = null;
// 变量pruFlag标记用户是否买过商品
boolean purFlag = true;
// 获得用户的session
HttpSession session = request.getSession(false);
// 如果session为null,purFlag置为false
if (session == null) {
purFlag = false;
} else {
// 获得用户购物车
cart = (List) session.getAttribute("cart");
// 如果用的购物车为null,purFlag置为false
if (cart == null) {
purFlag = false;
}
}
/*如果purFlag为false,表明用户没有购买图书 重定向到ListServlet页面*/
double price = 0;
if (!purFlag) {
out.write("对不起!您还没有购买任何商品!<br>");
} else {
// 否则显示用户购买图书的信息
out.write("<h3>" + "您购买的图书有:<br>" + "</h3>");
for (Book book : cart) {
out.write("<h4>"+book.getName() + "\t");
out.write(book.getPrice() + "\t");
out.write(book.getNumber() + "<br>");
price=price+book.getPrice();
}
}
String url = "ListBookServlet";
String newUrl=response.encodeRedirectURL(url);
out.write( "<h4>" + "<a href='" + newUrl + "'>继续购买</a><br>");
out.write("<h4>" + "您购买图书的总费用为:" + price);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
public void init() throws ServletException {
// Put your code here
}
}
PurchaseServlet.java
package myservlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import javabean.Book;
import javabean.BookDB;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class PurchaseServlet extends HttpServlet {
public PurchaseServlet() {
super();
}
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获得用户购买的商品
String id = request.getParameter("id");
if (id == null) {
// 如果id为null,重定向到ListBookServlet页面
String url = "ListBookServlet";
response.sendRedirect(url);
return;
}
Book book = BookDB.getBook(id);
// 创建或者获得用户的Session对象
HttpSession session = request.getSession();
// 从Session对象中获得用户的购物车
List<Book> cart = (List) session.getAttribute("cart");
if (cart == null) {
cart = new ArrayList<Book>(); // 首次购买,为用户创建一个购物车(List集合模拟购物车)
session.setAttribute("cart", cart);// 将购物城存入Session对象
}
// 将商品放入购物车
int flag = 1;
for (Book book1 : cart){
if (book1.getName().equals(book.getName())){
book1.setNumber(book.getNumber()+1);
flag = 0;
break;
}
}
if (flag == 1)
cart.add(book);
// 创建Cookie存放Session的标识号
Cookie cookie = new Cookie("JSESSIONID", session.getId());
cookie.setMaxAge(60 * 30);
cookie.setPath("/shiyan1");
response.addCookie(cookie);
// 重定向到购物车页面
String url = "CartServlet";
// response.sendRedirect(url);
String newurl=response.encodeRedirectURL(url);
response.sendRedirect(newurl);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
public void init() throws ServletException {
// Put your code here
}
}
Book.java
package javabean;
public class Book {
private static final long serialVersionUID = 1L;
private String id;
private String name;
private double price;
private int number;
public Book(String id, String name, double price, int number) {
super();
this.id = id;
this.name = name;
this.price = price;
this.number = number;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
}
BookDB.java
package javabean;
import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;
public class BookDB {
private static Map<String, Book> books = new LinkedHashMap<String, Book>();
static {
books.put("1", new Book("1", "javaweb开发",45,1));
books.put("2", new Book("2", "jdbc开发",56,1));
books.put("3", new Book("3", "java基础",40,1));
books.put("4", new Book("4", "struts开发",78,1));
books.put("5", new Book("5", "spring开发",63,1));
}
// 获得所有的图书
public static Collection<Book> getAll() {
return books.values();
}
// 根据指定的id获得图书
public static Book getBook(String id) {
return books.get(id);
}
}
登录界面(背景图片可以自己设置哦~)
当账号或密码登录错误时,提示“账号或密码错误,请重新登录”。
当验证码输入错误时,提示“验证码输入错误,请重新输入”。
登录成功后显示购买界面
点击购买链接跳转到结算界面