点赞点关注,今年就暴富
目录
前言
一、版本
二、实践部分
1. 用户部分
2. 购物部分
总结
前言
我的代码放在码云了,欢迎自己提取,么么哒~~~
(Javaweb小白一只,请大佬指点一二)
NutStore_project: 期末作业,自己实践搞的一个购物小系统(tomcat + Mysql + JDBC +jsp ) (gitee.com)
一、版本
JDK : 1.8 Oracle OpenJDK version 1.8.0 91
MySQL:8.0
Tomcat :8.5.82
添加以下的库
在pom.xml进行以下配置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
二、实践部分
1. 用户部分
建立一个User数据表,可以在命令提示符中进行,也可以在workbenck中,建议用后者:
create database final_exam_jdbc;
use final_exam_jdbc;
create table user(
id int primary key auto_increment, -- id
username varchar(40), -- 用户名
password varchar(40), -- 密码
gender varchar(40), -- 性别
email varchar(60), -- email
telephone varchar(40), -- 电话号码
introduce varchar(60) -- 自我介绍
)character set utf8 collate utf8_general_ci auto_increment=1000;
insert into user(id,username ,password
,gender ,email
,telephone,introduce) values(1000,"admin","123456",
"男","PRC@qq.com",
"12340","我国是工人阶级领导的,以工农联盟为基础的人民民主专政的社会主义国家");
select * from user;
构造完数据库后,进入IDEA进行数据库连接工具和数据库操作Dao类的编写,以及User对象的set和get,对数据库内容的存放类。
建立User类
package cn.nuit.nut_project.domain;
import java.io.Serializable;
public class User implements Serializable {
private static final long serialVersionUID = 1L;
private Integer id; // 用户编号
private String username; // 用户姓名
private String password; // 用户密码
private String gender; // 用户性别
private String email; // 用户邮箱
private String telephone; // 用户联系电话
private String introduce; // 用户介绍
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
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;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public String getIntroduce() {
return introduce;
}
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
}
建立DButils类,对数据库进行连接
package cn.nuit.nut_project.Utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBUtils {
public static Connection getConnection() throws ClassNotFoundException,
SQLException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/final_exam_jdbc?&serverTimezone=Asia/Shanghai";
String username = "root";
String password = "123456";
Connection conn = DriverManager.getConnection(url, username,
password);
System.out.println("yes!!!!");
return conn;
}
// 关闭数据库连接,释放资源
public static void release(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
stmt = null;
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
conn = null;
}
}
public static void release(ResultSet rs, Statement stmt,
Connection conn){
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
rs = null;
}
release(stmt, conn);
}
}
UserDao类 ,包括增删改查
package cn.nuit.nut_project.Dao;
import cn.nuit.nut_project.Utils.DBUtils;
import cn.nuit.nut_project.domain.User;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
public class UserDao {
public boolean insert(User user) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
String sql = "Insert Into user(id,username,password,gender,email,telephone,introduce)"+
"values("
+user.getId() // 获取ID
+",'"
+user.getUsername() // 获取用户名
+"','"
+user.getPassword() // 获取密码
+"','"
+user.getGender() // 获取性别
+"','"
+user.getEmail() // 获取email
+"','"
+user.getTelephone() //获取电话号码
+"','"
+user.getIntroduce() // 获取个人介绍
+"')";
int num = stmt.executeUpdate(sql);
if (num>0){
return true;
}
} catch (Exception e){
e.printStackTrace();
}finally {
DBUtils.release(rs,stmt,conn);
}
return false;
}
public ArrayList
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
ArrayList
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
String sql = "SELECT * FROM user";
rs = stmt.executeQuery(sql);
while (rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setGender(rs.getString("gender"));
user.setEmail(rs.getString("email"));
user.setTelephone(rs.getString("telephone"));
user.setIntroduce(rs.getString("introduce"));
list.add(user);
}
return list;
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtils.release(rs,stmt,conn);
}
return null;
}
public User find(Integer id){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = DBUtils.getConnection();
stmt = conn.createStatement();
String sql = "SELECT * FROM user where id = "+id;
rs = stmt.executeQuery(sql);
while (rs.next()){
User user = new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
user.setGender(rs.getString("gender"));
user.setEmail(rs.getString("email"));
user.setTelephone(rs.getString("telephone"));
user.setIntroduce(rs.getString("introduce"));
return user;
}
return null;
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtils.release(rs,stmt,conn);
}
return null;
}
public boolean delete(int id){
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try{
conn = DBUtils.getConnection();
stmt = conn.createStatement();
String sql = "delete from user where id="+id;
int num = stmt.executeUpdate(sql);
if (num>0){
return true;
}
return false;
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtils.release(rs,stmt,conn);
}
return false;
}
public boolean update(User user) {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = DBUtils.getConnection();
stmt = conn.createStatement();
String sql = "UPDATE user set id='"
+user.getId()
+"',username='"
+user.getUsername()
+"',password='"
+user.getPassword()
+"',gender='"
+user.getGender()
+"',email='"
+ user.getEmail()
+"',telephone='"
+ user.getTelephone()
+"',introduce='"
+ user.getIntroduce()
+"'where id = "
+ user.getId();
int num = stmt.executeUpdate(sql);
if (num>0){
return true;
}
return false;
}catch (Exception e){
e.printStackTrace();
}finally {
DBUtils.release(rs,stmt,conn);
}
return false;
}
public boolean findbone(Integer id, String password) {
Connection con = null;
PreparedStatement stat = null;
ResultSet rs = null;
boolean result = false;
try {
con = DBUtils.getConnection();
stat = con.prepareStatement("SELECT *FROM user WHERE id = ? and password = ?");
stat.setInt(1, id);
stat.setString(2, password);
rs = stat.executeQuery();
if (rs.next()) {
result = true;
} else {
result = false;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtils.release(rs,stat,con);
}
return result;
}
}
接下俩编写登录注册的操作, 以及JSP连接的操作
登录
用户在前端进行账号和密码的输入,后端通过 req.getParameter进行获取。
通过UserDao的findone()函数,进行密码账号的匹配判断,返回布尔类型数据,做完登陆成功与否的判别。
package cn.nuit.nut_project.servlet;
import cn.nuit.nut_project.Dao.UserDao;
import cn.nuit.nut_project.domain.User;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet(name = "loginServlet",value = "/loginServlet")
public class loginServlet extends HttpServlet {
UserDao UD = new UserDao();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
// resp.sendRedirect(req.getContextPath()+"/loginSuccess.jsp");
req.setCharacterEncoding("utf-8");
int id= Integer.parseInt(req.getParameter("id"));
String password = req.getParameter("password");
// resp.getWriter().println(id);
if(UD.findbone(id,password)){
HttpSession session = req.getSession();
User user = UD.find(id);
session.setAttribute("user", user);
System.out.println(user);
RequestDispatcher dispatcher = req.getRequestDispatcher("Profile.jsp");
dispatcher.forward(req, resp);
// resp.sendRedirect(req.getContextPath()+"/Profile.jsp");
}else{
resp.sendRedirect(req.getContextPath()+"/loginError.jsp");
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
JSP 前端你可以通过GPT进行生成,还是挺方便的,自己进行微调。
<%--
Created by IntelliJ IDEA.
User: 25381
Date: 2024/1/2
Time: 16:14
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
注册
注册页面的操作,通过从前端获取的数据,到Inser函数,将数据添加到数据库中。
package cn.nuit.nut_project.servlet;
import cn.nuit.nut_project.Dao.UserDao;
import cn.nuit.nut_project.domain.User;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "registerServlet", value = "/registerServlet")
public class registerServlet extends HttpServlet {
UserDao UD = new UserDao();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
System.out.println("注册请求!!!!!!!!!!!!!!!!!!");
resp.setContentType("text/html;charset=utf-8");
req.setCharacterEncoding("UTF-8");
try {
UserDao UD = new UserDao();
User user = new User();
user.setId(Integer.parseInt(req.getParameter("id")));
user.setUsername(req.getParameter("username"));
user.setPassword (req.getParameter("password"));
user.setGender(req.getParameter("gender"));
user.setEmail(req.getParameter("email"));
user.setTelephone(req.getParameter("telephone"));
user.setIntroduce(req.getParameter("introduce"));
if (UD.insert(user)){
resp.sendRedirect(req.getContextPath()+"/registerSuccess.jsp");
System.out.println("注册成功");
}else{
resp.sendRedirect(req.getContextPath()+"/registerError.jsp");
System.out.println("注册失败");
}
}catch (Exception e){
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doPost(req, resp);
// resp.sendRedirect(req.getContextPath()+"/registerSuccess.jsp");
doGet(req,resp);
}
}
注册页面的JSP代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
新用户注册
function validatePassword() {
var password = document.getElementById("password").value;
var password2 = document.getElementById("password2").value;
if (password !== password2) {
alert("输入的密码不一样");
return false;
}
document.getElementById("registrationForm").submit();
}
2. 购物部分
购物部分的代码基本都是通过session实现,并且出来produce连接了数据库,其他都没有什么特别的,与一个静态网页无异。因此这里不进行展示,代码可以去我的码云里面进行copy。
网址
Nut_dingdang/NutStore_project - 码云 - 开源中国 (gitee.com)
三、页面展示
用户未登录,点击添加购物车,会跳转到登陆页面。(为用户提供一个未登录浏览)
输入密码错误会出现以下情况
GPT生成的有点糙,将就一下吧。
添加购物车后,购物车页面情况。这里的删除操作就不进行展示了。
点击提交订单,生成订单页面
总结
主要掌握如何前后端数据流的连接与操作,其实难度不大,快去试一试吧
参考阅读
发表评论