简易图书管理系统(主要是jsp的练习)

时间:2023-03-09 03:28:31
简易图书管理系统(主要是jsp的练习)

1:首先设计用户表和图书表,设计的字段和类型如下图所示

  1.1:用户表user

简易图书管理系统(主要是jsp的练习)

 1.2:图书表book

简易图书管理系统(主要是jsp的练习)

2:第二写实体类user.java和book.java

 package com.bie.po;

 import java.io.Serializable;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午9:59:03
* 用户的实体类
*/
public class User implements Serializable{ //增加序列号
private static final long serialVersionUID = 1L;
private Integer id;
private String name;
private String password;
private String email;
private String phone;
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;
} //重写toString 方法
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
+ "]";
} }
 package com.bie.po;

 import java.io.Serializable;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 上午10:19:08
* 图书的实体类
*/
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 pic;
private String publish;
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 getPic() {
return pic;
}
public void setPic(String pic) {
this.pic = pic;
}
public String getPublish() {
return publish;
}
public void setPublish(String publish) {
this.publish = publish;
}
//重写toString()方法
@Override
public String toString() {
return "Book [bookid=" + bookid + ", bookname=" + bookname + ", price=" + price + ", author=" + author
+ ", pic=" + pic + ", publish=" + publish + "]";
} }

3:第三写登陆页面login.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>用户登陆页面</title>
<style type="text/css">
h1{text-align:left;}
h4{text-align:left;color:red;}
body{background:url(images/1.png)}
a{text-decoration:none;font-size:20px;color:black;}
a:hover{text-decoration:underline;font-size:24px;color:red;}
</style> </head>
<body>
<form action="info.jsp" method="post">
<h1>用户登陆页面</h1>
<h4>装饰中......</h4>
<hr/>
<table align="left">
<tr>
<td>账号:</td>
<td><input type="text" name="name" id="name"></td>
</tr>
<tr>
<td>密码:</td>
<td><input type="password" name="password" id="password"></td>
<td><a href="searchPassword.jsp">找回密码</a></td>
</tr>
<tr>
<td colspan="1">
</td>
<td>
<input type="submit" value="登陆"/>
<input type="reset" value="重置"/>
<a href="register.jsp" target="_blank">注册</a>
</td>
</tr>
</table>
</form>
</body>
</html>

4:写完登陆页面就需要实现登陆的功能了,开始写后台BaseDao.java连接数据库

 package com.bie.utils;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ResourceBundle; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:01:14
