JavaEE Web实验一

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 首次登录购物车列表页面

 

[任务目标]

  1. 学会分析“实现购物车”程序的实现思路;
  2. 根据思路独立完成“实现购物车”的源代码编写、编译和运行;
  3. 掌握Servlet运行原理;
  4. 掌握购物车的工作流程;
  5. 熟练应用Servlet技术和Session对象完成购物车。

[实现思路] 

  1. 通过Login.html进行界面登录,与Servlet文件进行链接。
  2. CheckServlet主要用于产生随机验证码。
  3. LoginServlet用于判断用户输入账号、密码以及验证码是否正确。当信息填写正确跳转到购买界面(PuechaseServlet),否则提示错误,重新跳转到登录界面。
  4. ListBookServlet用于输出图书信息。
  5. 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);
	}
}

登录界面(背景图片可以自己设置哦~)

 当账号或密码登录错误时,提示“账号或密码错误,请重新登录”。

 当验证码输入错误时,提示“验证码输入错误,请重新输入”。

登录成功后显示购买界面

 点击购买链接跳转到结算界面

  • 5
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值