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>
相关推荐
在本示例中,"Servlet实现购物车"是一个常见的Web应用功能,它利用了HTTP协议无状态的特性以及服务器端存储用户会话信息的技术——Session。购物车功能允许用户在浏览商品时将感兴趣的商品添加到虚拟的购物车中,...
通过以上步骤,你可以在JSP应用中利用Servlet和Session对象实现页面间的数据通信。在实际开发中,结合JBuilder的工具支持,可以更加高效地完成这一任务。不断实践和学习,你将更深入地掌握这些核心技术,提升Web开发...
【标题】"jsp开发实例1——购物车"是一个适合初学者了解JSP技术以及实际应用在电子商务中的案例。在这个实例中,我们将深入学习如何利用JavaServer Pages(JSP)技术来构建一个基本的在线购物车系统。这个系统的核心...
标题 "birt 使用session数据, 通过servlet访问" 涉及到的是在BIRT(Business Intelligence and Reporting Tools)报告引擎中如何利用HTTP Session来传递和使用数据,特别是通过Servlet进行访问。在这个场景下,...
当我们谈论"用Java实现购物车"时,我们通常是指在JavaEE(Java Enterprise Edition)环境中构建一个电子商务网站的核心功能——购物车模块。购物车是在线购物体验的重要组成部分,它允许用户临时存储想要购买的商品...
《Java Web开发基础——从Servlet到JSP》是一本深入探讨Java Web开发的教程,主要涵盖了从基础的Servlet到高级的JSP技术。这个压缩包包含的源代码是该书教学内容的实践部分,旨在帮助读者更好地理解和应用所学知识。...
4. **Session管理**:购物车中的商品信息通常存储在用户的会话(Session)中,以保持用户在浏览页面间的状态。 5. **Maven依赖管理**:通过在`pom.xml`文件中配置相关依赖,如Spring、Hibernate等,Maven自动下载并...
5. **会话管理**:购物车状态通常保存在用户的会话(session)中,需要理解如何在JSP和Servlet中操作session对象。 6. **请求参数传递**:商品ID、数量等信息通过HTTP请求传递,了解如何在JSP和Servlet之间传递这些...
【标题】"简单的购物车"涉及的是一个基于JSP(JavaServer Pages)技术实现的电商系统的核心组件——购物车功能。购物车是电子商务网站中必不可少的一部分,它允许用户选择商品并临时存储,以便于一次性结算。 ...
《基于JavaBean、Servlet与JSP的网上购物系统——学校实训项目详解》 在IT行业中,Web开发是一项至关重要的技能,而Java技术栈是其中的主流之一。本实训项目“学校实训JSP项目-网上购物系统”正是一个典型的应用...
Servlet和JSP通过HTTP session来实现会话跟踪,将用户信息(如购物车、登录状态)保存在服务器端,确保用户在浏览过程中数据的一致性。 7. **安全性** 为了保护用户数据和系统安全,系统应包括身份验证和授权机制...
Cookie主要用于标识用户的Session ID,而Session则用于存储用户的具体状态信息,如登录状态、购物车商品等。 #### 使用Session的步骤 1. **创建Session**:当用户第一次访问网站时,服务器会检查是否已经存在一个...
”说明这是一个完整的购物网站项目,其核心功能——购物车——使用JSP来实现。开发者希望通过分享源代码,促进学习和交流,让其他人能够理解并参考该系统的设计和实现。 【标签解析】:“jsp”、“购物车”、“购物...
本实验主要探讨了如何利用Java Enterprise Edition(J2EE)技术构建一个小型应用系统,包括一个简单的聊天室和一个购物车功能。J2EE是Java平台上用于开发多层企业级应用程序的框架,它提供了丰富的组件和服务,如...
【基于jsp做的期末作品——蛋糕商城】是一款使用JavaServer Pages(JSP)技术开发的电子商务平台,主要展示了在Web开发中如何运用servlet、cookie和session等关键概念。这款简单的蛋糕商城项目涵盖了从用户交互到...
以下将详细解释Cookie和Session的作用、使用方法以及如何利用它们实现商品购物车功能。 1. Cookie的作用与使用方法: Cookie是服务器端发送到客户端(浏览器)的一小段信息,用于存储用户状态。当浏览器再次请求...
本文将深入探讨一个基于JSP(JavaServer Pages)和Servlet技术开发的简单网上商城系统——FoodStore。这个系统展示了如何利用这两种核心技术构建一个功能齐全、交互性强的Web应用程序。 首先,我们要理解JSP和...
### Java Web应用开发:加入购物车 #### 一、项目目标 本项目旨在实现一个基本的...通过以上步骤,我们可以完成一个简单的商品加入购物车功能,并能够在控制台上查看到购物车内的商品信息,为后续的功能扩展打下基础。
开发者可以通过JSP的内置对象(如request、response、session等)与用户交互,同时利用EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化页面逻辑。 **Servlet** 是Java提供的一种...