* 数据交互层dao层
*/
public class BaseDao { private static String driver="com.mysql.jdbc.Driver";
private static String url="jdbc:mysql:///test";
private static String user="root";
private static String password="123456"; /***
* 连接数据库的方法
* @return
* @throws ClassNotFoundException
* @throws SQLException
*/
public static Connection getCon() throws ClassNotFoundException, SQLException{
Class.forName(driver);//加载数据库驱动
System.out.println("测试加载数据库成功");
Connection con=DriverManager.getConnection(url, user, password);
System.out.println("测试数据库链接成功");
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) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(con!=null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} /***
* 同意增删改的方法
* @param sql
* @param arr
* @return
*/
public static boolean addUpdateDelete(String sql,Object[] arr){
Connection con=null;
PreparedStatement ps=null;
try {
con=BaseDao.getCon();//第一步 :连接数据库的操作
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();//第四步:执行sql语句
if(count>0){
return true;
}else{
return false;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
} /*public static void main(String[] args) {
try {
BaseDao.getCon();
System.out.println("测试数据库链接成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/ }

5:写完工具类BaseDao.java开始写UserDao.java接口和UserDaoImpl.java实现类

 package com.bie.dao;

 import java.util.List;

 import com.bie.po.User;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:38:40
* 创建一个接口用于声明用户登陆注册的方法
*/
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<User> selectUser(String sql,Object[] arr);
}
 package com.bie.dao.impl;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import com.bie.dao.UserDao;
import com.bie.po.Book;
import com.bie.po.User;
import com.bie.utils.BaseDao; /**
* @author BieHongLi
* @version 创建时间:2017年2月21日 上午10:38:56
*
*/
public class UserDaoImpl implements UserDao{ @Override
public User login(User user) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=BaseDao.getCon();//1:获取数据库的连接
//2:书写sql语句
String sql="select * from user where name=? and password=? ";
ps=con.prepareStatement(sql);//3:预编译
//4:设置值
ps.setString(1, user.getName());
ps.setString(2, user.getPassword());
rs=ps.executeQuery();//5:执行sql语句
User users=null;
if(rs.next()){
users=new User();
//从数据库中获取值设置到实体类的setter方法中
users.setId(rs.getInt("id"));
users.setName(rs.getString("name"));
users.setPassword(rs.getString("password"));
users.setEmail(rs.getString("email"));
users.setPhone(rs.getString("phone")); return user;
}else{
return null;
} } catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源,避免出现异常
BaseDao.close(con, ps, rs);
}
return null;
} /***
* 插入的方法,即注册
*/
@Override
public boolean register(User user) {
String sql="insert into user values(0,?,?,?,?) ";
List<Object> list=new ArrayList<Object>();
list.add(user.getName());
list.add(user.getPassword());
list.add(user.getEmail());
list.add(user.getPhone()); boolean flag=BaseDao.addUpdateDelete(sql,list.toArray());
if(flag){
return true;
}else{
return false;
}
} @Override
public List<User> selectUser(String sql, Object[] arr) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=BaseDao.getCon();//第一步连接数据库
ps=con.prepareStatement(sql);//第二步:预编译
if(arr!=null){
for(int i=0;i<arr.length;i++){
ps.setObject(i+1, arr[i]);
}
}
//第四步执行sql
rs=ps.executeQuery();
List<User> list=new ArrayList<User>();
while(rs.next()){
User user=new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPassword(rs.getString("password"));
user.setEmail(rs.getString("email"));
user.setPhone(rs.getString("phone"));
//System.out.println(user);//测试数据
list.add(user);
}
return list;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源,避免出现异常
BaseDao.close(con, ps, rs);
} return null;
} }

6:写完dao层,写service层的接口和实现类

 package com.bie.service;

 import java.util.List;

 import com.bie.po.User;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 下午1:58:59
*
*/
public interface UserService { /***
* 用户查询的信息
* @param user
* @return
*/
public List<User> selectUser(User user);
}
 package com.bie.service.impl;

 import java.util.ArrayList;
import java.util.List; import com.bie.dao.UserDao;
import com.bie.dao.impl.UserDaoImpl;
import com.bie.po.User;
import com.bie.service.UserService; /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 下午1:59:36
*
*/
public class UserServiceImpl implements UserService{ private UserDao dao=new UserDaoImpl(); @Override
public List<User> selectUser(User user) {
//sql语句
//String sql="select * from user ";
StringBuilder sql=new StringBuilder("select * from user where 1=1 ");
List<Object> list=new ArrayList<Object>();
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());
} }
return dao.selectUser(sql.toString(), list.toArray());
} }

7:然后就可以进行登陆了,由于登陆之后显示的是book列表,所以把图书的查询的dao层和service层也列出来

 package com.bie.dao;

 import java.util.List;

 import com.bie.po.Book;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 上午10:22:45
* 图书信息的接口
*/
public interface BookDao { /***
* 图书信息查询的方法
* @param sql
* @param arr
* @return
*/
public List<Book> select(String sql,Object[] arr); /***
* 获取图书的编号进行查询
* @param book
* @return
*/
public Book getBook(Integer id);
}
 package com.bie.dao.impl;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import com.bie.dao.BookDao;
