<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
现存图书列表
登录失败
info.jsp
<%–
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/26
Time: 22:56
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>
<%@ page import=“com.sjsq.po.User”%>
<%@ page import=“com.sjsq.dao.UserDao”%>
<%@ page import=“com.sjsq.dao.impl.UserDaoImpl”%>
<%@ page import=“com.sjsq.service.UserService” %>
<%@ page import=“com.sjsq.service.impl.UserServiceImpl” %>
<%@ page import=“java.util.List” %>
<%
// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”
- request.getServerPort() + path + “/”;
%>
现存图书列表
---装饰中---
<%
// 设置接收的编码为UTF-8
request.setCharacterEncoding(“utf-8”);
User user = new User();
UserDao dao = new UserDaoImpl();
String name = request.getParameter(“name”);
String password=request.getParameter(“password”);
user.setName(name);
user.setPassword(password);
User us=dao.login(user);
// 把数据库里面的User获取出来
UserService service = new UserServiceImpl();
List list = service.selectUser(user);
for(int i=0;i<list.size();i++){
user = list.get(i);
}
System.out.println(“显示用户信息:”);
System.out.println(user);
session.setAttribute(“user”,user);
if(us != null){
response.sendRedirect(“book.jsp”);
}else{
response.sendRedirect(“fail.jsp”);
}
%>
login.jsp
<%–
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/19
Time: 22:44
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>
<%
// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”
- request.getServerPort() + path + “/”;
%>
用户登录
---正在美化中---
logout.jsp
<%–
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/25
Time: 21:51
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>
<%
session.invalidate();
response.sendRedirect(“login.jsp”);
%>
register.jsp
<%–
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/21
Time: 23:14
To change this template use File | Settings | File Templates.
–%>
<%@ page language=“java” contentType=“text/html; charset=UTF-8” pageEncoding=“UTF-8” %>
用户注册
---装饰中---
注册
重置
search.jsp
<%–
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/22
Time: 23:28
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>
<%
// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”
- request.getServerPort() + path + “/”;
%>
您的密码是:${user.password}
返回上一级
searchPassword.jsp
<%–
Created by IntelliJ IDEA.
User: shuijianshiqing
Date: 2020/5/22
Time: 23:14
To change this template use File | Settings | File Templates.
–%>
<%@ page contentType=“text/html;charset=UTF-8” language=“java” pageEncoding=“UTF-8” %>
<%
// 获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + “😕/” + request.getServerName() + “:”
- request.getServerPort() + path + “/”;
%>
找回密码
返回上一级
Book
package com.sjsq.po;
import java.io.Serializable;
/**
-
@author shuijianshiqing
-
@date 2020/5/19 22:40
*/
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
private Integer bookid;
private String bookname;
private Double price;
private String author;
private String picture;
private String publish;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getBookid() {
return bookid;
}
public void setBookid(Integer bookid) {
this.bookid = bookid;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public Double getPrice() {
return price;
}
public void setPrice(Double price) {
this.price = price;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getPicture() {
return picture;
}
public void setPicture(String picture) {
this.picture = picture;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
@Override
public String toString() {
return “Book{” +
“bookid=” + bookid +
“, bookname='” + bookname + ‘’’ +
“, price=” + price +
“, author='” + author + ‘’’ +
“, picture='” + picture + ‘’’ +
“, publish='” + publish + ‘’’ +
‘}’;
}
}
Card
package com.sjsq.po;
/**
-
@author shuijianshiqing
-
@date 2020/5/29 19:34
*/
public class Card {
// 主键
private Integer id;
// 用户Id
private Integer userid;
// 用户名
private String username;
// 书名
private Integer bookid;
// 书本的数量
private int booknum;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Integer getUserid() {
return userid;
}
public void setUserid(Integer userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public Integer getBookid() {
return bookid;
}
public void setBookid(Integer bookid) {
this.bookid = bookid;
}
public int getBooknum() {
return booknum;
}
public void setBooknum(int booknum) {
this.booknum = booknum;
}
@Override
public String toString() {
return “Card{” +
“id=” + id +
“, userid=” + userid +
“, username='” + username + ‘’’ +
“, bookid=” + bookid +
“, booknum=” + booknum +
‘}’;
}
}
User
package com.sjsq.po;
import java.io.Serializable;
/**
-
@author shuijianshiqing
-
@date 2020/5/19 22:19
-
用户的实体类
*/
public class User implements Serializable {
// 增加序列号,作用是反序列化的时候不会报错,切能进行IO的持久化
public static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String password;
private String email;
private String phone;
public static long getSerialVersionUID() {
return serialVersionUID;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return “User{” +
“id=” + id +
“, name='” + name + ‘’’ +
“, password='” + password + ‘’’ +
“, email='” + email + ‘’’ +
“, phone='” + phone + ‘’’ +
‘}’;
}
}
BookDao
package com.sjsq.dao;
import com.sjsq.po.Book;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/20 23:13
-
图书信息接口
*/
public interface BookDao {
/**
-
查询图书信息
-
@param sql
-
@param arr
-
@return
*/
public List select(String sql,Object[] arr);
/**
-
根据图书编号进行查询
-
@param id
-
@return
*/
public Book getBook(Integer id);
}
CardDao
package com.sjsq.dao;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/29 19:42
*/
public interface CardDao {
/**
-
通过用户Id获取用户的购物车
-
@param id
-
@return
*/
public List getCard(Integer id);
/**
-
添加用户信息和图书信息到用户的购物车
-
@param user
-
@param book
-
@param booknum
-
@return
*/
public boolean addCard(User user, Book book,Integer booknum);
/**
-
使用Book来获取booknum
-
@param book
-
@return
*/
public Integer getBookNum(Book book);
}
UserDao
package com.sjsq.dao;
import com.sjsq.po.User;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/20 22:10
-
创建一个接口用于声明用户登录注册的方法
*/
public interface UserDao {
/**
-
用户登录
-
@param user
-
@return
*/
public User login(User user);
/**
-
用户注册
-
@param user
-
@return
*/
public boolean register(User user);
/**
-
查询用户信息
-
@param sql
-
@param arr
-
@return
*/
public List selectUser(String sql,Object arr[]);
}
BookService
package com.sjsq.service;
import com.sjsq.po.Book;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/20 23:37
-
Book的Service层
*/
public interface BookService {
/**
-
查询图书信息
-
@param book
-
@return
*/
public List select(Book book);
/**
-
根据编号来查询
-
@param book
-
@return
*/
public Book getBook(Book book);
}
CardService
package com.sjsq.service;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/29 23:00
*/
public interface CardService {
/**
-
获取用户的购物车
-
@param id
-
@return
*/
public List getCard(Integer id);
/**
-
添加用户信息和图书信息到用户的购物车
-
@param user
-
@param book
-
@param booknum
-
@return
*/
public boolean addCard(User user, Book book, Integer booknum);
/**
-
根据Book获取booknum
-
@param book
-
@return
*/
public Integer getBookNum(Book book);
}
UserService
package com.sjsq.service;
import com.sjsq.po.User;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/20 22:54
-
Service层
*/
public interface UserService {
/**
-
用户查询的信息
-
@param user
-
@return
*/
public List selectUser(User user);
}
BookServiceImpl
package com.sjsq.service.impl;
import com.sjsq.dao.BookDao;
import com.sjsq.dao.impl.BookDaoImpl;
import com.sjsq.po.Book;
import com.sjsq.service.BookService;
import java.util.ArrayList;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/20 23:42
-
Book的Service实现层
*/
public class BookServiceImpl implements BookService {
private BookDao dao = new BookDaoImpl();
/**
-
查询所有图书信息
-
@param book
-
@return
*/
@Override
public List select(Book book) {
StringBuffer sql = new StringBuffer("select * from book where 1 = 1 ");
List list = new ArrayList();
if(book != null){
// 根据bookid来查找对应的书籍
if(book.getBookid() != null && book.getBookid() != 0){
sql.append(" and bookid = ?");
list.add(book.getBookid());
}
}
return dao.select(sql.toString(),list.toArray());
}
/**
-
根据图书编号查询信息
-
@param book
-
@return
*/
@Override
public Book getBook(Book book) {
if(book.getBookid() != null && book.getBookid() != 0){
return dao.getBook(book.getBookid());
}
return null;
}
}
CardServiceImpl
package com.sjsq.service.impl;
import com.sjsq.dao.CardDao;
import com.sjsq.dao.impl.CardDaoImpl;
import com.sjsq.po.Book;
import com.sjsq.po.Card;
import com.sjsq.po.User;
import com.sjsq.service.CardService;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/29 23:01
*/
public class CardServiceImpl implements CardService {
private CardDao dao = new CardDaoImpl();
@Override
public List getCard(Integer id) {
if(id != null){
return dao.getCard(id);
}
return null;
}
/**
-
添加信息到购物车
-
@param user
-
@param book
-
@param booknum
-
@return
*/
@Override
public boolean addCard(User user, Book book, Integer booknum) {
return dao.addCard(user,book,booknum);
}
/**
-
根据Book查询booknum
-
@param book
-
@return
*/
@Override
public Integer getBookNum(Book book) {
if(dao.getBookNum(book) == null){
return 0;
}
return dao.getBookNum(book);
}
}
UserServiceImpl
package com.sjsq.service.impl;
import com.sjsq.dao.UserDao;
import com.sjsq.dao.impl.UserDaoImpl;
import com.sjsq.po.User;
import com.sjsq.service.UserService;
import java.util.ArrayList;
import java.util.List;
/**
-
@author shuijianshiqing
-
@date 2020/5/20 22:56
*/
public class UserServiceImpl implements UserService {
// 定义dao对象
private UserDao dao = new UserDaoImpl();
/**
-
查询用户信息
-
@param user
-
@return
*/
@Override
public List selectUser(User user) {
StringBuffer sql = new StringBuffer("select * from user where 1 = 1 ");
List list = new ArrayList();
if(user != null){
// 按照姓名查询
if(user.getName() != null && !user.getName().equals(“”)){
sql.append(" and name = ?");
list.add(user.getName());
}
// 按照email查询
if(user.getEmail() != null && !user.getEmail().equals(“”)){
sql.append(" and email = ?");
list.add(user.getEmail());
}
}
// 交给dao层处理逻辑
return dao.selectUser(sql.toString(),list.toArray());
}
}
BaseDao
package com.sjsq.utils;
import java.sql.*;
/**
-
@author shuijianshiqing
-
@date 2020/5/19 23:08
-
数据交互层dao层
*/
public class BaseDao {
private static String driver = “com.mysql.cj.jdbc.Driver”;
private static String url = “jdbc:mysql://localhost/book_management?serverTimezone=UTC”;
private static String user = “root”;
private static String password = “admin”;
/**
-
连接数据库的方法
-
@return
-
@throws ClassNotFoundException
-
@throws SQLException
*/
public static Connection getConnection() throws ClassNotFoundException, SQLException {
// 加载数据库驱动
Class.forName(driver);
Connection con = DriverManager.getConnection(url,user,password);
return con;
}
/**
-
关闭数据库的方法
-
@param con
-
@param ps
-
@param rs
*/
public static void close(Connection con, PreparedStatement ps, ResultSet rs){
// 关闭资源,避免出现异常
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps != null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con != null){
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
-
设置增删改的方法
-
@param sql
-
@param arr
-
@return
*/
public static boolean addUpdateDelete(String sql,Object[] arr){
Connection con = null;
PreparedStatement ps = null;
try {
// 第一步:连接数据库
con = BaseDao.getConnection();
// 第二步:预编译
ps = con.prepareStatement(sql);
// 第三步:设置值
if(arr != null && arr.length !=0){
for (int i = 0; i < arr.length; i++) {
ps.setObject(i+1,arr[i]);
}
}
int count = ps.executeUpdate();
if(count > 0){
return true;
}else{
return false;
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
public static void main(String[] args){
try {
BaseDao.getConnection();
System.out.println(“—测试数据库链接成功—”);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
jquery-3.4.1.min.js
mysql-connector-java-8.0.15.jar
====================================================================
/*
Navicat Premium Data Transfer
Source Server : MySQL
Source Server Type : MySQL
Source Server Version : 80013
Source Host : localhost:3306
Source Schema : book_management
Target Server Type : MySQL
Target Server Version : 80013
File Encoding : 65001
Date: 01/06/2020 21:45:17
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
– Table structure for book
DROP TABLE IF EXISTS book
;
CREATE TABLE book
(
bookid
int(11) NOT NULL AUTO_INCREMENT,
bookname
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
price
decimal(10, 2) NULL DEFAULT NULL,
author
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
picture
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
publish
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (bookid
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
– Records of book
INSERT INTO book
VALUES (1, ‘水浒传’, 23.00, ‘施耐庵’, NULL, ‘人民文学出版社’);
INSERT INTO book
VALUES (2, ‘西游记’, 25.00, ‘吴承恩’, NULL, ‘人民文学出版社’);
INSERT INTO book
VALUES (3, ‘红楼梦’, 35.00, ‘曹雪芹’, NULL, ‘人民文学出版社’);
INSERT INTO book
VALUES (4, ‘三国演义’, 28.00, ‘罗贯中’, NULL, ‘人民文学出版社’);
– Table structure for card
DROP TABLE IF EXISTS card
;
CREATE TABLE card
(
id
int(11) NOT NULL AUTO_INCREMENT,
userid
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
username
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
bookid
varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
booknum
int(11) NULL DEFAULT NULL,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 13 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
– Records of card
INSERT INTO card
VALUES (11, ‘1’, ‘2001’, ‘1’, 2);
INSERT INTO card
VALUES (12, ‘1’, ‘2001’, ‘3’, 1);
– Table structure for user
DROP TABLE IF EXISTS user
;
CREATE TABLE user
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
password
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
email
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
phone
varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (id
) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 54 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
– Records of user
INSERT INTO user
VALUES (1, ‘2001’, ‘111111’, ‘312321@qq.com’, ‘31321’);
INSERT INTO user
VALUES (53, ‘张三’, ‘1’, ‘’, ‘’);
SET FOREIGN_KEY_CHECKS = 1;
========================================================================
手写日志太麻烦,所以后来出现了Log4j,Jsp中Java代码和Html混在一起,太不方便了,所以后来有了Servlet和各种框架,所以这也就是框架的意义。简单的事情重复做,做到一定的熟练度,把它抽象出来,形成公用的方法,就有了框架。还要数据连接,JDBC里面有很多重复性代码,后续就有了Mybatis等等。
备注1:关于如何搭建项目之前文章里面已经写过,请移步:
备注2:若您想添加管理员增删改查功能,请移步:
备注3:感谢别先生的博客,是参照他的博客实现的。
备注4:要是侵犯到您的权益,请通知我删除此文章。
===================================================================
Java+JSP系统系列实现
Java+Servlet+JSP系统系列实现
Java+SSM系统系列实现
Java+SSH系统系列实现
Java+Springboot系统系列实现
Java+Springboot+Bootstrap实现网上商城系统
JavaSwing+Mysql系统系列实现
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
‘’, ‘’);
SET FOREIGN_KEY_CHECKS = 1;
========================================================================
手写日志太麻烦,所以后来出现了Log4j,Jsp中Java代码和Html混在一起,太不方便了,所以后来有了Servlet和各种框架,所以这也就是框架的意义。简单的事情重复做,做到一定的熟练度,把它抽象出来,形成公用的方法,就有了框架。还要数据连接,JDBC里面有很多重复性代码,后续就有了Mybatis等等。
备注1:关于如何搭建项目之前文章里面已经写过,请移步:
备注2:若您想添加管理员增删改查功能,请移步:
备注3:感谢别先生的博客,是参照他的博客实现的。
备注4:要是侵犯到您的权益,请通知我删除此文章。
===================================================================
Java+JSP系统系列实现
Java+Servlet+JSP系统系列实现
Java+SSM系统系列实现
Java+SSH系统系列实现
Java+Springboot系统系列实现
Java+Springboot+Bootstrap实现网上商城系统
JavaSwing+Mysql系统系列实现
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-HFFQcNXb-1715457392880)]
[外链图片转存中…(img-T8PoVK0h-1715457392881)]
[外链图片转存中…(img-JohiVp4n-1715457392881)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!