# JSP_Java_Project **Repository Path**: personal-java-project/jsp_-java_-project ## Basic Information - **Project Name**: JSP_Java_Project - **Description**: This is the first Java project. Using JSP. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-12-01 - **Last Updated**: 2022-06-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JSP_Java_Project #### 介绍 This is the first JavaWeb project. 一个简单的商城系统,包含用户登录注册、添加购物车、结算等核心业务。 #### 开发环境 + 开发工具: eclipse + jdk/jre: 1.8 + mysql: 5.5 + tomcat: 8.5 + 版本控制: git #### 端口占用 1. mysql: 3306 2. proejct: 8080 #### 技术选型 ##### Web层 + Servlet: 前端控制器 + JSP: 视图 + Filter: 过滤器 + BeanUtils: 数据封装 + json-lib: json解析 ##### Service层 + Javamail: java发送邮件 ##### Dao层 + MySql: 数据库racemall > 1.用户表 > 2.商品表 > 3.商品分类表 > 4.订单表 + Druid: 数据库连接池 #### 模块划分 ##### 用户模块 ###### 1. 登录 > 用户信息持久化存储 > 自动登录(通过cookie和session的使用,实现自动登录) 1. 第一次登录执行流程 用户第一次登录的时候,只要勾选自动登录功能,就生成一个cookie,并将用户名和密码保存到cookie中存放到用户的浏览器中 ![第一次登录](https://images.gitee.com/uploads/images/2020/1204/120208_cc71cde0_4955352.png "1.png") + 生成cookie的代码:UserServlet.java ```java // TODO 自动登录 // 4)自动登录 // 4.1)判断用户是否选择了自动登录功能 String autoLogin = req.getParameter("autoLogin"); if("on".equalsIgnoreCase(autoLogin)) { // 用户选择了自动登录 Cookie cookie = new Cookie("autoLogin", username + "&" + password); // 自动登录信息有效期7天 cookie.setMaxAge(60 * 60 * 24 * 7); cookie.setPath(req.getContextPath()); resp.addCookie(cookie); } ``` 2. 第二次登录执行流程 在cookie中读取用户的账号和密码,进行自动登录,登录成功后将用户名和密码放到session中 ![第二次登录](https://images.gitee.com/uploads/images/2020/1204/120511_63e66039_4955352.png "2.png") + AutoLoginFilter代码:AutoLoginFilter.java ```java package com.junlong.web.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import com.junlong.entity.User; import com.junlong.service.UserService; import com.junlong.service.impl.UserServiceImpl; /** * 全局自动登录过滤器 * * @author junlong * @date 2020-12-04 11:19:14 */ @WebFilter("/*") public class AutoLoginFilter implements Filter { public void init(FilterConfig fConfig) throws ServletException { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 父接口强制转换为子接口 HttpServletRequest req = (HttpServletRequest) request; // HttpServletResponse resp = (HttpServletResponse) response; // 先获取session中的user,如果存在,则直接放行,否则,用cookie自动登录 Object userObj = req.getSession().getAttribute("user"); if(userObj == null) { Cookie[] cookies = req.getCookies(); Cookie cookie = null; // 判断cookies是否为null,防止空指针异常 if(cookies != null && cookies.length > 0) { for(Cookie c : cookies) { String cookieName = c.getName(); if("autoLogin".equals(cookieName)) { // 存在自动登录信息 cookie = c; break; } } } // 存在自动登录的cookie,进行自动登录 if(cookie != null) { String[] name_pwd = cookie.getValue().split("&"); String username = name_pwd[0]; String password = name_pwd[1]; // 创建用户业务层对象 UserService userService = new UserServiceImpl(); User user = userService.login(username, password); // 存储用户信息至session中 req.getSession().setAttribute("user", user); } } // 如果session中存在user信息,则直接放行 chain.doFilter(request, response); } public void destroy() { } } ``` ###### 2. 退出登录 清除session和cookie中用户信息 ```java /** * 退出登录 * * @param req * @param resp */ public void logout(HttpServletRequest req, HttpServletResponse resp) { try { // 1)获取session HttpSession session = req.getSession(); // 2)清除session session.invalidate(); // 清除cookie Cookie[] cookies = req.getCookies(); if (cookies != null && cookies.length > 0) { for (Cookie c : cookies) { if ("autoLogin".equals(c.getName())) { //设置cookie存活时间为0 c.setMaxAge(0); //将cookie响应到前台 resp.addCookie(c); break; } } } // 3)重定向到首页 resp.sendRedirect(req.getContextPath() + "/"); } catch (IOException e) { e.printStackTrace(); } } ``` ###### 3. 注册 > 字段校验 > 邮箱激活 ##### 商品模块 ###### 1. 商品分类 ###### 2. 商品分页(带分类的分页) ###### 3. 浏览记录(cookie) ##### 购物车模块 ###### 1. 添加购物车 ###### 2. 购物车查询 ###### 3. 删除 ###### 4. 清空购物车 ##### 订单模块 ###### 1. 订单查询 ###### 2. 第三方订单支付