import com.bie.po.Book;
import com.bie.utils.BaseDao; /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 上午10:24:02
*
*/
public class BookDaoImpl implements BookDao{ @Override
public List<Book> select(String sql, Object[] arr) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=BaseDao.getCon();//第一步连接数据库
ps=con.prepareStatement(sql);//第二步:预编译
if(arr!=null){
for(int i=0;i<arr.length;i++){
ps.setObject(i+1, arr[i]);
}
}
//第四步执行sql
rs=ps.executeQuery();
List<Book> list=new ArrayList<Book>();
while(rs.next()){
Book book=new Book();
book.setBookid(rs.getInt("bookid"));
book.setBookname(rs.getString("bookname"));
book.setPrice(rs.getDouble("price"));
book.setAuthor(rs.getString("author"));
book.setPic(rs.getString("pic"));
book.setPublish(rs.getString("publish")); list.add(book);
}
return list;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源,避免出现异常
BaseDao.close(con, ps, rs);
} return null;
} @Override
public Book getBook(Integer id) {
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
con=BaseDao.getCon();//第一步连接数据库
String sql="select * from book where bookid = ? ";
ps=con.prepareStatement(sql);//第二步:预编译
ps.setInt(1, id); //第四步执行sql
rs=ps.executeQuery();
while(rs.next()){
Book books=new Book();
books.setBookid(rs.getInt("bookid"));
books.setBookname(rs.getString("bookname"));
books.setPrice(rs.getDouble("price"));
books.setAuthor(rs.getString("author"));
books.setPic(rs.getString("pic"));
books.setPublish(rs.getString("publish")); return books;
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//关闭资源,避免出现异常
BaseDao.close(con, ps, rs);
} return null;
} }
 package com.bie.service;

 import java.util.List;

 import com.bie.po.Book;

 /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 上午10:56:42
*
*/
public interface BookService { /***
* 图书信息查询的方法
* @return
*/
public List<Book> select(Book book); /***
* 根据id进行查询
* @param id
* @return
*/
public Book getBook(Book book);
}
 package com.bie.service.impl;

 import java.util.ArrayList;
import java.util.List; import com.bie.dao.BookDao;
import com.bie.dao.impl.BookDaoImpl;
import com.bie.po.Book;
import com.bie.service.BookService; /**
* @author BieHongLi
* @version 创建时间:2017年2月23日 上午10:57:01
*
*/
public class BookServiceImpl implements BookService{ private BookDao dao=new BookDaoImpl(); public List<Book> select(Book book){
//String sql="select * from book ";
StringBuilder sql=new StringBuilder("select * from book where 1=1 ");
//sql语句
List<Object> list=new ArrayList<Object>();
if(book!=null){ if(book.getBookid()!=null && book.getBookid()!=0){
sql.append(" and bookid=? ");
list.add(book.getBookid());
}
/*list.add(book.getBookname());
list.add(book.getPrice());
list.add(book.getAuthor());
list.add(book.getPic());
list.add(book.getPublish());*/
} return dao.select(sql.toString(), list.toArray());
} @Override
public Book getBook(Book book) {
if(book.getBookid()!=null && book.getBookid()!=0){
return dao.getBook(book.getBookid());
}
return null;
} }

8:现在展示登陆之后的页面

简易图书管理系统(主要是jsp的练习)


