简易图书管理系统(主要是jsp的练习)
1:首先设计用户表和图书表,设计的字段和类型如下图所示
1.1:用户表user
1.2:图书表book
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:现在展示登陆之后的页面
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>账 号:</td>
- <td>
- <input type="text" name="name" id="name"/>
- <div id="nameError" style="display:inline;color:red;"></div>
- </td>
- </tr>
- <tr>
- <td>密 码:</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>
效果如下所示:
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>
效果如下所示:
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>
效果如下所示:
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>
效果如下所示:
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的练习)的更多相关文章
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(3) - 使用Conductor切换页面
前两章中, 我们已经实现了这个图书管理系统的登录窗口, 并实施了完善的单元测试. 该是时候回过头来关注我们的主窗口了. 一个功能丰富的系统一般会有多个页面, 我们图书管理系统虽然是"简易&q ...
- C语言: 简易图书管理系统
这只是一个简易的图书管理系统,虽然它有千余行代码,不过终究是个简单基本的东西. 在Linux系统下,用Vim编写,如要在Windows上运行则需要一些改动,主要是一些调用系统函数的改动.如Window ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(4) - 图书列表界面
在前三章中我们完成了登录窗口, 并掌握了使用Conductor来切换窗口, 但这些其实都是在为我们的系统打基础. 而本章中我们就要开始开发系统的核心功能, 即图书管理功能了. 通过本章, 我们会接触到 ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(1)
.NET Core 3.0已经发布了,除了一大堆令人激动的功能以外,也增加了对WPF的正式支持, 那么WPF在.NET Core 3.0下的开发体验如何呢? 本文利用了Stylet框架开发.NET C ...
- 【WPF on .NET Core 3.0】 Stylet演示项目 - 简易图书管理系统(2) - 单元测试
上一章中我们完成了一个简单的登录功能, 这一章主要演示如何对Stylet工程中的ViewModel进行单元测试. 回忆一下我们的登录逻辑,主要有以下4点: 当"用户名"或" ...
- 基于jsp+servlet图书管理系统之后台万能模板
前奏: 刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识.于是静下心来钻研 ...
- 基于jsp+servlet图书管理系统之后台用户信息查询操作
上一篇的博客写的是插入操作,且附有源码和数据库,这篇博客写的是查询操作,附有从头至尾写的代码(详细的注释)和数据库! 此次查询操作的源码和数据库:http://download.csdn.net/de ...
- 基于jsp+servlet图书管理系统之后台用户信息修改操作
上一篇的博客写的是查询操作,且附有源码和数据库,这篇博客写的是修改操作,附有从头至尾写的代码(详细的注释)和数据库! 此次修改操作的源码和数据库:http://download.csdn.net/de ...
- 基于jsp+servlet图书管理系统之后台用户信息删除操作
上一篇的博客写的是修改操作,且附有源码和数据库,这篇博客写的是删除操作,附有从头至尾写的代码(详细的注释)和数据库! 此次删除操作的源码和数据库:http://download.csdn.net/de ...
随机推荐
- 史上最全 40 道 Dubbo 面试题及答案
https://blog.csdn.net/zl1zl2zl3/article/details/83721147
- Python学习笔记9-多线程和多进程
一.线程&进程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程, ...
- webuploader
https://www.cnblogs.com/study-fanzeng/p/8930939.html http://fex.baidu.com/webuploader/doc/index.html ...
- VS Sln图标空白修复办法
环境:Win10,VS2017,曾经安装并卸载过VS2015之前安装了两个版本的VisualStudio,卸载一个后,就出现了图标空白问题,重新设置默认打开程序也没有作用,经摸索解决办法如下.(1)在 ...
- MyBatis向数据库中批量插入数据
Foreach标签 foreach: collection:指定要遍历的集合; 表示传入过来的参数的数据类型.该参数为必选.要做 foreach 的对象,作为入参时,List 对象默认用 list 代 ...
- wpc 双工
在控制台部署wcf双工 这个可以被silverlight 使用 <?xml version="1.0" encoding="utf-8" ?> &l ...
- 数据库 之 E-R设计感想
1.实体与实体之间的关系,在许多情况下,可以将其实体化为实体(弱实体),例如:员工租赁宿舍,可以将租赁弱实体化为实体(具有唯一主键ID) 2.一些具有特征的关系可以(弱)实体化为实体 3.实体里面可以 ...
- REUSE_ALV_GRID_DISPLAY详解
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING I_INTERFACE_CHECK = ' ' "接口一致性检查 * I_BYPASSING ...
- luogu P4082 [USACO17DEC]Push a Box
传送门 一个人推箱子,和之前的华容道中的棋子移动有异曲同工之妙,因为每次可以让人走到箱子的其他方向上,或者推一下箱子 所以状态可以设成\(f_{i,j,k}\),即箱子在\((i,j)\),人在\(k ...
- android 常见分辨率与DPI对照表
分辨率对应DPI ldpi QVGA (240×320) mdpi HVGA (320×480) hdpi WVGA (480×800),FWVGA (480×854) xhdpi 720P( ...