9:现在展示注册的功能,由于dao层和service层在上面都已经说过了,这里只显示没写的register.jsp页面和doregister.jsp页面

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>注册的页面</title>
<style type="text/css">
h1{text-align:center;}
h4{text-align:right;color:red;}
body{background:url(images/2.png)}
</style> <script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
//alert("测试jQuery是否能用");
$("#form1").submit(function(){
var name=$("#name").val();//获取提交的值
if(name.length==0){//进行判断,如果获取的值为0那么提示账号不能为空
//alert("aa");//测试使用
$("#nameError").html("账号不能为空");
return false;
} //密码进行验证不能为空
var password=$("#password").val();//获取提交的密码的值
if(password.length==0){
$("#passwordError").html("密码不能为空");
return false;
} //确认密码进行验证
var relpassword=$("#relpassword").val();//获取提交的确认密码的值
if(relpassword.length==0){
$("#relpasswordError").html("确认密码不能为空哦");
return false;
} if(password!=relpassword){
$("#relpasswordError").html("确认密码输入不正确,请重新输入");
return false;
}
}); });
</script>
</head>
<body>
<form action="doregister.jsp" method="post" id="form1">
<h1>用户注册页面</h1>
<h4>装饰中......</h4>
<hr/>
<table align="center">
<tr>
<td>账&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</td>
<td>
<input type="text" name="name" id="name"/>
<div id="nameError" style="display:inline;color:red;"></div>
</td>
</tr>
<tr>
<td>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:</td>
<td>
<input type="password" name="password" id="password">
<div id="passwordError" style="display:inline;color:red;"></div>
</td>
</tr>
<tr>
<td>确认密码:</td>
<td>
<input type="password" name="relpassword" id="relpassword">
<div id="relpasswordError" style="display:inline;color:red;"></div>
</td>
</tr>
<tr>
<td>电话号码:</td>
<td><input type="text" name="phone" id="phone"></td>
</tr>
<tr>
<td>电子邮件:</td>
<td><input type="text" name="email" id="email"></td>
</tr>
<tr>
<td colspan="1">
</td>
<td>
<input type="submit" value="注册"/>
<input type="reset" value="重置"/>
<a href="login.jsp" target="_blank">登陆</a>
</td>
</tr>
</table>
</form>
</body>
</html>
 <%@page import="com.bie.dao.impl.UserDaoImpl"%>
<%@page import="com.bie.dao.UserDao"%>
<%@page import="com.bie.po.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<%
User user=new User();
//获取login.jsp页面提交的账号和密码
String name=request.getParameter("name");
String password=request.getParameter("password");
String email=request.getParameter("email");
String phone=request.getParameter("phone"); //获取register.jsp页面提交的账号和密码设置到实体类User中
user.setName(name);
user.setPassword(password);
user.setEmail(email);
user.setPhone(phone); //引入数据交互层
UserDao dao=new UserDaoImpl();
boolean flag=dao.register(user); if(flag){
response.sendRedirect("login.jsp");
}else{
response.sendRedirect("register.jsp");
}
%>
</body>
</html>

效果如下所示:

简易图书管理系统(主要是jsp的练习)


10:找回密码的功能searchPassword.jsp页面和dosearchPassword.jsp和search.jsp页面

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>找回密码</title>
<style type="text/css">
body{background:url(images/3.jpg)}
</style>
</head>
<body>
<h1>找回密码</h1>
<hr/>
<a href="javascript: window.history.go(-1)">返回上一级</a>
<form action="dosearchPassword.jsp" method="post">
<table>
<tr>
<td>请输入账号:</td>
<td><input type="text" name="name"/></td>
</tr>
<tr>
<td colspan="1"></td>
<td>
<input type="submit" value="提交">
<input type="reset" value="重置">
</td>
</tr>
</table>
</form> </body>
</html>
 <%@page import="java.util.List"%>
<%@page import="com.bie.service.impl.UserServiceImpl"%>
<%@page import="com.bie.po.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<%
User user=new User();
//获取login.jsp页面提交的账号和密码
String name=request.getParameter("name");
user.setName(name); UserServiceImpl service=new UserServiceImpl();
List<User> list=service.selectUser(user);
request.setAttribute("list", list);
for(User u:list){
request.setAttribute("user", u);
out.print(u);
}
if(user!=null){
//response.sendRedirect("search.jsp");//不传输数据的转发
request.getRequestDispatcher("search.jsp").forward(request, response);
} %>
</body>
</html>
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>弹出信息</title> <script type="text/javascript">
alert("您的密码是:${user.password}");
</script> </head>
<body style="background-color:pink;">
<h1>您的密码是:${user.password}</h1>
<a href="javascript: window.history.go(-1)">返回上一级</a>
</body>
</html>

效果如下所示:

简易图书管理系统(主要是jsp的练习)


11:图书列表的功能和图书详情的功能book.jsp页面,doInfo.jsp页面,detail.jsp页面

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ page import="java.util.List" %>
<%@ page import="com.bie.po.Book" %>
<%@ page import="com.bie.service.impl.BookServiceImpl" %> <%@ include file="head.jsp" %>
<!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>
<style type="text/css">
h1{text-align:center;}
</style>
</head>
<body>
<%
Book book=new Book();
BookServiceImpl service=new BookServiceImpl();
List<Book> list=service.select(book);
%>
<h1>图书列表</h1>
<a href="javascript: window.history.go(-1)">返回上一级</a>
<table align="center" cellpadding="10" cellspacing="10"> <tr bgcolor="green">
<td>编号</td>
<td>书名</td>
<td>价格</td>
<td>作者</td>
<td>封皮</td>
<td>出版社</td>
</tr>
<%-- <%
for(Book b:list){
%> --%>
<%
String bg="";
for(int i=0;i<list.size();i++){
Book b=list.get(i);
if(i%2==0)
bg="pink";
else
bg="yellow";
%>
<tr bgcolor="<%=bg%>">
<td><%=b.getBookid() %></td>
<td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td>
<td><%=b.getPrice() %></td>
<td><%=b.getAuthor() %></td>
<td><%=b.getPic() %></td>
<td><%=b.getPublish() %></td>
</tr>
<%
}
%> </table>
</body>
</html>
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.bie.po.Book" %>
<%@ page import="com.bie.service.BookService" %>
<%@ page import="com.bie.service.impl.BookServiceImpl" %>
<%
//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>书籍详细信息的页面</title>
</head>
<body>
<%
Book book=new Book();
String sid=request.getParameter("bookid");
Integer id=Integer.parseInt(sid);
BookService service=new BookServiceImpl();
book.setBookid(id);
Book books=service.getBook(book); session.setAttribute("book", books);
response.sendRedirect("detail.jsp");
%>
</body>
</html>
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.bie.po.Book" %>
<%@ page import="com.bie.service.BookService" %>
<%@ page import="com.bie.service.impl.BookServiceImpl" %> <%@ include file="head.jsp" %>
<%
//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<base href="<%=basePath %>" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>图书详细信息页面</title> <style type="text/css">
h1{text-align:center;}
a{font-size:24px;text-decoration:none;}
a:hover{text-decoration:underline;font-size:28px;}
</style>
</head>
<body>
<h1>图书详细信息的页面</h1>
<a href="javascript: window.history.go(-1)">返回上一级</a>
<%
Book book=(Book)session.getAttribute("book");
%>
<table align="center" cellpadding="20" cellspacing="20">
<tr>
<td>图书编号</td>
<td>图书名称</td>
<td>图书价格</td>
<td>图书作者</td>
<td>图书封皮</td>
<td>图书出版社</td>
</tr>
<tr>
<td><%=book.getBookid() %></td>
<td><%=book.getBookname() %></td>
<td><%=book.getPrice() %></td>
<td><%=book.getAuthor() %></td>
<td><img src="data:images/<%=book.getPic() %>"></td>
<td><%=book.getPublish() %></td>
</tr>
<tr>
<td colspan="3"></td>
<td></td>
<td colspan="2"></td>
</tr>
</table>
<div style="text-align:center;font-size:36px;">
<a href="doCard.jsp">添加到购物车</a>
<a href="book.jsp">图书列表</a>
</div>
</body>
</html>

效果如下所示:

简易图书管理系统(主要是jsp的练习)


12:页面最上面显示欢迎用户的功能和安全退出的功能logout.jsp和head.jsp

 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<%
session.invalidate();
response.sendRedirect("login.jsp");
%>
</body>
</html>
 <%@page import="com.bie.po.User"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<style type="text/css">
#head{background-color:#eee;height:60px;}
a{font-size: 36px;}
</style>
</head>
<body>
<%
User user=(User)session.getAttribute("user");
if(user==null){
response.sendRedirect("login.jsp");
}else{
%> <div id="head">
<table width=100%>
<tr>
<td>欢迎您 : <%=user.getName() %></td>
<td align="right">
<a href="cart.jsp">我的购物车</a>
<a href="logout.jsp">安全退出</a>
</td>
</tr>
</table>
<%} %>
</div>
</body>
</html>

效果如下所示:

简易图书管理系统(主要是jsp的练习)


13:购物车功能cart.jsp和添加到购物车doCard.jsp的实现

 <%@page import="java.util.Set"%>
<%@page import="java.util.Map"%>
<%@page import="com.bie.po.CardItem"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!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>
<style type="text/css">
tr,td{text-align:center;background-color:#eee;} </style>
</head>
<body>
<table width="100%" align="center">
<tr>
<th>书本编号</th>
<th>书本名称</th>
<th>书本单价</th>
<th>书本数量</th>
<th>书本小计</th>
</tr>
<% Map<Integer,CardItem> cart=(Map<Integer,CardItem>)session.getAttribute("cart"); //Set<Map.Entry<Integer,CardItem>> entrys=cart.entrySet();
//if(entrys==null || entrys.isEmpty()){
//response.sendRedirect("book.jsp");
//}
double count=0;//总价格
//for(Map.Entry<Integer,CardItem> entry : entrys){
for(Map.Entry<Integer,CardItem> entry : cart.entrySet()){ //小计
double price=entry.getValue().getNumber() * entry.getValue().getBook().getPrice();
//总价格
count=count+price;
%>
<tr>
<td><%=entry.getKey() %></td>
<td><%=entry.getValue().getBook().getBookname() %></td>
<td><%=entry.getValue().getBook().getPrice()%></td>
<td><%=entry.getValue().getNumber() %></td>
<td><%=price%></td>
</tr>
<%} %>
<tr>
<td colspan="4" align="right">价格总计</td>
<td><%=count %></td>
</tr>
</table>
<div style="text-align:right;font-size:36px;margin-top:20px;">
<a href="book.jsp">继续购买图书</a>
<a href="login.jsp">登陆页面</a>
</div>
</body>
</html>
 <%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.bie.po.Book" %>
<%@page import="java.util.HashMap"%>
<%@page import="com.bie.po.CardItem"%>
<%@page import="java.util.Map"%> <!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> <%
//购物车功能
//1:我购买的是哪一本书籍,将将要购买的书本先放到session域中
Book book=(Book)session.getAttribute("book"); //2:如何把该书籍存放到购物车中???
//2.1:先判断是否有购物车,如果没有购物车,那么创建购物车,如果有购物车,则直接使用购物车
//2.2:购物车使用什么数据类型?
//数组(数组是固定大小的,所以不适合)
//List集合(list集合是可以存放相同的对象,所以不适合)
//Set集合,Map集合(使用Map集合是因为Map集合存储速度比较快) key:存放商品编号;value:存放购物车项; //先将购物车从session中拿出来,然后判断是否存在,不存在就创建。
Map<Integer,CardItem> cart=(Map<Integer,CardItem>)session.getAttribute("cart");
//如果没有购物车,只有第一次访问,才会操作
if(cart==null){
//就new一个购物车
cart=new HashMap<Integer,CardItem>();
} //把书籍存放到购物车
//第二次判断,判断购物车中是否有该书籍
//从购物车中,获取该书籍,如果为空,表示购物车中没有该书籍
CardItem item=cart.get(book.getBookid());
if(item==null){//购物车中不存在这本书,创建,数量默认为1
item=new CardItem();
item.setBook(book);
item.setNumber(1);
}else{//购物车中,存在该书籍,直接把数量加1
item.setNumber(item.getNumber()+1);
} //把购物车项存放到购物车
cart.put(book.getBookid(), item); //把购物车存放到session
session.setAttribute("cart", cart); response.sendRedirect("book.jsp");
%> </body>
</html>

效果如下所示:

简易图书管理系统(主要是jsp的练习)


基本的功能都已经实现了,权当练习的小项目的,欢迎交流