精华内容
下载资源
问答
  • jsp servlet写的图书管理系统.有关jsp和sql的连接,jsp动作元素,javaBean的使用等等
  • jsp servlet 编写的图书管理系统源代码,可直接运行,内有完整源码和模块说明!
  • jsp+servlet 图书管理系统

    热门讨论 2012-12-04 00:05:08
    jsp+servlet 图书管理系统 实现增删改查
  • 主要技术:Jsp+MySQL+Servlet 开发工具:Eclipse 数据库表:5张 项目介绍:通过2种角色使用。 管理员进行管理图书馆内的所有书籍,以及书籍的相关信息。并能够管理学生用户的个人信息,之后管理学生的借书、还书情况...
  • 基于java的JSP+servlet图书管理系统源码,本系统使用Oracle数据库,代码清晰,思路明了,适合初学者参考
  • jsp+Servlet图书管理系统第一版的第一次更新:免费源码下载,停更,自行下载即可,谢谢:http://download.csdn.net/detail/biexiansheng/9877270 jsp+Servlet图书管理系统第一版的第二次更新:免费源码下载,停更...

    jsp+Servlet图书管理系统第一版的第一次更新:免费源码下载,停更,自行下载即可,谢谢http://download.csdn.net/detail/biexiansheng/9877270

     

    jsp+Servlet图书管理系统第一版的第二次更新:免费源码下载停更,自行下载即可,谢谢http://download.csdn.net/download/biexiansheng/10164299

     

    2017/12/28,jsp+servlet的第二版的图书管理系统更新1.0.0版本+2.0.0.版本(持续更新中):收费版,支持定制,修改到直到你验收为止,上面第一版不再更新,谢谢,更多功能请联系qq1748741328。

     

    2018-12-28,jsp+servlet的第三版的图书管理系统更新。免费源码下载停更,自行下载即可,谢谢:https://download.csdn.net/download/biexiansheng/10882360

     

    2018-12-28,javase的银行管理系统更新。免费源码下载停更,自行下载即可,谢谢:https://download.csdn.net/download/biexiansheng/10882370。(基于javase和mysql实现的,不是可视化的,是基于eclipse控制台进行交互的银行管理系统)。

    ===============================================================

    免费提供源码,有偿提供服务。谢谢。<支持其他系统定制,欢迎骚扰>

    qq:1748741328。

    ===============================================================

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

      1.1:用户表user

     1.2:图书表book

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

     1 package com.bie.po;
     2 
     3 import java.io.Serializable;
     4 
     5 /** 
     6 * @author BieHongLi 
     7 * @version 创建时间:2017年2月21日 上午9:59:03 
     8 * 用户的实体类
     9 */
    10 public class User implements Serializable{
    11 
    12     //增加序列号
    13     private static final long serialVersionUID = 1L;
    14     private Integer id;
    15     private String name;
    16     private String password;
    17     private String email;
    18     private String phone;
    19     public Integer getId() {
    20         return id;
    21     }
    22     public void setId(Integer id) {
    23         this.id = id;
    24     }
    25     public String getName() {
    26         return name;
    27     }
    28     public void setName(String name) {
    29         this.name = name;
    30     }
    31     public String getPassword() {
    32         return password;
    33     }
    34     public void setPassword(String password) {
    35         this.password = password;
    36     }
    37     public String getEmail() {
    38         return email;
    39     }
    40     public void setEmail(String email) {
    41         this.email = email;
    42     }
    43     public String getPhone() {
    44         return phone;
    45     }
    46     public void setPhone(String phone) {
    47         this.phone = phone;
    48     }
    49     
    50     //重写toString 方法
    51     @Override
    52     public String toString() {
    53         return "User [id=" + id + ", name=" + name + ", password=" + password + ", email=" + email + ", phone=" + phone
    54                 + "]";
    55     }
    56     
    57     
    58 }

    View Code

     1 package com.bie.po;
     2 
     3 import java.io.Serializable;
     4 
     5 /** 
     6 * @author BieHongLi 
     7 * @version 创建时间:2017年2月23日 上午10:19:08 
     8 * 图书的实体类
     9 */
    10 public class Book implements Serializable{
    11 
    12     
    13     private static final long serialVersionUID = 1L;
    14     private Integer bookid;
    15     private String bookname;
    16     private Double price;
    17     private String author;
    18     private String pic;
    19     private String publish;
    20     public Integer getBookid() {
    21         return bookid;
    22     }
    23     public void setBookid(Integer bookid) {
    24         this.bookid = bookid;
    25     }
    26     public String getBookname() {
    27         return bookname;
    28     }
    29     public void setBookname(String bookname) {
    30         this.bookname = bookname;
    31     }
    32     public Double getPrice() {
    33         return price;
    34     }
    35     public void setPrice(Double price) {
    36         this.price = price;
    37     }
    38     public String getAuthor() {
    39         return author;
    40     }
    41     public void setAuthor(String author) {
    42         this.author = author;
    43     }
    44     public String getPic() {
    45         return pic;
    46     }
    47     public void setPic(String pic) {
    48         this.pic = pic;
    49     }
    50     public String getPublish() {
    51         return publish;
    52     }
    53     public void setPublish(String publish) {
    54         this.publish = publish;
    55     }
    56     //重写toString()方法
    57     @Override
    58     public String toString() {
    59         return "Book [bookid=" + bookid + ", bookname=" + bookname + ", price=" + price + ", author=" + author
    60                 + ", pic=" + pic + ", publish=" + publish + "]";
    61     }
    62      
    63      
    64 }
    package com.bie.po;
    
    /**
     * @author BieHongLi
     * @version 创建时间:2017年2月25日 下午9:28:34 
     * 购物车的实体类
     */
    public class CardItem {
    
    	private Book book;//书本的实体类
    	private int number;//数量
    
    	public Book getBook() {
    		return book;
    	}
    
    	public void setBook(Book book) {
    		this.book = book;
    	}
    
    	public int getNumber() {
    		return number;
    	}
    
    	public void setNumber(int number) {
    		this.number = number;
    	}
    
    }
    


    View Code

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

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %>
    10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    11 <html>
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    15 <title>用户登陆页面</title>
    16 <style type="text/css">
    17 h1{text-align:left;}
    18 h4{text-align:left;color:red;}
    19 body{background:url(images/1.png)}
    20 a{text-decoration:none;font-size:20px;color:black;}
    21 a:hover{text-decoration:underline;font-size:24px;color:red;}    
    22 </style>
    23 
    24 </head>
    25 <body>
    26 <form action="info.jsp" method="post">
    27     <h1>用户登陆页面</h1>
    28     <h4>装饰中......</h4>    
    29     <hr/>
    30     <table align="left">
    31         <tr>
    32             <td>账号:</td>
    33             <td><input type="text" name="name" id="name"></td>
    34         </tr>
    35         <tr>
    36             <td>密码:</td>
    37             <td><input type="password" name="password" id="password"></td>
    38             <td><a href="searchPassword.jsp">找回密码</a></td>
    39         </tr>
    40         <tr>
    41             <td colspan="1">
    42             </td>
    43             <td>
    44                 <input type="submit" value="登陆"/>
    45                 <input type="reset" value="重置"/>
    46                 <a href="register.jsp" target="_blank">注册</a>
    47             </td>
    48         </tr>
    49     </table>
    50 </form>
    51 </body>
    52 </html>

    郁闷,当初这个本来是练习,练手的,就少写了一个info.jsp,无数个加我要info.jsp,要了就把我拉黑,在下佩服至极啊。

    贴一下吧,info.jsp。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" import="java.util.*,com.bie.po.*"%>
    <%@ page import="com.bie.dao.UserDao" %>
    <%@ page import="com.bie.dao.impl.UserDaoImpl" %>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    <%
    	//获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
    	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)}
    a{text-align:center;text-decoration:none;color:blue;}
    a:hover{text-decoration:underline;font-size:18px;}
    
    </style>
    </head>
    <body>
    <!-- <h1>用户登陆成功或者失败的提示页面</h1> -->
    <h4>装饰中......</h4>
    <hr/>
    <h1>现存图书列表</h1>
    <%
    //引入数据交互层
    	User user=new User();
    	UserDao dao=new UserDaoImpl();
    	String name=request.getParameter("name");
    	String password=request.getParameter("password");
    	
    	String isAdmin=request.getParameter("isAdmin");
    	
    	
    	user.setName(name);
    	user.setPassword(password);
    	user.setIsAdmin(isAdmin);
    	
    	User us=dao.login(user);
    	
    	
    	
    	session.setAttribute("user",user);
    	if(us != null){
    		//如果是管理员跳转到管理员页面
    		if(user.getIsAdmin().equals("1")){
    			//out.println(us.getIsAdmin());
    			response.sendRedirect("admin.jsp");
    		}else if(user.getIsAdmin().equals("0")){
    			
    			//如果是普通会员,跳转到图书列表的页面
    			response.sendRedirect("book.jsp");
    		}
    		
    	}else{
    		//response.sendRedirect("login.jsp");
    		
    		out.println("登录失败");
    	}
    %>
    
    
    </body>
    </html>

    View Code

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

      1 package com.bie.utils;
      2 
      3 import java.sql.Connection;
      4 import java.sql.DriverManager;
      5 import java.sql.PreparedStatement;
      6 import java.sql.ResultSet;
      7 import java.sql.SQLException;
      8 import java.util.ResourceBundle;
      9 
     10 
     11 /** 
     12 * @author BieHongLi 
     13 * @version 创建时间:2017年2月21日 上午10:01:14 
     14 * 数据交互层dao层
     15 */
     16 public class BaseDao {
     17 
     18     
     19     private static String driver="com.mysql.jdbc.Driver";
     20     private static String url="jdbc:mysql:///test";
     21     private static String user="root";
     22     private static String password="123456";
     23     
     24     /***
     25      * 连接数据库的方法
     26      * @return
     27      * @throws ClassNotFoundException
     28      * @throws SQLException
     29      */
     30     public static Connection getCon() throws ClassNotFoundException, SQLException{
     31         Class.forName(driver);//加载数据库驱动
     32         System.out.println("测试加载数据库成功");
     33         Connection con=DriverManager.getConnection(url, user, password);
     34         System.out.println("测试数据库链接成功");
     35         return con;
     36     }
     37     
     38     /***
     39      * 关闭数据库的方法
     40      * @param con
     41      * @param ps
     42      * @param rs
     43      */
     44     public static void close(Connection con,PreparedStatement ps,ResultSet rs){
     45         if(rs!=null){//关闭资源,避免出现异常
     46             try {
     47                 rs.close();
     48             } catch (SQLException e) {
     49                 // TODO Auto-generated catch block
     50                 e.printStackTrace();
     51             }
     52         }
     53         if(ps!=null){
     54             try {
     55                 ps.close();
     56             } catch (SQLException e) {
     57                 // TODO Auto-generated catch block
     58                 e.printStackTrace();
     59             }
     60         }
     61         if(con!=null){
     62             try {
     63                 con.close();
     64             } catch (SQLException e) {
     65                 // TODO Auto-generated catch block
     66                 e.printStackTrace();
     67             }
     68         }
     69     }
     70     
     71     /***
     72      * 同意增删改的方法
     73      * @param sql
     74      * @param arr
     75      * @return
     76      */
     77     public static boolean addUpdateDelete(String sql,Object[] arr){
     78         Connection con=null;
     79         PreparedStatement ps=null;
     80         try {
     81             con=BaseDao.getCon();//第一步 :连接数据库的操作
     82             ps=con.prepareStatement(sql);//第二步:预编译
     83             //第三步:设置值
     84             if(arr!=null && arr.length!=0){
     85                 for(int i=0;i<arr.length;i++){
     86                     ps.setObject(i+1, arr[i]);
     87                 }
     88             }
     89             int count=ps.executeUpdate();//第四步:执行sql语句
     90             if(count>0){
     91                 return true;
     92             }else{
     93                 return false;
     94             }
     95         } catch (ClassNotFoundException e) {
     96             // TODO Auto-generated catch block
     97             e.printStackTrace();
     98         } catch (SQLException e) {
     99             // TODO Auto-generated catch block
    100             e.printStackTrace();
    101         }
    102         return false;
    103     }
    104     
    105     /*public static void main(String[] args) {
    106         try {
    107             BaseDao.getCon();
    108             System.out.println("测试数据库链接成功");
    109         } catch (ClassNotFoundException e) {
    110             // TODO Auto-generated catch block
    111             e.printStackTrace();
    112         } catch (SQLException e) {
    113             // TODO Auto-generated catch block
    114             e.printStackTrace();
    115         }
    116     }*/
    117     
    118     
    119 }

    View Code

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

     1 package com.bie.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.bie.po.User;
     6 
     7 /** 
     8 * @author BieHongLi 
     9 * @version 创建时间:2017年2月21日 上午10:38:40 
    10 * 创建一个接口用于声明用户登陆注册的方法
    11 */
    12 public interface UserDao {
    13 
    14     /***
    15      * 用户登陆的方法声明
    16      * @param user
    17      * @return
    18      */
    19     public User login(User user);
    20     
    21     /***
    22      * 用户注册的方法声明
    23      * @param user
    24      * @return
    25      */
    26     public boolean register(User user);
    27     
    28     /***
    29      * 查询用户的信息
    30      * @param sql
    31      * @param arr
    32      * @return
    33      */
    34     public List<User> selectUser(String sql,Object[] arr);
    35 }

    View Code

      1 package com.bie.dao.impl;
      2 
      3 import java.sql.Connection;
      4 import java.sql.PreparedStatement;
      5 import java.sql.ResultSet;
      6 import java.sql.SQLException;
      7 import java.util.ArrayList;
      8 import java.util.List;
      9 
     10 import com.bie.dao.UserDao;
     11 import com.bie.po.Book;
     12 import com.bie.po.User;
     13 import com.bie.utils.BaseDao;
     14 
     15 /** 
     16 * @author BieHongLi 
     17 * @version 创建时间:2017年2月21日 上午10:38:56 
     18 * 
     19 */
     20 public class UserDaoImpl implements UserDao{
     21 
     22     @Override
     23     public User login(User user) {
     24         Connection con=null;
     25         PreparedStatement ps=null;
     26         ResultSet rs=null;
     27         try {
     28             con=BaseDao.getCon();//1:获取数据库的连接
     29             //2:书写sql语句
     30             String sql="select * from user where name=? and password=? ";
     31             ps=con.prepareStatement(sql);//3:预编译
     32             //4:设置值
     33             ps.setString(1, user.getName());
     34             ps.setString(2, user.getPassword());
     35             rs=ps.executeQuery();//5:执行sql语句
     36             User users=null;
     37             if(rs.next()){
     38                 users=new User();
     39                 //从数据库中获取值设置到实体类的setter方法中
     40                 users.setId(rs.getInt("id"));
     41                 users.setName(rs.getString("name"));
     42                 users.setPassword(rs.getString("password"));
     43                 users.setEmail(rs.getString("email"));
     44                 users.setPhone(rs.getString("phone"));
     45                 
     46                 return user;
     47             }else{
     48                 return null;
     49             }
     50             
     51         } catch (ClassNotFoundException e) {
     52             // TODO Auto-generated catch block
     53             e.printStackTrace();
     54         } catch (SQLException e) {
     55             // TODO Auto-generated catch block
     56             e.printStackTrace();
     57         }finally{
     58             //关闭资源,避免出现异常
     59             BaseDao.close(con, ps, rs);
     60         }
     61         return null;
     62     }
     63 
     64     /***
     65      * 插入的方法,即注册
     66      */
     67     @Override
     68     public boolean register(User user) {
     69         String sql="insert into user values(0,?,?,?,?) ";
     70         List<Object> list=new ArrayList<Object>();
     71         list.add(user.getName());
     72         list.add(user.getPassword());
     73         list.add(user.getEmail());
     74         list.add(user.getPhone());
     75         
     76         boolean flag=BaseDao.addUpdateDelete(sql,list.toArray());
     77         if(flag){
     78             return true;
     79         }else{
     80             return false;
     81         }
     82     }
     83 
     84     @Override
     85     public List<User> selectUser(String sql, Object[] arr) {
     86         Connection con=null;
     87         PreparedStatement ps=null;
     88         ResultSet rs=null;
     89         try {
     90             con=BaseDao.getCon();//第一步连接数据库
     91             ps=con.prepareStatement(sql);//第二步:预编译
     92             if(arr!=null){
     93                 for(int i=0;i<arr.length;i++){
     94                     ps.setObject(i+1, arr[i]);
     95                 }
     96             }
     97             //第四步执行sql
     98             rs=ps.executeQuery();
     99             List<User> list=new ArrayList<User>();
    100             while(rs.next()){
    101                 User user=new User();
    102                 user.setId(rs.getInt("id"));
    103                 user.setName(rs.getString("name"));
    104                 user.setPassword(rs.getString("password"));
    105                 user.setEmail(rs.getString("email"));
    106                 user.setPhone(rs.getString("phone"));
    107                 //System.out.println(user);//测试数据
    108                 list.add(user);
    109             }
    110             return list;
    111         } catch (ClassNotFoundException e) {
    112             // TODO Auto-generated catch block
    113             e.printStackTrace();
    114         } catch (SQLException e) {
    115             // TODO Auto-generated catch block
    116             e.printStackTrace();
    117         }finally{
    118             //关闭资源,避免出现异常
    119             BaseDao.close(con, ps, rs);
    120         }
    121         
    122         return null;
    123     }
    124 
    125     
    126 }

    View Code

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

     1 package com.bie.service;
     2 
     3 import java.util.List;
     4 
     5 import com.bie.po.User;
     6 
     7 /** 
     8 * @author BieHongLi 
     9 * @version 创建时间:2017年2月23日 下午1:58:59 
    10 * 
    11 */
    12 public interface UserService {
    13 
    14     /***
    15      * 用户查询的信息
    16      * @param user
    17      * @return
    18      */
    19     public List<User> selectUser(User user);
    20 }

    View Code

     1 package com.bie.service.impl;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import com.bie.dao.UserDao;
     7 import com.bie.dao.impl.UserDaoImpl;
     8 import com.bie.po.User;
     9 import com.bie.service.UserService;
    10 
    11 /** 
    12 * @author BieHongLi 
    13 * @version 创建时间:2017年2月23日 下午1:59:36 
    14 * 
    15 */
    16 public class UserServiceImpl implements UserService{
    17 
    18     private UserDao dao=new UserDaoImpl();
    19     
    20     @Override
    21     public List<User> selectUser(User user) {
    22         //sql语句
    23         //String sql="select * from user ";
    24         StringBuilder sql=new StringBuilder("select * from user where 1=1 ");
    25         List<Object> list=new ArrayList<Object>();
    26         if(user!=null){
    27             //按照姓名查询
    28             if(user.getName()!=null && !user.getName().equals("")){
    29                 sql.append(" and name = ? ");
    30                 list.add(user.getName());
    31             }
    32             //按照email查询
    33             if(user.getEmail()!=null && !user.getEmail().equals("")){
    34                 sql.append(" and email = ? ");
    35                 list.add(user.getEmail());
    36             }
    37             
    38         }
    39         return dao.selectUser(sql.toString(), list.toArray());
    40     }
    41 
    42     
    43 }

    View Code

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

     1 package com.bie.dao;
     2 
     3 import java.util.List;
     4 
     5 import com.bie.po.Book;
     6 
     7 /** 
     8 * @author BieHongLi 
     9 * @version 创建时间:2017年2月23日 上午10:22:45 
    10 * 图书信息的接口
    11 */
    12 public interface BookDao {
    13     
    14     /***
    15      * 图书信息查询的方法
    16      * @param sql
    17      * @param arr
    18      * @return
    19      */
    20     public List<Book> select(String sql,Object[] arr);
    21     
    22     /***
    23      * 获取图书的编号进行查询
    24      * @param book
    25      * @return
    26      */
    27     public Book getBook(Integer id);
    28 }

    View Code

      1 package com.bie.dao.impl;
      2 
      3 import java.sql.Connection;
      4 import java.sql.PreparedStatement;
      5 import java.sql.ResultSet;
      6 import java.sql.SQLException;
      7 import java.util.ArrayList;
      8 import java.util.List;
      9 
     10 import com.bie.dao.BookDao;
     11 import com.bie.po.Book;
     12 import com.bie.utils.BaseDao;
     13 
     14 /** 
     15 * @author BieHongLi 
     16 * @version 创建时间:2017年2月23日 上午10:24:02 
     17 * 
     18 */
     19 public class BookDaoImpl implements BookDao{
     20 
     21     @Override
     22     public List<Book> select(String sql, Object[] arr) {
     23         Connection con=null;
     24         PreparedStatement ps=null;
     25         ResultSet rs=null;
     26         try {
     27             con=BaseDao.getCon();//第一步连接数据库
     28             ps=con.prepareStatement(sql);//第二步:预编译
     29             if(arr!=null){
     30                 for(int i=0;i<arr.length;i++){
     31                     ps.setObject(i+1, arr[i]);
     32                 }
     33             }
     34             //第四步执行sql
     35             rs=ps.executeQuery();
     36             List<Book> list=new ArrayList<Book>();
     37             while(rs.next()){
     38                 Book book=new Book();
     39                 book.setBookid(rs.getInt("bookid"));
     40                 book.setBookname(rs.getString("bookname"));
     41                 book.setPrice(rs.getDouble("price"));
     42                 book.setAuthor(rs.getString("author"));
     43                 book.setPic(rs.getString("pic"));
     44                 book.setPublish(rs.getString("publish"));
     45                 
     46                 list.add(book);
     47             }
     48             return list;
     49         } catch (ClassNotFoundException e) {
     50             // TODO Auto-generated catch block
     51             e.printStackTrace();
     52         } catch (SQLException e) {
     53             // TODO Auto-generated catch block
     54             e.printStackTrace();
     55         }finally{
     56             //关闭资源,避免出现异常
     57             BaseDao.close(con, ps, rs);
     58         }
     59         
     60         return null;
     61     }
     62 
     63     @Override
     64     public Book getBook(Integer id) {
     65         Connection con=null;
     66         PreparedStatement ps=null;
     67         ResultSet rs=null;
     68         try {
     69             con=BaseDao.getCon();//第一步连接数据库
     70             String sql="select * from book where bookid = ? ";
     71             ps=con.prepareStatement(sql);//第二步:预编译
     72             ps.setInt(1, id);
     73             
     74             //第四步执行sql
     75             rs=ps.executeQuery();
     76             while(rs.next()){
     77                 Book books=new Book();
     78                 books.setBookid(rs.getInt("bookid"));
     79                 books.setBookname(rs.getString("bookname"));
     80                 books.setPrice(rs.getDouble("price"));
     81                 books.setAuthor(rs.getString("author"));
     82                 books.setPic(rs.getString("pic"));
     83                 books.setPublish(rs.getString("publish"));
     84                 
     85                 return books;
     86             }
     87         } catch (ClassNotFoundException e) {
     88             // TODO Auto-generated catch block
     89             e.printStackTrace();
     90         } catch (SQLException e) {
     91             // TODO Auto-generated catch block
     92             e.printStackTrace();
     93         }finally{
     94             //关闭资源,避免出现异常
     95             BaseDao.close(con, ps, rs);
     96         }
     97         
     98         return null;
     99     }
    100 
    101     
    102 }

    View Code

     1 package com.bie.service;
     2 
     3 import java.util.List;
     4 
     5 import com.bie.po.Book;
     6 
     7 /** 
     8 * @author BieHongLi 
     9 * @version 创建时间:2017年2月23日 上午10:56:42 
    10 * 
    11 */
    12 public interface BookService {
    13 
    14     /***
    15      * 图书信息查询的方法
    16      * @return
    17      */
    18     public List<Book> select(Book book);
    19     
    20     /***
    21      * 根据id进行查询
    22      * @param id
    23      * @return
    24      */
    25     public Book getBook(Book book);
    26 }

    View Code

     1 package com.bie.service.impl;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import com.bie.dao.BookDao;
     7 import com.bie.dao.impl.BookDaoImpl;
     8 import com.bie.po.Book;
     9 import com.bie.service.BookService;
    10 
    11 /** 
    12 * @author BieHongLi 
    13 * @version 创建时间:2017年2月23日 上午10:57:01 
    14 * 
    15 */
    16 public class BookServiceImpl implements BookService{
    17 
    18     private BookDao dao=new BookDaoImpl();
    19     
    20     public List<Book> select(Book book){
    21         //String sql="select * from book ";
    22         StringBuilder sql=new StringBuilder("select * from book where 1=1 ");
    23         //sql语句
    24         List<Object> list=new ArrayList<Object>();
    25         if(book!=null){
    26             
    27             if(book.getBookid()!=null && book.getBookid()!=0){
    28                 sql.append(" and bookid=? ");
    29                 list.add(book.getBookid());
    30             }
    31             /*list.add(book.getBookname());
    32             list.add(book.getPrice());
    33             list.add(book.getAuthor());
    34             list.add(book.getPic());
    35             list.add(book.getPublish());*/
    36         }
    37         
    38         return dao.select(sql.toString(), list.toArray());
    39     }
    40 
    41     @Override
    42     public Book getBook(Book book) {
    43         if(book.getBookid()!=null && book.getBookid()!=0){
    44             return dao.getBook(book.getBookid());
    45         }
    46         return null;
    47     }
    48     
    49 }

    View Code

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


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

      1 <%@ page language="java" contentType="text/html; charset=UTF-8"
      2     pageEncoding="UTF-8"%>
      3 <%
      4     //获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
      5     String path = request.getContextPath();
      6     String basePath = request.getScheme() + "://"
      7                 + request.getServerName() + ":" + request.getServerPort()
      8                 + path + "/";
      9 %> 
     10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     11 <html>
     12 <head>
     13 <base href="<%=basePath %>" />
     14 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     15 <title>注册的页面</title>
     16 <style type="text/css">
     17 h1{text-align:center;}
     18 h4{text-align:right;color:red;}
     19 body{background:url(images/2.png)}
     20 </style>
     21 
     22 <script type="text/javascript" src="js/jquery.min.js"></script>
     23 <script type="text/javascript">
     24     $(document).ready(function(){
     25         //alert("测试jQuery是否能用");
     26         $("#form1").submit(function(){
     27             var name=$("#name").val();//获取提交的值
     28             if(name.length==0){//进行判断,如果获取的值为0那么提示账号不能为空
     29                 //alert("aa");//测试使用
     30                 $("#nameError").html("账号不能为空");
     31                 return false;
     32             }
     33             
     34             //密码进行验证不能为空
     35             var password=$("#password").val();//获取提交的密码的值
     36             if(password.length==0){
     37                 $("#passwordError").html("密码不能为空");
     38                 return false;
     39             }
     40             
     41             //确认密码进行验证
     42             var relpassword=$("#relpassword").val();//获取提交的确认密码的值
     43             if(relpassword.length==0){
     44                 $("#relpasswordError").html("确认密码不能为空哦");
     45                 return false;
     46             }
     47             
     48             if(password!=relpassword){
     49                 $("#relpasswordError").html("确认密码输入不正确,请重新输入");
     50                 return false;
     51             }
     52         });
     53     
     54     });
     55 </script>
     56 </head>
     57 <body>
     58 <form action="doregister.jsp" method="post" id="form1">
     59     <h1>用户注册页面</h1>
     60     <h4>装饰中......</h4>    
     61     <hr/>
     62     <table align="center">
     63         <tr>
     64             <td>账&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;号:</td>
     65             <td>
     66                 <input type="text" name="name" id="name"/>
     67                 <div id="nameError" style="display:inline;color:red;"></div>
     68             </td>
     69         </tr>
     70         <tr>
     71             <td>密&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;码:</td>
     72             <td>
     73                 <input type="password" name="password" id="password">
     74                 <div id="passwordError" style="display:inline;color:red;"></div>
     75             </td>
     76         </tr>
     77         <tr>
     78             <td>确认密码:</td>
     79             <td>
     80                 <input type="password" name="relpassword" id="relpassword">
     81                 <div id="relpasswordError" style="display:inline;color:red;"></div>
     82             </td>
     83         </tr>
     84         <tr>
     85             <td>电话号码:</td>
     86             <td><input type="text" name="phone" id="phone"></td>
     87         </tr>
     88         <tr>
     89             <td>电子邮件:</td>
     90             <td><input type="text" name="email" id="email"></td>
     91         </tr>
     92         <tr>
     93             <td colspan="1">
     94             </td>
     95             <td>
     96                 <input type="submit" value="注册"/>
     97                 <input type="reset" value="重置"/>
     98                 <a href="login.jsp" target="_blank">登陆</a>
     99             </td>
    100         </tr>
    101     </table>
    102 </form>
    103 </body>
    104 </html>

    View Code

     1 <%@page import="com.bie.dao.impl.UserDaoImpl"%>
     2 <%@page import="com.bie.dao.UserDao"%>
     3 <%@page import="com.bie.po.User"%>
     4 <%@ page language="java" contentType="text/html; charset=UTF-8"
     5     pageEncoding="UTF-8"%>
     6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     7 <html>
     8 <head>
     9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 <title>处理注册的页面</title>
    11 </head>
    12 <body>
    13 <%
    14     User user=new User();
    15     //获取login.jsp页面提交的账号和密码
    16     String name=request.getParameter("name");
    17     String password=request.getParameter("password");
    18     String email=request.getParameter("email");
    19     String phone=request.getParameter("phone");
    20     
    21     //获取register.jsp页面提交的账号和密码设置到实体类User中
    22     user.setName(name);
    23     user.setPassword(password);
    24     user.setEmail(email);
    25     user.setPhone(phone);
    26     
    27     //引入数据交互层
    28     UserDao dao=new UserDaoImpl();
    29     boolean flag=dao.register(user);
    30     
    31     if(flag){
    32         response.sendRedirect("login.jsp");
    33     }else{
    34         response.sendRedirect("register.jsp");
    35     }
    36 %>
    37 </body>
    38 </html>

    View Code

    效果如下所示:


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

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %> 
    10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    11 <html>
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    15 <title>找回密码</title>
    16 <style type="text/css">
    17 body{background:url(images/3.jpg)}
    18 </style>
    19 </head>
    20 <body>
    21 <h1>找回密码</h1>
    22 <hr/>
    23 <a href="javascript: window.history.go(-1)">返回上一级</a>
    24 <form action="dosearchPassword.jsp" method="post">
    25     <table>
    26         <tr>
    27             <td>请输入账号:</td>
    28             <td><input type="text" name="name"/></td>
    29         </tr>
    30         <tr>
    31             <td colspan="1"></td>
    32             <td>
    33                 <input type="submit" value="提交">
    34                 <input type="reset" value="重置">
    35             </td>
    36         </tr>
    37     </table>
    38 </form>
    39 
    40 </body>
    41 </html>

    View Code

     1 <%@page import="java.util.List"%>
     2 <%@page import="com.bie.service.impl.UserServiceImpl"%>
     3 <%@page import="com.bie.po.User"%>
     4 <%@ page language="java" contentType="text/html; charset=UTF-8"
     5     pageEncoding="UTF-8"%>
     6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     7 <html>
     8 <head>
     9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 <title>处理找回密码的页面</title>
    11 </head>
    12 <body>
    13 <%
    14     User user=new User();
    15     //获取login.jsp页面提交的账号和密码
    16     String name=request.getParameter("name");
    17     user.setName(name);
    18     
    19     UserServiceImpl service=new UserServiceImpl();
    20     List<User> list=service.selectUser(user);
    21     request.setAttribute("list", list);
    22     for(User u:list){
    23         request.setAttribute("user", u);
    24         out.print(u);
    25     }
    26     if(user!=null){
    27         //response.sendRedirect("search.jsp");//不传输数据的转发
    28         request.getRequestDispatcher("search.jsp").forward(request, response);
    29     }
    30     
    31 
    32 %>
    33 </body>
    34 </html>

    View Code

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %> 
    10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    11 <html>
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    15 <title>弹出信息</title>
    16 
    17 
    18 <script type="text/javascript">
    19     alert("您的密码是:${user.password}");
    20 </script>
    21 
    22 </head>
    23 <body style="background-color:pink;">
    24 <h1>您的密码是:${user.password}</h1>
    25 <a href="javascript: window.history.go(-1)">返回上一级</a>
    26 </body>
    27 </html>

    View Code

    效果如下所示:


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

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8" %>
     3 <%@ page import="java.util.List" %>
     4 <%@ page import="com.bie.po.Book" %>
     5 <%@ page import="com.bie.service.impl.BookServiceImpl" %>
     6   
     7 <%@ include file="head.jsp" %>  
     8 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     9 <html>
    10 <head>
    11 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    12 <title>图书处理页面</title>
    13 <style type="text/css">
    14 h1{text-align:center;}
    15 </style>
    16 </head>
    17 <body>
    18 <%
    19     Book book=new Book();
    20     BookServiceImpl service=new BookServiceImpl();
    21     List<Book> list=service.select(book);
    22 %>
    23 <h1>图书列表</h1>
    24 <a href="javascript: window.history.go(-1)">返回上一级</a>
    25 <table align="center" cellpadding="10" cellspacing="10">
    26     
    27     <tr bgcolor="green">
    28         <td>编号</td>
    29         <td>书名</td>
    30         <td>价格</td>
    31         <td>作者</td>
    32         <td>封皮</td>
    33         <td>出版社</td>
    34     </tr>
    35         <%-- <%
    36             for(Book b:list){
    37         %> --%>
    38         <%
    39             String bg="";
    40             for(int i=0;i<list.size();i++){
    41                 Book b=list.get(i);
    42                 if(i%2==0)
    43                     bg="pink";
    44                 else
    45                     bg="yellow";
    46         %>
    47     <tr bgcolor="<%=bg%>">
    48             <td><%=b.getBookid() %></td>
    49             <td><a href="doInfo.jsp?bookid=<%=b.getBookid() %>"><%=b.getBookname() %></a></td>
    50             <td><%=b.getPrice() %></td>
    51             <td><%=b.getAuthor() %></td>
    52             <td><%=b.getPic() %></td>
    53             <td><%=b.getPublish() %></td>
    54     </tr>
    55         <%        
    56             }
    57         %>
    58         
    59 </table>
    60 </body>
    61 </html>

    View Code

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="com.bie.po.Book" %>
     4 <%@ page import="com.bie.service.BookService" %>
     5 <%@ page import="com.bie.service.impl.BookServiceImpl" %>
     6 <%
     7     //获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
     8     String path = request.getContextPath();
     9     String basePath = request.getScheme() + "://"
    10                 + request.getServerName() + ":" + request.getServerPort()
    11                 + path + "/";
    12 %>
    13 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    14 <html>
    15 <head>
    16 <base href="<%=basePath %>" />
    17 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    18 <title>书籍详细信息的页面</title>
    19 </head>
    20 <body>
    21 <%
    22     Book book=new Book();
    23     String sid=request.getParameter("bookid");
    24     Integer id=Integer.parseInt(sid);
    25     BookService service=new BookServiceImpl();
    26     book.setBookid(id);
    27     Book books=service.getBook(book);
    28     
    29     session.setAttribute("book", books);
    30     response.sendRedirect("detail.jsp");
    31 %>
    32 </body>
    33 </html>

    View Code

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="com.bie.po.Book" %>
     4 <%@ page import="com.bie.service.BookService" %>
     5 <%@ page import="com.bie.service.impl.BookServiceImpl" %>
     6 
     7 <%@ include file="head.jsp" %>
     8 <%
     9     //获取绝对路径路径 ,开发项目一定要使用绝对路径,不然肯定出错
    10     String path = request.getContextPath();
    11     String basePath = request.getScheme() + "://"
    12                 + request.getServerName() + ":" + request.getServerPort()
    13                 + path + "/";
    14 %> 
    15 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    16 <html>
    17 <head>
    18 <base href="<%=basePath %>" />
    19 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    20 <title>图书详细信息页面</title>
    21 
    22 <style type="text/css">
    23 h1{text-align:center;}
    24 a{font-size:24px;text-decoration:none;}
    25 a:hover{text-decoration:underline;font-size:28px;}
    26 </style>
    27 </head>
    28 <body>
    29 <h1>图书详细信息的页面</h1>
    30 <a href="javascript: window.history.go(-1)">返回上一级</a>
    31 <%
    32     Book book=(Book)session.getAttribute("book");
    33 %>
    34 <table align="center" cellpadding="20" cellspacing="20">
    35     <tr>
    36         <td>图书编号</td>
    37         <td>图书名称</td>
    38         <td>图书价格</td>
    39         <td>图书作者</td>
    40         <td>图书封皮</td>
    41         <td>图书出版社</td>
    42     </tr>
    43     <tr>
    44         <td><%=book.getBookid() %></td>
    45         <td><%=book.getBookname() %></td>
    46         <td><%=book.getPrice() %></td>
    47         <td><%=book.getAuthor() %></td>
    48         <td><img src="images/<%=book.getPic() %>"></td>
    49         <td><%=book.getPublish() %></td>
    50     </tr>
    51     <tr>
    52         <td colspan="3"></td>
    53         <td></td>
    54         <td colspan="2"></td>
    55     </tr>
    56 </table>
    57 <div style="text-align:center;font-size:36px;">
    58     <a href="doCard.jsp">添加到购物车</a>
    59     <a href="book.jsp">图书列表</a>
    60 </div>
    61 </body>
    62 </html>

    View Code

    效果如下所示:


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

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>退出登陆</title>
     8 </head>
     9 <body>
    10 <%
    11     session.invalidate();
    12     response.sendRedirect("login.jsp");
    13 %>
    14 </body>
    15 </html>

    View Code

     1 <%@page import="com.bie.po.User"%>
     2 <%@ page language="java" contentType="text/html; charset=UTF-8"
     3     pageEncoding="UTF-8"%>
     4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     5 <html>
     6 <head>
     7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     8 <title>头部信息</title>
     9 <style type="text/css">
    10 #head{background-color:#eee;height:60px;}
    11 a{font-size: 36px;}
    12 </style>
    13 </head>
    14 <body>
    15 <%
    16     User user=(User)session.getAttribute("user");
    17     if(user==null){
    18         response.sendRedirect("login.jsp");
    19     }else{
    20 %>
    21 
    22 <div id="head">
    23 <table width=100%>
    24     <tr>
    25         <td>欢迎您 : <%=user.getName() %></td>
    26         <td align="right">
    27             <a href="cart.jsp">我的购物车</a>
    28             <a href="logout.jsp">安全退出</a>
    29         </td>
    30     </tr>
    31 </table>
    32 <%} %>
    33 </div>
    34 </body>
    35 </html>

    View Code

    效果如下所示:


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

     1 <%@page import="java.util.Set"%>
     2 <%@page import="java.util.Map"%>
     3 <%@page import="com.bie.po.CardItem"%>
     4 <%@ page language="java" contentType="text/html; charset=UTF-8"
     5     pageEncoding="UTF-8"%>
     6 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     7 <html>
     8 <head>
     9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 <title>购物车</title>
    11 <style type="text/css">
    12 tr,td{text-align:center;background-color:#eee;}
    13 
    14 </style>
    15 </head>
    16 <body>
    17 <table width="100%" align="center">
    18     <tr>
    19         <th>书本编号</th>
    20         <th>书本名称</th>
    21         <th>书本单价</th>
    22         <th>书本数量</th>
    23         <th>书本小计</th>
    24     </tr>
    25     <%
    26         
    27         Map<Integer,CardItem> cart=(Map<Integer,CardItem>)session.getAttribute("cart");
    28         
    29         //Set<Map.Entry<Integer,CardItem>> entrys=cart.entrySet();
    30         //if(entrys==null || entrys.isEmpty()){
    31             //response.sendRedirect("book.jsp");
    32         //}
    33         double count=0;//总价格
    34         //for(Map.Entry<Integer,CardItem> entry : entrys){
    35         for(Map.Entry<Integer,CardItem> entry : cart.entrySet()){    
    36             
    37             //小计
    38             double price=entry.getValue().getNumber() * entry.getValue().getBook().getPrice();
    39             //总价格
    40             count=count+price;
    41     %>
    42     <tr>
    43         <td><%=entry.getKey() %></td>
    44         <td><%=entry.getValue().getBook().getBookname() %></td>
    45         <td><%=entry.getValue().getBook().getPrice()%></td>
    46         <td><%=entry.getValue().getNumber() %></td>
    47         <td><%=price%></td>
    48     </tr>
    49     <%} %>
    50     <tr>
    51         <td colspan="4" align="right">价格总计</td>
    52         <td><%=count %></td>
    53     </tr>
    54 </table>
    55 <div style="text-align:right;font-size:36px;margin-top:20px;">
    56     <a href="book.jsp">继续购买图书</a>
    57     <a href="login.jsp">登陆页面</a>
    58 </div>
    59 </body>
    60 </html>

    View Code

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%@ page import="com.bie.po.Book" %>
     4 <%@page import="java.util.HashMap"%>
     5 <%@page import="com.bie.po.CardItem"%>
     6 <%@page import="java.util.Map"%>
     7 
     8 
     9 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    10 <html>
    11 <head>
    12 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    13 <title>处理购物车</title>
    14 </head>
    15 <body>
    16 
    17 <%
    18     //购物车功能
    19     //1:我购买的是哪一本书籍,将将要购买的书本先放到session域中
    20     Book book=(Book)session.getAttribute("book");
    21 
    22     //2:如何把该书籍存放到购物车中???
    23     //2.1:先判断是否有购物车,如果没有购物车,那么创建购物车,如果有购物车,则直接使用购物车
    24     //2.2:购物车使用什么数据类型?
    25     //数组(数组是固定大小的,所以不适合)
    26     //List集合(list集合是可以存放相同的对象,所以不适合)
    27     //Set集合,Map集合(使用Map集合是因为Map集合存储速度比较快) key:存放商品编号;value:存放购物车项;
    28     
    29     //先将购物车从session中拿出来,然后判断是否存在,不存在就创建。
    30     Map<Integer,CardItem> cart=(Map<Integer,CardItem>)session.getAttribute("cart");
    31     //如果没有购物车,只有第一次访问,才会操作
    32     if(cart==null){
    33         //就new一个购物车
    34         cart=new HashMap<Integer,CardItem>();
    35     }
    36     
    37     //把书籍存放到购物车
    38     //第二次判断,判断购物车中是否有该书籍
    39     //从购物车中,获取该书籍,如果为空,表示购物车中没有该书籍
    40     CardItem item=cart.get(book.getBookid());
    41     if(item==null){//购物车中不存在这本书,创建,数量默认为1
    42         item=new CardItem();
    43         item.setBook(book);
    44         item.setNumber(1);
    45     }else{//购物车中,存在该书籍,直接把数量加1
    46         item.setNumber(item.getNumber()+1);
    47     }
    48     
    49     
    50     //把购物车项存放到购物车
    51     cart.put(book.getBookid(), item);
    52     
    53     //把购物车存放到session
    54     session.setAttribute("cart", cart);
    55     
    56     response.sendRedirect("book.jsp");
    57 %>
    58 
    59 
    60 </body>
    61 </html>

    View Code

    效果如下所示:


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

     

    展开全文
  • 本系统是基于Jspservlet技术的图书管理系统,实现了图书的增删改查,支持图书的模糊查询以及分页查询显示,数据库使用了mysql 8的版本。
  • jsp+servlet+javabean,功能全面
  • 系统主要采用了jspservlet、jdbc等技术,前端用了当下最流行的管理框架easyui,实现了普通用户注册登录、查询、查看图书图书分类、借阅图书、归还图书、查看图书借阅统计表等功能,管理员除了上述功能外还可以...
  • 之前上传的是基于jsp+servlet实现的图书管理系统后台的插入操作,这次上传的是查询操作,附有数据库,代码有详细的解释,当执行查询和插入操作之后会显示在页面上面
  • 基于servlet+jsp图书管理系统,包含数据sql和说明文档,基于idea开发,下载请配置开发环境,images有运行截图。readME有项目说明
  • 项目类型:JAVA WEB项目 用户类型:2个角色(管理员+学生) 主要技术:Jsp+MySQL+Servlet 开发工具:Eclipse 数据库表:5张 项目介绍:通过2种角色使用。...高校图书管理系统系统1.管理员端功能介绍1.1登录界面1.2

    Java课程设计(Jsp+Servlet+Mysql+Tomcat+Eclipse)
    项目类型:JAVA WEB项目
    用户类型:2个角色(管理员+学生)
    主要技术:Jsp+MySQL+Servlet
    开发工具:Eclipse
    数据库表:5张
    项目介绍:通过2种角色使用。
    管理员进行管理图书馆内的所有书籍,以及书籍的相关信息。并能够管理学生用户的个人信息,之后管理学生的借书、还书情况。
    学生则通过注册登录进行使用。主要进行在线借书和还书的工作。

    项目非开源
    项目来源:“那条学长”(V)(公)
    在这里插入图片描述

    回复java资料查看
    或者点击顶部
    查看专栏介绍查看
    其他分类专栏有一些自己原创的Java Web项目
    另一个是自己开发的图书管理系统【原创开发】
    Jsp+Servlet的新闻管理系统【原创开发】
    Jsp+Servlet的外卖配送系统/在线点餐系统

    1.管理员端功能介绍

    1.1登录界面

    在这里插入图片描述

    1.2藏书管理

    在这里插入图片描述

    1.3图书分类管理

    在这里插入图片描述
    在这里插入图片描述

    1.4借书归还管理

    在这里插入图片描述

    1.5学生管理

    在这里插入图片描述
    在这里插入图片描述

    1.6发布公告

    在这里插入图片描述

    1.7密码修改

    在这里插入图片描述

    2.学生端功能介绍

    2.1账号注册

    在这里插入图片描述

    2.2图书借阅

    在这里插入图片描述

    2.3图书归还

    在这里插入图片描述

    2.4个人资料修改

    在这里插入图片描述

    3.数据库表

    在这里插入图片描述

    4.部分代码讲解

    以借阅书籍这个功能的实现为例子。

    4.1bookServlet.java

    package com.cya.controller;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    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 com.cya.pojo.Admin;
    import com.cya.dao.AdminDao;
    import com.cya.dao.BookDao;
    
    /**
     * Servlet implementation class borrowServlet
     */
    @WebServlet("/borrowServlet")
    public class borrowServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#HttpServlet()
         */
        public borrowServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
    //		response.getWriter().append("Served at: ").append(request.getContextPath());
            //设置编码类型
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=UTF-8");
            BookDao bookdao = new BookDao();
            //为了区分借书和还书的功能,设置tip,tip为1,表示借书
            int tip = Integer.parseInt(request.getParameter("tip"));
            if (tip == 1) {
                //获取图书id
                int bid = Integer.parseInt(request.getParameter("bid"));
                HttpSession session = request.getSession();
                Admin admin = new Admin();
                String status=request.getParameter("status");
                String id="";
                if(status.equals("user")) {
                	//获取到存入session的读者id
                    id = (String) session.getAttribute("uid");
                }
                else {
                	//获取到存入session的aid读者id
                     id = (String) session.getAttribute("aid");
                }
                
                AdminDao admindao = new AdminDao();
                //通过aid获取到读者的信息
                admin = admindao.get_AidInfo2(id);
                //将借阅记录存入数据表
                bookdao.borrowBook(bid, admin);
                response.sendRedirect("/manage_books/books/user/select.jsp");
            } else {
                //还书功能,获取借阅记录的hid
                int hid = Integer.parseInt(request.getParameter("hid"));
                /**
                 * 还书在管理员和读者界面都有,为了区分,设置了show字段,show为1表示读者界面
                 */
                int show = Integer.parseInt(request.getParameter("show"));
                //调用还书函数,改变status字段
                bookdao.borrowBook2(hid);
                if (show == 1) {
                    response.sendRedirect("/manage_books/books/user/borrow.jsp");
                } else {
                    response.sendRedirect("/manage_books/books/admin/admin_borrows.jsp");
                }
    
            }
    
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
    
    

    4.2bookDao.java

    package com.cya.dao;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Calendar;
    
    import com.cya.pojo.Admin;
    import com.cya.pojo.Book;
    import com.cya.pojo.History;
    import com.cya.util.DBUtil;
    
    
    /**
     * 关于图书连接数据库的所有操作的类
     */
    public class BookDao {
    
        /**
         * 添加图书信息,传入所有的信息
         *
         * @param card
         * @param name
         * @param type
         * @param autho
         * @param press
         * @param num
         */
        public void addBook(String card, String name, String type, String autho, String press, int num) {
            // TODO Auto-generated method stub
            Connection conn = DBUtil.getConnectDb();
            String sql = "insert  into book(card,name,type,autho,press,num) values(?,?,?,?,?,?)";
            int rs = 0;
            PreparedStatement stm = null;
            try {
                stm = conn.prepareStatement(sql);
                stm.setString(1, card);
                stm.setString(2, name);
                stm.setString(3, type);
                stm.setString(4, autho);
                stm.setString(5, press);
                stm.setInt(6, num);
                rs = stm.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        /**
         * 获取所有的图书信息,返回的是ArrayList数组形式
         *
         * @return
         */
        public ArrayList<Book> get_ListInfo() {
            ArrayList<Book> tag_Array = new ArrayList<Book>();
            Connection conn = DBUtil.getConnectDb();
            String sql = "select * from book";
            PreparedStatement stm = null;
            ResultSet rs = null;
            try {
                stm = conn.prepareStatement(sql);
                rs = stm.executeQuery();
                while (rs.next()) {
                    Book tag = new Book();
                    tag.setBid(rs.getInt("bid"));
                    tag.setName(rs.getString("name"));
                    tag.setCard(rs.getString("card"));
                    tag.setType(rs.getString("type"));
                    tag.setAutho(rs.getString("autho"));
                    tag.setPress(rs.getString("press"));
                    tag.setNum(rs.getInt("num"));
                    tag_Array.add(tag);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                DBUtil.CloseDB(rs, stm, conn);
            }
            return tag_Array;
        }
    
        /**
         * 获取借阅记录的全部信息,传入的条件有status,aid,表示搜索正在借阅的,或者已经还书的信息,aid代表当前登录用户
         *
         * @param status
         * @return
         */
        public ArrayList<History> get_HistoryListInfo(int status, String aid) {
            ArrayList<History> tag_Array = new ArrayList<History>();
            Connection conn = DBUtil.getConnectDb();
            String sql = "select * from history where aid='" + aid + "' and status='" + status + "'";
            PreparedStatement stm = null;
            ResultSet rs = null;
            try {
                stm = conn.prepareStatement(sql);
                rs = stm.executeQuery();
                while (rs.next()) {
                    History tag = new History();
                    tag.setHid(rs.getInt("hid"));
                    tag.setAid(rs.getInt("aid"));
                    tag.setBid(rs.getInt("bid"));
                    tag.setBookname(rs.getString("bookname"));
                    tag.setCard(rs.getString("card"));
                    tag.setAdminname(rs.getString("adminname"));
                    tag.setUsername(rs.getString("username"));
                    tag.setBegintime(rs.getString("begintime"));
                    tag.setEndtime(rs.getString("endtime"));
                    tag.setStatus(rs.getInt("status"));
                    tag_Array.add(tag);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                DBUtil.CloseDB(rs, stm, conn);
            }
            return tag_Array;
        }
    
        /**
         * 获取借阅记录的全部信息,传入的条件有status,表示搜索正在借阅的,或者已经还书的信息
         *
         * @param status
         * @return
         */
        public ArrayList<History> get_HistoryListInfo2(int status) {
            ArrayList<History> tag_Array = new ArrayList<History>();
            Connection conn = DBUtil.getConnectDb();
            String sql = "select * from history where status='" + status + "'";
            PreparedStatement stm = null;
            ResultSet rs = null;
            try {
                stm = conn.prepareStatement(sql);
                rs = stm.executeQuery();
                while (rs.next()) {
                    History tag = new History();
                    tag.setHid(rs.getInt("hid"));
                    tag.setAid(rs.getInt("aid"));
                    tag.setBid(rs.getInt("bid"));
                    tag.setBookname(rs.getString("bookname"));
                    tag.setCard(rs.getString("card"));
                    tag.setAdminname(rs.getString("adminname"));
                    tag.setUsername(rs.getString("username"));
                    tag.setBegintime(rs.getString("begintime"));
                    tag.setEndtime(rs.getString("endtime"));
                    tag.setStatus(rs.getInt("status"));
                    tag_Array.add(tag);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                DBUtil.CloseDB(rs, stm, conn);
            }
            return tag_Array;
        }
    
        /**
         * 获取单个图书的信息,根据传入的bid来查找,返回一个Book数据类型
         *
         * @param bid
         * @return
         */
        public Book get_BookInfo(int bid) {
            Book tag = new Book();
            Connection conn = DBUtil.getConnectDb();
            String sql = "select * from book where bid='" + bid + "'";
            PreparedStatement stm = null;
            ResultSet rs = null;
            try {
                stm = conn.prepareStatement(sql);
                rs = stm.executeQuery();
                while (rs.next()) {
                    tag.setBid(rs.getInt("bid"));
                    tag.setName(rs.getString("name"));
                    tag.setCard(rs.getString("card"));
                    tag.setType(rs.getString("type"));
                    tag.setAutho(rs.getString("autho"));
                    tag.setPress(rs.getString("press"));
                    tag.setNum(rs.getInt("num"));
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                DBUtil.CloseDB(rs, stm, conn);
            }
            return tag;
        }
    
        /**
         * 修改图书的信息,bid作为条件,
         */
        public void updateBook(int bid, String card, String name, String type, String autho, String press, int num) {
            // TODO Auto-generated method stub
            Connection conn = DBUtil.getConnectDb();
            String sql = "update book set name=?,card=?,type=?,autho=?,press=?,num=? where bid=?";
            PreparedStatement stm = null;
            try {
                stm = conn.prepareStatement(sql);
                stm.setString(1, name);
                stm.setString(2, card);
                stm.setString(3, type);
                stm.setString(4, autho);
                stm.setString(5, press);
                stm.setInt(6, num);
                stm.setInt(7, bid);
                stm.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        /**
         * 删除图书信息,根据传入的bid作为条件
         *
         * @param bid
         */
        public void deleteBook(int bid) {
            // TODO Auto-generated method stub
            Connection conn = DBUtil.getConnectDb();
            String sql = "delete from book where bid=?";
            PreparedStatement stm = null;
            try {
                stm = conn.prepareStatement(sql);
                stm.setInt(1, bid);
                stm.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //System.out.println(uid);
    
        }
    
        /**
         * 用户查找图书,根据输入的名称,使用like进行模糊查询,然后返回一个ArrayList数组类型
         *
         * @param name
         * @return
         */
        public ArrayList<Book> getLikeList(String name) {
            // TODO Auto-generated method stub
            ArrayList<Book> tag_Array = new ArrayList<Book>();
            Connection conn = DBUtil.getConnectDb();
            String sql = "select * from book where name like '%" + name + "%'";
            PreparedStatement stm = null;
            ResultSet rs = null;
            try {
                stm = conn.prepareStatement(sql);
                rs = stm.executeQuery();
                while (rs.next()) {
                    Book tag = new Book();
                    tag.setBid(rs.getInt("bid"));
                    tag.setName(rs.getString("name"));
                    tag.setCard(rs.getString("card"));
                    tag.setType(rs.getString("type"));
                    tag.setAutho(rs.getString("autho"));
                    tag.setPress(rs.getString("press"));
                    tag.setNum(rs.getInt("num"));
                    tag_Array.add(tag);
                }
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } finally {
                DBUtil.CloseDB(rs, stm, conn);
            }
            return tag_Array;
        }
    
        /**
         * 图书借阅函数,根据传入bid图书id,adminbean当前登录用户的信息,在借阅记录数据表中新插入一条记录
         *
         * @param bid
         * @param adminbean
         */
        public void borrowBook(int bid, Admin adminbean) {
            // TODO Auto-generated method stub
            Book bookbean = new Book();
            bookbean = this.get_BookInfo(bid);
            //生成日期的功能
            Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DATE);
            //生成借阅开始日期
            String begintime = "" + year + "-" + month + "-" + day;
            month = month + 1;
            //生成截止还书日期
            String endtime = "" + year + "-" + month + "-" + day;
            Connection conn = DBUtil.getConnectDb();
            String sql = "insert  into history(aid,bid,card,bookname,adminname,username,begintime,endtime,status) values(?,?,?,?,?,?,?,?,?)";
            int rs = 0;
            PreparedStatement stm = null;
            try {
                stm = conn.prepareStatement(sql);
                stm.setInt(1, adminbean.getAid());
                stm.setInt(2, bookbean.getBid());
                stm.setString(3, bookbean.getCard());
                stm.setString(4, bookbean.getName());
                stm.setString(5, adminbean.getUsername());
                stm.setString(6, adminbean.getName());
                stm.setString(7, begintime);
                stm.setString(8, endtime);
                stm.setInt(9, 1);
                rs = stm.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    
        /**
         * 还书功能的函数,根据传入的hid借阅记录id,讲status字段的值改为0,并将还书日期改变为当前日期
         *
         * @param hid
         */
        public void borrowBook2(int hid) {
            // TODO Auto-generated method stub
            //生成日期
            Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DATE);
            //生成还书日期
            String endtime = "" + year + "-" + month + "-" + day;
            Connection conn = DBUtil.getConnectDb();
            String sql = "update history set endtime=?,status=? where hid=?";
            PreparedStatement stm = null;
            try {
                stm = conn.prepareStatement(sql);
                stm.setString(1, endtime);
                stm.setInt(2, 0);
                stm.setInt(3, hid);
                stm.executeUpdate();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
    
    
    展开全文
  • jsp基于servlet 图书管理系统 内附 数据库 是 mysql的 还有使用说明书
  • Servlet+jsp开发图书管理系统流程。

    万次阅读 多人点赞 2018-04-05 15:27:13
    本人在学习Servlet+JSP...本文主要介绍的是Servlet+jsp 开发图书管理系统的流程。有关servletjsp的基础知识在我的博客中有很多学习笔记可以参考。我都是分模块介绍的。稍后我还会写一个文章是描述MVC模式的。下面...

    本人在学习Servlet+JSP时候,是直接看的一个40课时的实战项目。根据项目学习写这种项目时候的套路。

    学习了包括如何分层,数据结构的使用,文件,接口的整理,还有servlet+jsp的基础知识等。

    本文主要介绍的是Servlet+jsp 开发图书管理系统的流程。

    有关servlet和jsp的基础知识在我的博客中有很多学习笔记可以参考。我都是分模块介绍的。

    稍后我还会写一个文章是描述MVC模式的。


    下面的分层和如何命名是我查阅资料后自己总结的,肯定还有很多种灵活的写法。

    主要有数据层、业务层、控制层、前端界面、4个层、

    侧重后端,也就是前3个层。同时我们是从数据层开始写的。

    1.数据层----主要功能就是和数据库连接,然后对数据进行处理。把处理后的结果返回

    给servlet类。

    总结数据层怎么写:

    首先要有一个jdbc驱动的连接。然后再写一个抽象函数,每次连接数据库的时候,只

    需要生成那个抽象函数的对象就可以连接数据库,不需要在写驱动。

    其次,数据库中的表全部都要建好。

    然后,根据每个表要执行的不同功能或者对数据库中数据操作的不同,生成不同的

    I***DAO的接口和相应的实现类****DAOimpl。

    最后,在DAOFactory的工厂中要进行注册,也就是要把每个***DAOimpl对象的创

    建写好。工厂类只有一个,但是要进行多次注册。

    (为什么写工厂类的问题,在设计模式中有一种模式是工厂模式,此时采用的就是这个,它有它的好处。在我的博客中针对3种不同的工厂模型都有介绍)。

    下面是具体的执行步骤:


    1.1第一次写的时候,需要写一个工具类,表示JDBC对数据的连接。叫DatebaseConnection类。

    其中包括open和close。数据库的连接和关闭。




    1.2定义一个抽象类,名称为AbstractDAOImpl.java(实现dao接口),创建了一个Connction和PreparedStatement。直接使用就可以了。


    1.3 定义数据库中的表(可以叫VO类或者JavaBean类)

    -class:VO类(表示我们数据库中的每个表,每个数据都是private的,每个变量都有相应的setter和getter函数)

            举个列子:定义一个管理员的表。其中有5个属性。 

                

    1.4 第一次定义一个IDAO类,此后都是继承该接口,用哪个函数override其中的哪个函数

    -interface:IDAO(定义公共接口)实现接下来所有可能对数据库中数据进行的各种修改函数的声明

            其中可以包括函数为:

                <K>表示主键       <V>表示要操作的对象

                -public boolean doCreate(V vo) throws SQLException;   

                                             //实现对数据的增加操作,成功返回true,否则返回false

                -public boolean doUpdate(V vo) throws SQLException;  

                                                //实现对数据的更新操作

                -public  boolean deRemove(Set<?> ids) throws SQLException; 

                                           //实现对数据的批量删除,ids表示要删除的数据集合

                -public V findById( K id)  throws SQLException;  

                                           //根据用户提供的id进行查询,查询成功返回该数据行中的记录,失败返回null。

                -public List<V> findAll( ) throws SQLException;

                                            //实现数据的全部查询(查询结果有多行),成功返回多行数据

          -public  List<V> findAllBySplit ( String column , String keyword , int currentpage , int linesize) throws SQLException;   

                                                 //实现数据的分页操作,column 表示要执行查询列;keyword 表示查询的关键字;currentpage表示当前页;linesize表示每页显示记录数。成功返回所有数据。

                    -public int getAllCount(String column , String keyword ) throws SQLException;  

                                                  //表示数据量统计操作。

                -

      1.5 定义和表有关的具体的IDAO(继承IDAO的所有操作数据的方法,并且根据该模块的特殊需求,可以添加所需的新方法)

    比如:IAdminDao中,继承了IDAO的所有处理数据的方法(上面的橘色的方法),同时可以有自己的特殊的方法。比如这里是登录的一个验证功能。






      1.6 写一个I***DAO的实现类。继承I***DAO的接口,继承接口中的方法,并且具体实现它。

    例如:新建一个public  class AdminDAOimpl extends AbastractDAOImpl implement IAdminDAO<String ,Admin> 其中包括该函数。

    extends AbastractDAOImpl 的作用:可以直接使用其中的PrepareStatement  pstmt语句。和数据库的连接,不需要每次都写了。

    AdminDAOImpl就是具体实现了登录功能的方法。包括:sql语句编写;处理sql语句,因为是变量传参所以要pstmt.setString()每个参数;execteQuery()返回的都是resultset集合。所以用next()循环处理。因为这里是判断是否有记录,用if。如果是查找全部的结果就要用while。


    1.7编写一个工厂类DAOFactory,实现所有的***DAOimpl创建对象的过程。

    例如:这个工厂只注册了一个IAdminDAOImpl的实现类,在我们写完课程表等表后,都需要在其中注册。





    2.业务层

                 ----其实本人觉得业务层和控制层可以合并,只是我参考的代码的人是全部分开写的。 如果说数据层是具体的告诉数据库要干啥的,那么业务层我理解为把数据库干的一些事进行整理,然后把最后的一个结果返回给下面的控制层。比如控制层要增加一个数据,那么控制层就调用业务层的一个函数insert(参数)即可。那么业务层的insert(判断是否可以添加(即数据库是否存在该行数据,要调用数据层的函数findById) + 如果可以添加就添加(即调用数据层的函数doCreat()函数))。所以这个insert函数相当于调用了两个数据库中的函数,但是他其中没有任何的具体实现,就是调用数据层写好的函数而已。


    总结业务层怎么写:

    1.实现service的接口(根据模块的不同,生成的不同)

    2.实现与接口对应的具体实现***ServiceImpl

    3.在工厂中注册


    2.1根据该对象(例如admin)要执行的功能,写一个service类。

    例如:根据数据层的IAdminDAO,写一个interface:IAdminService(admin模块)

    或者根据lenbookDAO写的一个interface:lenbookService(借书lenbook模块)


    2.1 写刚刚接口的实现。

    比如:AdminServiceImpl 继承IAdminService接口。

    仔细观察,发现调用数据层的函数都是调用的DaoFactory中的函数来创建的对象,然后调用的对象的函数,.findLogin(vo).


    比如:lenbookServiceImpl 继承lenbookService接口。

    他调用数据层的函数于是调用的工厂中DAOFactory的函数。



    2.3第一次的时候,要定义服务层工厂类ServiceFactory

          当然下次就只需要在工厂中注册就可以了,不需要定义工厂了。

    可以如下定义:

    与接口层的工厂定义类似。



    3.控制层

            -----控制层就是我们的servlet类。就是用来接收request中的函数,然后调用serviceImpl中函数进行处理,然后再和前端界面进行连接(前端连接主要是url到该servlet中)

    总结业务层怎么写(控制层一个servlet就可以搞定,但是其中编写具体分如下的几步

    1.doGet()和doPost()函数,用来取到url中“/”后的那个servlet中的函数

    2. 编写该函数。包括:接受参数;调用函数传递参数;跳转3个部分。


    3.1servlet被调用后,doPost调用doGet方法。在doGet方法中,status就可以取到要调用的servlet中哪个类的名字,然后根据if判断,就可以跳到下面的该类中。

    比如下面的函数是用来判断是否是login字段的然,然后调用3.2中login函数。


    3.2 编写该函数。包括:接受参数;调用函数传递参数;跳转3个部分。

    例如:login函数的编写。

    它的密码部分用了一个加密处理,可以忽略。





    4前端界面的编写。

        -----因为我们编写的时候是从数据层开始编写的,在控制层如果写好了url,那么就

    根据写好的编写jsp界面就可以。在其中可以使用html<form action="#" >或者

    <a href="#">等方法实现对servlet的调用。当然jsp可以应用我们servlet中传递的各

    种参数。

    前端用到的技术主要是html+css+js+jsp(偏后台)。

    展开全文
  • 基于JSP图书管理系统jsp+servlet+javaBean,全套源码。
  • 基于jsp+servlet+前台模板写的图书管理系统,一点一点写吧,详细的注释已经在代码上说明,希望对学习基于java开发的web方向的童鞋有所帮助。这里面有后台的页面,后台的实现代码和详细设计,详细步骤见...
  • 至此用户信息的增删该查,全部写完了,感兴趣的可以下载好源码和数据库之后查看我得博客http://www.cnblogs.com/biehongli/,博客里面对用户信息的增删改查进行了详细的介绍
  • 前两个文档传的是数据库和插入,查询的源码,这次是修改的源码。里面有详细的注释和代码。博客介绍可见http://www.cnblogs.com/biehongli/p/6262496.html
  • 使用servletjsp实现的图书管理系统,有数据库,借阅功能,归还功能,图书查询
  • 基于Javaweb jsp servlet mysql bootstrap layui jQuery的图书管理系统
  • 基于jsp+servlet图书管理系统之后台用户信息插入操作 前奏:  刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时...

    基于jsp+servlet图书管理系统之后台用户信息插入操作

    前奏:

      刚开始接触博客园写博客,就是写写平时学的基础知识,慢慢发现大神写的博客思路很清晰,知识很丰富,非常又价值,反思自己写的,顿时感觉非常low,有相当长一段时间没有分享自己的知识。于是静下心来钻研知识,趁着这学期的结束(马上就要放寒假了),写写最近练习的基于jsp+servlet+前台模板写的图书管理系统,一点一点写吧,详细的注释已经在代码上说明,希望对学习基于java开发的web方向的童鞋有所帮助。今天先把写的用户信息管理的添加(插入)操作分享一下,使用了一些特殊的知识,也会做一下说明。更多代码和功能会持续更新,完整可直接运行的。

      开发环境:Eclipse Version: Mars.2 Release (4.5.2) 

             JDK Version:1.8

           tomcat  Vsersion:7.0

      详细的代码和数据库设计在这里下载即可:http://download.csdn.net/detail/biexiansheng/9728492

      (由于个人掌握知识有限,如若有不足的地方,还请多多交流。)


    开始修改原型设计:

      1:设计好数据库(当然我这里设计是简单的数据库),见上面的链接,下载导入自己的数据库即可使用。

      2:我先准备好了原型模板,然后将原型模板修改好,然后才进行开发。原型模板修改如下。    

        将登录界面的原型html修改为jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %> 
    10 <!DOCTYPE html>
    11 <html lang="en">
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <title>用户登录</title>
    15 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    16 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    17 <link href="resource/assets/css/bootstrap.min.css" rel="stylesheet" />
    18 <link rel="stylesheet" href="resource/assets/css/font-awesome.min.css" />
    19 <link rel="stylesheet" href="resource/assets/css/ace.min.css" />
    20 <link rel="stylesheet" href="resource/assets/css/ace-rtl.min.css" />
    21 </head>
    22 <body class="login-layout">
    23     <div class="main-container">
    24         <div class="main-content">
    25             <div class="row">
    26                 <div class="col-sm-10 col-sm-offset-1">
    27                     <div class="login-container">
    28                         <div class="center">
    29                             <h1>
    30                                 <i class="icon-leaf green"></i> <span class="red">别先生</span> <span
    31                                     class="white">图书管理系统</span>
    32                             </h1>
    33                             <h4 class="blue"></h4>
    34                         </div>
    35                         <div class="space-6"></div>
    36                         <div class="position-relative">
    37                             <div id="login-box"
    38                                 class="login-box visible widget-box no-border">
    39                                 <div class="widget-body">
    40                                     <div class="widget-main">
    41                                         <h4 class="header blue lighter bigger">
    42                                             <i class="icon-coffee green"></i> 请输入您的账号和密码
    43                                         </h4>
    44 
    45                                         <div class="space-6"></div>
    46                                         <form action="view/system/main/index.jsp" method="post" onsubmit="return check()">
    47                                             <fieldset>
    48                                                 <label class="block clearfix"> <span
    49                                                     class="block input-icon input-icon-right"> <input id="userId"
    50                                                         name="userId" type="text" class="form-control"
    51                                                         placeholder="请输入您的账号" /> <i class="icon-user"></i>
    52                                                 </span>
    53                                                 </label> <label class="block clearfix"> <span
    54                                                     class="block input-icon input-icon-right"> <input id="userPw"
    55                                                         name="passWord" type="password" class="form-control"
    56                                                         placeholder="请输入您的密码" /> <i class="icon-lock"></i>
    57                                                 </span>
    58                                                 </label>
    59 
    60                                                 <div class="clearfix">
    61                                             
    62 
    63                                                     <button type="submit"
    64                                                         class="width-35 pull-right btn btn-sm btn-primary">
    65                                                         <i class="icon-key"></i> 登陆
    66                                                     </button>
    67                                                 </div>
    68 
    69                                                 <div class="space-4"></div>
    70                                             </fieldset>
    71                                         </form>
    72 
    73                                     </div>
    74 
    75                                 </div>
    76 
    77                             </div>
    78 
    79 
    80                     </div>
    81 
    82                 </div>
    83             </div>
    84 
    85         </div>
    86 </div>
    87     </div>
    88 
    89 </body>
    90 </html>
    登陆界面

        将主界面的原型html修改为jsp

      1 <%@ page language="java" contentType="text/html; charset=UTF-8"
      2     pageEncoding="UTF-8"%>
      3 <%
      4     //获取绝对路径路径 
      5     String path = request.getContextPath();
      6     String basePath = request.getScheme() + "://"
      7                 + request.getServerName() + ":" + request.getServerPort()
      8                 + path + "/";
      9 %> 
     10 <!DOCTYPE html>
     11 <html lang="en">
     12 <head>
     13 <base href="<%=basePath %>" />
     14 <title>首页</title>
     15 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     16 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     17 <link href="resource/assets/css/bootstrap.min.css" rel="stylesheet" />
     18 <link rel="stylesheet" href="resource/assets/css/font-awesome.min.css" />
     19 <link rel="stylesheet" href="resource/assets/css/ace.min.css" />
     20 <link rel="stylesheet" href="resource/assets/css/ace-rtl.min.css" />
     21 <link rel="stylesheet" href="resource/assets/css/ace-skins.min.css" />
     22 <script src="resource/assets/js/ace-extra.min.js"></script>
     23 <script src="resource/assets/jquery.min.js"></script>
     24 </head>
     25 <body>
     26 <div class="navbar navbar-default" id="navbar">
     27         <script type="text/javascript">
     28             try {
     29                 ace.settings.check('navbar', 'fixed')
     30             } catch (e) {
     31             }
     32         </script>
     33 
     34         <div class="navbar-container" id="navbar-container">
     35             <div class="navbar-header pull-left">
     36                 <a href="view/system/main/index.jsp" class="navbar-brand"> <small> <i
     37                         class="icon-leaf"></i> 别先生后台图书管理系统
     38                 </small>
     39                 </a>
     40                 <!-- /.brand -->
     41             </div>
     42             <!-- /.navbar-header -->
     43 
     44             <div class="navbar-header pull-right" role="navigation">
     45                 <ul class="nav ace-nav">
     46                     <li class="green"><a data-toggle="dropdown"
     47                         class="dropdown-toggle" href="#"> <i
     48                             class="icon-envelope icon-animated-vertical"></i> <span
     49                             class="badge badge-success">5</span>
     50                     </a>
     51 
     52                         <ul
     53                             class="pull-right dropdown-navbar dropdown-menu dropdown-caret dropdown-close">
     54                             <li class="dropdown-header"><i class="icon-envelope-alt"></i>
     55                                 5条消息</li>
     56                         </ul></li>
     57 
     58                     <li class="light-blue"><a data-toggle="dropdown" href="#"
     59                         class="dropdown-toggle"> <img class="nav-user-photo"
     60                             src="resource/assets/avatars/user.jpg" alt="Jason's Photo" /> <span
     61                             class="user-info"> <small>欢迎光临,</small>
     62                         </span> <i class="icon-caret-down"></i>
     63                     </a>
     64                         <ul
     65                             class="user-menu pull-right dropdown-menu dropdown-yellow dropdown-caret dropdown-close">
     66                             
     67                             <li><a href="#"  target="mainframe"> <i class="icon-user"></i> 个人资料
     68                             </a></li>
     69 
     70                             <li class="divider"></li>
     71 
     72                             <li><a href="view/system/main/login.jsp"> <i class="icon-off"></i> 退出
     73                             </a></li>
     74                         </ul></li>
     75                 </ul>
     76                 <!-- /.ace-nav -->
     77 
     78             </div>
     79             <!-- /.navbar-header -->
     80         </div>
     81         <!-- /.container -->
     82     </div>
     83 
     84     <div class="main-container" id="main-container">
     85         <script type="text/javascript">
     86             try {
     87                 ace.settings.check('main-container', 'fixed')
     88             } catch (e) {
     89             }
     90         </script>
     91 
     92         <div class="main-container-inner">
     93             <a class="menu-toggler" id="menu-toggler" href="#"> <span
     94                 class="menu-text"></span>
     95             </a>
     96 
     97             <div class="sidebar" id="sidebar">
     98                 <script type="text/javascript">
     99                     try {
    100                         ace.settings.check('sidebar', 'fixed')
    101                     } catch (e) {
    102                     }
    103                 </script>
    104 
    105                 <div class="sidebar-shortcuts" id="sidebar-shortcuts">
    106                     <div class="sidebar-shortcuts-large" id="sidebar-shortcuts-large">
    107                         <button class="btn btn-success">
    108                             <i class="icon-signal"></i>
    109                         </button>
    110 
    111                         <button class="btn btn-info">
    112                             <i class="icon-pencil"></i>
    113                         </button>
    114 
    115                         <button class="btn btn-warning">
    116                             <i class="icon-group"></i>
    117                         </button>
    118 
    119                         <button class="btn btn-danger">
    120                             <i class="icon-cogs"></i>
    121                         </button>
    122                     </div>
    123 
    124                     <div class="sidebar-shortcuts-mini" id="sidebar-shortcuts-mini">
    125                         <span class="btn btn-success"></span> <span class="btn btn-info"></span>
    126 
    127                         <span class="btn btn-warning"></span> <span class="btn btn-danger"></span>
    128                     </div>
    129                 </div>
    130                 <!-- #sidebar-shortcuts -->
    131 
    132                 <ul class="nav nav-list">
    133                     <li class="active"><a
    134                         href="view/system/main/main.jsp" target="mainframe">
    135                             <i class="icon-dashboard"></i> <span class="menu-text">
    136                                 控制台 </span>
    137                     </a></li>
    138                 <li><a href="javascript:void(0)" target="mainframe"
    139                         class="dropdown-toggle"> <i class="icon-desktop"></i> <span
    140                             class="menu-text"> 系统管理 </span> <b class="arrow icon-angle-down"></b>
    141                     </a>
    142 
    143                         <ul class="submenu">
    144                             
    145                             <li><a href="view/system/userinfo/userinfo_list.jsp" target="mainframe"> <i
    146                                     class="icon-double-angle-right"></i> 用户管理
    147                             </a></li>
    148                 
    149                         </ul>
    150                 </li>
    151                         <li><a href="javascript:void(0)" target="mainframe"
    152                         class="dropdown-toggle"> <i class="icon-desktop"></i> <span
    153                             class="menu-text">图书管理 </span> <b class="arrow icon-angle-down"></b>
    154                     </a>
    155 
    156                         <ul class="submenu">
    157                             
    158                             <li><a href="view/crm/customer/customer_list.html" target="mainframe"> <i
    159                                     class="icon-double-angle-right"></i> 图书管理
    160                             </a></li>
    161                                <li><a href="view/crm/customer/customer_list.html" target="mainframe"> <i
    162                                     class="icon-double-angle-right"></i> 图书记录管理
    163                             </a></li>
    164                         
    165                         </ul>
    166                 </li>
    167                 </ul>
    168                 <!-- /.nav-list -->
    169 
    170                 <div class="sidebar-collapse" id="sidebar-collapse">
    171                     <i class="icon-double-angle-left"
    172                         data-icon1="icon-double-angle-left"
    173                         data-icon2="icon-double-angle-right"></i>
    174                 </div>
    175 
    176                 <script type="text/javascript">
    177                     try {
    178                         ace.settings.check('sidebar', 'collapsed')
    179                     } catch (e) {
    180                     }
    181                 </script>
    182             </div>
    183 
    184             <div class="main-content" id="mains">
    185                 <iframe id="mainframe" name="mainframe" src="view/system/main/main.jsp"
    186                     style="width: 100%;border: 0px;"> </iframe>
    187 
    188             </div>
    189 
    190             <script type="text/javascript">
    191                 var height = jQuery(window).height() - 50;
    192                 jQuery("#mainframe").attr("height", "" + height + "px;");
    193             </script>
    194 
    195             <div class="ace-settings-container" id="ace-settings-container">
    196                 <div class="btn btn-app btn-xs btn-warning ace-settings-btn"
    197                     id="ace-settings-btn">
    198                     <i class="icon-cog bigger-150"></i>
    199                 </div>
    200 
    201                 <div class="ace-settings-box" id="ace-settings-box">
    202                     <div>
    203                         <div class="pull-left">
    204                             <select id="skin-colorpicker" class="hide">
    205                                 <option data-skin="default" value="#438EB9">#438EB9</option>
    206                                 <option data-skin="skin-1" value="#222A2D">#222A2D</option>
    207                                 <option data-skin="skin-2" value="#C6487E">#C6487E</option>
    208                                 <option data-skin="skin-3" value="#D0D0D0">#D0D0D0</option>
    209                             </select>
    210                         </div>
    211                         <span>&nbsp; 选择皮肤</span>
    212                     </div>
    213 
    214                     <div>
    215                         <input type="checkbox" class="ace ace-checkbox-2"
    216                             id="ace-settings-navbar" /> <label class="lbl"
    217                             for="ace-settings-navbar"> 固定导航条</label>
    218                     </div>
    219 
    220                     <div>
    221                         <input type="checkbox" class="ace ace-checkbox-2"
    222                             id="ace-settings-sidebar" /> <label class="lbl"
    223                             for="ace-settings-sidebar"> 固定滑动条</label>
    224                     </div>
    225 
    226                     <div>
    227                         <input type="checkbox" class="ace ace-checkbox-2"
    228                             id="ace-settings-breadcrumbs" /> <label class="lbl"
    229                             for="ace-settings-breadcrumbs">固定面包屑</label>
    230                     </div>
    231 
    232                     <div>
    233                         <input type="checkbox" class="ace ace-checkbox-2"
    234                             id="ace-settings-rtl" /> <label class="lbl"
    235                             for="ace-settings-rtl">切换到左边</label>
    236                     </div>
    237 
    238                     <div>
    239                         <input type="checkbox" class="ace ace-checkbox-2"
    240                             id="ace-settings-add-container" /> <label class="lbl"
    241                             for="ace-settings-add-container"> 切换窄屏 <b></b>
    242                         </label>
    243                     </div>
    244                 </div>
    245             </div>
    246             <!-- /#ace-settings-container -->
    247         </div>
    248         <!-- /.main-container-inner -->
    249 
    250         <a href="#" id="btn-scroll-up"
    251             class="btn-scroll-up btn btn-sm btn-inverse"> <i
    252             class="icon-double-angle-up icon-only bigger-110"></i>
    253         </a>
    254     </div>
    255     <!-- /.main-container -->
    256     <!-- basic scripts -->
    257 
    258 
    259 
    260 
    261     <script type="text/javascript">
    262         if ("ontouchend" in document)
    263             document
    264                     .write("<script src='resource/assets/js/jquery.mobile.custom.min.js'>"
    265                             + "<"+"script>");
    266     </script>
    267     <script src="resource/assets/js/bootstrap.min.js"></script>
    268     <script src="resource/assets/js/typeahead-bs2.min.js"></script>
    269 
    270     <!-- page specific plugin scripts -->
    271 
    272     <!--[if lte IE 8]>
    273           <script src="resource/assets/js/excanvas.min.js"></script>
    274         <![endif]-->
    275 
    276     <script src="resource/assets/js/jquery-ui-1.10.3.custom.min.js"></script>
    277     <script src="resource/assets/js/jquery.ui.touch-punch.min.js"></script>
    278     <script src="resource/assets/js/jquery.slimscroll.min.js"></script>
    279     <script src="resource/assets/js/jquery.easy-pie-chart.min.js"></script>
    280     <script src="resource/assets/js/jquery.sparkline.min.js"></script>
    281     <script src="resource/assets/js/flot/jquery.flot.min.js"></script>
    282     <script src="resource/assets/js/flot/jquery.flot.pie.min.js"></script>
    283     <script src="resource/assets/js/flot/jquery.flot.resize.min.js"></script>
    284 
    285     <!-- ace scripts -->
    286 
    287     <script src="resource/assets/js/ace-elements.min.js"></script>
    288     <script src="resource/assets/js/ace.min.js"></script>
    289 
    290     <!-- inline scripts related to this page -->
    291 
    292     <script type="text/javascript">
    293         jQuery(function($) {
    294             $('.easy-pie-chart.percentage')
    295                     .each(
    296                             function() {
    297                                 var $box = $(this).closest('.infobox');
    298                                 var barColor = $(this).data('color')
    299                                         || (!$box.hasClass('infobox-dark') ? $box
    300                                                 .css('color')
    301                                                 : 'rgba(255,255,255,0.95)');
    302                                 var trackColor = barColor == 'rgba(255,255,255,0.95)' ? 'rgba(255,255,255,0.25)'
    303                                         : '#E2E2E2';
    304                                 var size = parseInt($(this).data('size')) || 50;
    305                                 $(this)
    306                                         .easyPieChart(
    307                                                 {
    308                                                     barColor : barColor,
    309                                                     trackColor : trackColor,
    310                                                     scaleColor : false,
    311                                                     lineCap : 'butt',
    312                                                     lineWidth : parseInt(size / 10),
    313                                                     animate : /msie\s*(8|7|6)/
    314                                                             .test(navigator.userAgent
    315                                                                     .toLowerCase()) ? false
    316                                                             : 1000,
    317                                                     size : size
    318                                                 });
    319                             })
    320 
    321             $('.sparkline').each(
    322                     function() {
    323                         var $box = $(this).closest('.infobox');
    324                         var barColor = !$box.hasClass('infobox-dark') ? $box
    325                                 .css('color') : '#FFF';
    326                         $(this).sparkline('html', {
    327                             tagValuesAttribute : 'data-values',
    328                             type : 'bar',
    329                             barColor : barColor,
    330                             chartRangeMin : $(this).data('min') || 0
    331                         });
    332                     });
    333 
    334             var placeholder = $('#piechart-placeholder').css({
    335                 'width' : '90%',
    336                 'min-height' : '150px'
    337             });
    338             var data = [ {
    339                 label : "social networks",
    340                 data : 38.7,
    341                 color : "#68BC31"
    342             }, {
    343                 label : "search engines",
    344                 data : 24.5,
    345                 color : "#2091CF"
    346             }, {
    347                 label : "ad campaigns",
    348                 data : 8.2,
    349                 color : "#AF4E96"
    350             }, {
    351                 label : "direct traffic",
    352                 data : 18.6,
    353                 color : "#DA5430"
    354             }, {
    355                 label : "other",
    356                 data : 10,
    357                 color : "#FEE074"
    358             } ]
    359             function drawPieChart(placeholder, data, position) {
    360                 $.plot(placeholder, data, {
    361                     series : {
    362                         pie : {
    363                             show : true,
    364                             tilt : 0.8,
    365                             highlight : {
    366                                 opacity : 0.25
    367                             },
    368                             stroke : {
    369                                 color : '#fff',
    370                                 width : 2
    371                             },
    372                             startAngle : 2
    373                         }
    374                     },
    375                     legend : {
    376                         show : true,
    377                         position : position || "ne",
    378                         labelBoxBorderColor : null,
    379                         margin : [ -30, 15 ]
    380                     },
    381                     grid : {
    382                         hoverable : true,
    383                         clickable : true
    384                     }
    385                 })
    386             }
    387             drawPieChart(placeholder, data);
    388 
    389             /**
    390             we saved the drawing function and the data to redraw with different position later when switching to RTL mode dynamically
    391             so that's not needed actually.
    392              */
    393             placeholder.data('chart', data);
    394             placeholder.data('draw', drawPieChart);
    395 
    396             var $tooltip = $(
    397                     "<div class='tooltip top in'><div class='tooltip-inner'></div></div>")
    398                     .hide().appendTo('body');
    399             var previousPoint = null;
    400 
    401             placeholder.on('plothover', function(event, pos, item) {
    402                 if (item) {
    403                     if (previousPoint != item.seriesIndex) {
    404                         previousPoint = item.seriesIndex;
    405                         var tip = item.series['label'] + " : "
    406                                 + item.series['percent'] + '%';
    407                         $tooltip.show().children(0).text(tip);
    408                     }
    409                     $tooltip.css({
    410                         top : pos.pageY + 10,
    411                         left : pos.pageX + 10
    412                     });
    413                 } else {
    414                     $tooltip.hide();
    415                     previousPoint = null;
    416                 }
    417 
    418             });
    419 
    420             var d1 = [];
    421             for (var i = 0; i < Math.PI * 2; i += 0.5) {
    422                 d1.push([ i, Math.sin(i) ]);
    423             }
    424 
    425             var d2 = [];
    426             for (var i = 0; i < Math.PI * 2; i += 0.5) {
    427                 d2.push([ i, Math.cos(i) ]);
    428             }
    429 
    430             var d3 = [];
    431             for (var i = 0; i < Math.PI * 2; i += 0.2) {
    432                 d3.push([ i, Math.tan(i) ]);
    433             }
    434 
    435             var sales_charts = $('#sales-charts').css({
    436                 'width' : '100%',
    437                 'height' : '220px'
    438             });
    439             $.plot("#sales-charts", [ {
    440                 label : "Domains",
    441                 data : d1
    442             }, {
    443                 label : "Hosting",
    444                 data : d2
    445             }, {
    446                 label : "Services",
    447                 data : d3
    448             } ], {
    449                 hoverable : true,
    450                 shadowSize : 0,
    451                 series : {
    452                     lines : {
    453                         show : true
    454                     },
    455                     points : {
    456                         show : true
    457                     }
    458                 },
    459                 xaxis : {
    460                     tickLength : 0
    461                 },
    462                 yaxis : {
    463                     ticks : 10,
    464                     min : -2,
    465                     max : 2,
    466                     tickDecimals : 3
    467                 },
    468                 grid : {
    469                     backgroundColor : {
    470                         colors : [ "#fff", "#fff" ]
    471                     },
    472                     borderWidth : 1,
    473                     borderColor : '#555'
    474                 }
    475             });
    476 
    477             $('#recent-box [data-rel="tooltip"]').tooltip({
    478                 placement : tooltip_placement
    479             });
    480             function tooltip_placement(context, source) {
    481                 var $source = $(source);
    482                 var $parent = $source.closest('.tab-content')
    483                 var off1 = $parent.offset();
    484                 var w1 = $parent.width();
    485 
    486                 var off2 = $source.offset();
    487                 var w2 = $source.width();
    488 
    489                 if (parseInt(off2.left) < parseInt(off1.left)
    490                         + parseInt(w1 / 2))
    491                     return 'right';
    492                 return 'left';
    493             }
    494 
    495             $('.dialogs,.comments').slimScroll({
    496                 height : '300px'
    497             });
    498 
    499             //Android's default browser somehow is confused when tapping on label which will lead to dragging the task
    500             //so disable dragging when clicking on label
    501             var agent = navigator.userAgent.toLowerCase();
    502             if ("ontouchstart" in document && /applewebkit/.test(agent)
    503                     && /android/.test(agent))
    504                 $('#tasks').on('touchstart', function(e) {
    505                     var li = $(e.target).closest('#tasks li');
    506                     if (li.length == 0)
    507                         return;
    508                     var label = li.find('label.inline').get(0);
    509                     if (label == e.target || $.contains(label, e.target))
    510                         e.stopImmediatePropagation();
    511                 });
    512 
    513             $('#tasks').sortable({
    514                 opacity : 0.8,
    515                 revert : true,
    516                 forceHelperSize : true,
    517                 placeholder : 'draggable-placeholder',
    518                 forcePlaceholderSize : true,
    519                 tolerance : 'pointer',
    520                 stop : function(event, ui) {//just for Chrome!!!! so that dropdowns on items don't appear below other items after being moved
    521                     $(ui.item).css('z-index', 'auto');
    522                 }
    523             });
    524             $('#tasks').disableSelection();
    525             $('#tasks input:checkbox').removeAttr('checked').on('click',
    526                     function() {
    527                         if (this.checked)
    528                             $(this).closest('li').addClass('selected');
    529                         else
    530                             $(this).closest('li').removeClass('selected');
    531                     });
    532 
    533         })
    534     </script>
    535 
    536 
    537 
    538 </body>
    539 </html>
    主界面

         将其他界面的原型html修改为jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %> 
    10 <!DOCTYPE html>
    11 <html>
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <meta charset="utf-8">
    15 <title>工作台</title>
    16 <!-- 新 Bootstrap 核心 CSS 文件 -->
    17 <link rel="stylesheet" href="resource/css/bootstrap.min.css">
    18 <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->
    19 <script src="resource/js/jquery.min.js"></script>
    20 <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
    21 <script src="resource/js/bootstrap.min.js"></script>
    22 </head>
    23 <body>
    24 <div style="padding:0px; margin:0px;">
    25  <ul class="breadcrumb" style=" padding:0px; padding-left:20px;" >
    26   <li ><a href="#">首页</a></li>
    27   <li>工作台</li>
    28 </ul>
    29 </div>
    30 <div class="row">
    31     <div class="col-xs-6" >
    32          <div class="panel panel-default" >
    33           <div class="panel-heading"  >
    34             <span class="glyphicon glyphicon-refresh"></span>图形报表
    35           </div>
    36               <div class="panel-body">
    37                   <img src="resource/img/test.png" height="200" width="100%">
    38               </div>
    39         </div>
    40     </div>
    41     <div class="col-xs-6" >
    42       <div class="panel panel-default" >
    43           <div class="panel-heading"  >
    44             <span class="glyphicon glyphicon-refresh"></span>图形报表
    45           </div>
    46               <div class="panel-body">
    47                   <img src="resource/img/test.png" height="200" width="100%">
    48               </div>
    49         </div>
    50     </div>
    51 
    52 
    53 </div>
    54 
    55 
    56 </body>
    57 </html>
    其他界面

         这里插一句,我使用的是servlet3.0,但是配置文件修为了默认访问登录界面login.jsp

    1 <?xml version="1.0" encoding="UTF-8"?>
    2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    3   <display-name>book</display-name>
    4   <welcome-file-list>
    5       <!-- 默认模仿的是登录界面login.jsp页面 -->
    6     <welcome-file>login.jsp</welcome-file>
    7   </welcome-file-list>
    8 </web-app>
    servlet3.0-xml

         将用户信息列表界面的原型html修改为jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %> 
    10 <!DOCTYPE html>
    11 <html>
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <meta charset="UTF-8">
    15 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    16 <title>用户管理-用户查询</title>
    17 <link href="resource/css/bootstrap.min.css" rel="stylesheet" />
    18 <script type="text/javascript" src="resource/js/jquery.min.js"></script>
    19 <script type="text/javascript"
    20     src="resource/js/bootstrap.min.js"></script>
    21 </head>
    22 <body>
    23     <div>
    24         <ul class="breadcrumb" style="margin: 0px;">
    25             <li>系统管理</li>
    26             <li>用户管理</li>
    27             <li>用户查询</li>
    28         </ul>
    29     </div>
    30     <form action="" class="form-inline">
    31         <div class="row alert alert-info" style="margin: 0px; padding: 5px;">
    32             <div class="form-group">
    33                 <label>条件:</label> <select class="form-control">
    34                     <option>姓名</option>
    35                     <option>性别</option>
    36                 </select> <input type="text" class="form-control" placeholder="请输入查询条件" />
    37             </div>
    38             <input type="button" class="btn btn-danger" value="查询"> <a
    39                 href="view/system/userinfo/userinfo_add.jsp" class="btn btn-success">添加用户</a>
    40         </div>
    41         <div class="row" style="padding: 15px;">
    42             <table class="table table-hover table-condensed">
    43                 <tr>
    44                     <th>用户编号</th>
    45                     <th>用户账号</th>
    46                     <th>用户密码</th>
    47                     <th>用户姓名</th>
    48                     <th>用户性别</th>
    49                     <th>用户年龄</th>
    50                     <td>操作</td>
    51                 </tr>
    52                 <tr>
    53                     <td>1001</td>
    54                     <td>admin123</td>
    55                     <td>123456</td>
    56                     <td>高富帅</td>
    57                     <td></td>
    58                     <td>20</td>
    59                     <td><a href="view/system/userinfo/userinfo_update.jsp">修改</a> 删除</td>
    60                 </tr>
    61                 <tr>
    62                     <td>1001</td>
    63                     <td>admin123</td>
    64                     <td>123456</td>
    65                     <td>白富美</td>
    66                     <td></td>
    67                     <td>20</td>
    68                     <td>修改 删除</td>
    69                 </tr>
    70                 <tr>
    71                     <td>1001</td>
    72                     <td>admin123</td>
    73                     <td>123456</td>
    74                     <td>高富帅</td>
    75                     <td></td>
    76                     <td>20</td>
    77                     <td>修改 删除</td>
    78                 </tr>
    79                 <tr>
    80                     <td>1001</td>
    81                     <td>admin123</td>
    82                     <td>123456</td>
    83                     <td>白富美</td>
    84                     <td></td>
    85                     <td>20</td>
    86                     <td>修改 删除</td>
    87                 </tr>
    88             </table>
    89         </div>
    90     </form>
    91 </body>
    92 </html>
    用户信息的主页面

         将用户信息插入界面的原型html修改为jsp

      1 <%@ page language="java" contentType="text/html; charset=UTF-8"
      2     pageEncoding="UTF-8"%>
      3 <%
      4     //获取绝对路径路径 
      5     String path = request.getContextPath();
      6     String basePath = request.getScheme() + "://"
      7                 + request.getServerName() + ":" + request.getServerPort()
      8                 + path + "/";
      9 %> 
     10 <!DOCTYPE html>
     11 <html>
     12 <head>
     13 <base href="<%=basePath %>" />
     14 <meta charset="UTF-8">
     15 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     16 <title>用户管理-用户添加</title>
     17 <link href="resource/css/bootstrap.min.css" rel="stylesheet" />
     18 <script type="text/javascript" src="resource/js/jquery.min.js"></script>
     19 <script type="text/javascript"
     20     src="resource/js/bootstrap.min.js"></script>
     21 </head>
     22 <body>
     23     <div>
     24         <ul class="breadcrumb" style="margin: 0px;">
     25             <li>系统管理</li>
     26             <li>用户管理</li>
     27             <li>用户添加</li>
     28         </ul>
     29     </div>
     30 <form action="system/userinfoinsert" class="form-horizontal" method="post">
     31         <h5 class="page-header alert-info"
     32             style="margin: 0px; padding: 10px; margin-bottom: 10px;">基本信息</h5>
     33         <!-- 开始1 -->
     34         <div class="row">
     35             <div class="col-xs-5">
     36                 <div class="form-group ">
     37                     <label class="col-xs-3 control-label">用户学号</label>
     38                     <div class="col-xs-9 ">
     39                         <input type="text" name="userNumber" class="form-control" placeholder="请输入用户学号" />
     40                     </div>
     41                 </div>
     42             </div>
     43             <div class="col-xs-5">
     44                 <div class="form-group ">
     45                     <label class="col-xs-3 control-label">用户姓名</label>
     46                     <div class="col-xs-9 ">
     47                         <input type="text" name="userName" class="form-control" placeholder="请输入用户姓名" />
     48                     </div>
     49                 </div>
     50             </div>
     51         </div>
     52         <!--结束1 -->
     53         <!-- 开始2 -->
     54         <div class="row">
     55             <div class="col-xs-5">
     56                 <div class="form-group ">
     57                     <label class="col-xs-3 control-label">用户年龄</label>
     58                     <div class="col-xs-9 ">
     59                         <input type="text" name="userAge" class="form-control" placeholder="请输入用户年龄" />
     60                     </div>
     61                 </div>
     62             </div>
     63             <div class="col-xs-5">
     64                 <div class="form-group ">
     65                     <label class="col-xs-3 control-label">用户性别</label>
     66                     <div class="col-xs-3 ">
     67                         <select class="form-control" name="userSex">
     68                             <option>保密</option>
     69                             <option></option>
     70                             <option></option>
     71                         </select>
     72                     </div>
     73                 </div>
     74             </div>
     75 
     76         </div>
     77         <!--结束2 -->
     78 
     79 
     80         <h5 class="page-header alert-info"
     81             style="margin: 0px; padding: 10px; margin-bottom: 10px;">账号信息</h5>
     82         <!-- 开始5 -->
     83         <div class="row">
     84             <div class="col-xs-5">
     85                 <div class="form-group ">
     86                     <label class="col-xs-3 control-label">用户账号</label>
     87                     <div class="col-xs-9">
     88                         <input type="text" name="userAccount" class="form-control" placeholder="请输入用户账号" />
     89                     </div>
     90                 </div>
     91             </div>
     92             <div class="col-xs-5">
     93                 <div class="form-group ">
     94                     <label class="col-xs-3 control-label">用户密码</label>
     95                     <div class="col-xs-9 ">
     96                         <input type="text" name="userPw" class="form-control" placeholder="请输入用户密码" />
     97                     </div>
     98                 </div>
     99             </div>
    100         </div>
    101         <!--结束5 -->
    102 
    103         <div class="row">
    104             <div class="col-xs-3 col-xs-offset-4">
    105                 <input type="submit" class="btn btn-success" value="保存用户" /> <input
    106                     type="reset" class="btn btn-danger" value="重置信息" />
    107             </div>
    108 
    109         </div>
    110 
    111     </form>
    112 </body>
    113 </html>
    用户信息的插入界面

         将用户信息更改界面的原型html修改为jsp

      1 <%@ page language="java" contentType="text/html; charset=UTF-8"
      2     pageEncoding="UTF-8"%>
      3 <%
      4     //获取绝对路径路径 
      5     String path = request.getContextPath();
      6     String basePath = request.getScheme() + "://"
      7                 + request.getServerName() + ":" + request.getServerPort()
      8                 + path + "/";
      9 %> 
     10 <!DOCTYPE html>
     11 <html>
     12 <head>
     13 <base href="<%=basePath %>" />
     14 <meta charset="UTF-8">
     15 <meta name="viewport" content="width=device-width, initial-scale=1.0" />
     16 <title>用户管理-用户修改</title>
     17 <link href="resource/css/bootstrap.min.css" rel="stylesheet" />
     18 <script type="text/javascript" src="resource/js/jquery.min.js"></script>
     19 <script type="text/javascript"
     20     src="resource/js/bootstrap.min.js"></script>
     21 </head>
     22 <body>
     23     <div>
     24         <ul class="breadcrumb" style="margin: 0px;">
     25             <li>系统管理</li>
     26             <li>用户管理</li>
     27             <li>用户修改</li>
     28         </ul>
     29     </div>
     30 <form action="" class="form-horizontal">
     31         <h5 class="page-header alert-info"
     32             style="margin: 0px; padding: 10px; margin-bottom: 10px;">基本信息</h5>
     33         <!-- 开始1 -->
     34         <div class="row">
     35             <div class="col-xs-5">
     36                 <div class="form-group ">
     37                     <label class="col-xs-3 control-label">用户姓名</label>
     38                     <div class="col-xs-9 ">
     39                         <input type="text" class="form-control" placeholder="请输入用户姓名" value="高富帅" />
     40                     </div>
     41                 </div>
     42             </div>
     43             <div class="col-xs-5">
     44                 <div class="form-group ">
     45                     <label class="col-xs-3 control-label">用户年龄</label>
     46                     <div class="col-xs-9 ">
     47                         <input type="text" class="form-control" placeholder="请输入用户年龄" value="20" />
     48                     </div>
     49                 </div>
     50             </div>
     51         </div>
     52         <!--结束1 -->
     53         <!-- 开始2 -->
     54         <div class="row">
     55             <div class="col-xs-5">
     56                 <div class="form-group ">
     57                     <label class="col-xs-3 control-label">用户性别</label>
     58                     <div class="col-xs-3 ">
     59                         <select class="form-control">
     60                             <option>保密</option>
     61                             <option></option>
     62                             <option></option>
     63                         </select>
     64                     </div>
     65                 </div>
     66             </div>
     67 
     68         </div>
     69         <!--结束2 -->
     70 
     71 
     72         <h5 class="page-header alert-info"
     73             style="margin: 0px; padding: 10px; margin-bottom: 10px;">账号信息</h5>
     74         <!-- 开始5 -->
     75         <div class="row">
     76             <div class="col-xs-5">
     77                 <div class="form-group ">
     78                     <label class="col-xs-3 control-label">用户账号</label>
     79                     <div class="col-xs-9">
     80                         <input type="text" class="form-control" placeholder="请输入用户账号" value="admin123" />
     81                     </div>
     82                 </div>
     83             </div>
     84             <div class="col-xs-5">
     85                 <div class="form-group ">
     86                     <label class="col-xs-3 control-label">用户密码</label>
     87                     <div class="col-xs-9 ">
     88                         <input type="text" class="form-control" placeholder="请输入用户密码" value="123456" />
     89                     </div>
     90                 </div>
     91             </div>
     92         </div>
     93         <!--结束5 -->
     94 
     95         <div class="row">
     96             <div class="col-xs-3 col-xs-offset-4">
     97                 <input type="submit" class="btn btn-success" value="保存用户" /> <input
     98                     type="reset" class="btn btn-danger" value="重置信息" />
     99             </div>
    100 
    101         </div>
    102 
    103     </form>
    104 </body>
    105 </html>
    用户信息的更新界面

         用户信息提示信息界面的jsp

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <%
     4     //获取绝对路径路径 
     5     String path = request.getContextPath();
     6     String basePath = request.getScheme() + "://"
     7                 + request.getServerName() + ":" + request.getServerPort()
     8                 + path + "/";
     9 %> 
    10 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    11 <html>
    12 <head>
    13 <base href="<%=basePath %>" />
    14 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    15 <title>Insert title here</title>
    16 </head>
    17 <body>
    18 <script type="text/javascript">
    19     //此页面用来提示添加,修改,删除信息的成功或者失败的信息
    20     alert('${info}');//提示信息,错误or成功
    21     //跳转到user_info.jsp查询页面,后面会修改为servlet
    22     window.location="view/system/userinfo/userinfo_list.jsp";
    23 </script>
    24 </body>
    25 </html>
    用户信息的提示界面

         至此用户信息的登录界面,主页面基本设计的差不多了,接下来就开始进行开发了。


    开始基于后台逻辑代码进行开发:

      1:这里我使用的是将数据库的驱动driver,数据库连接字符串,数据库账号,密码写到db.properties配置文件中,代码如下:

    1 drivername=com.mysql.jdbc.Driver
    2 url=jdbc:mysql:///book
    3 user=root
    4 password=123456

      2:写好配置文件,接下来写utils工具类,代码如下,写好连接数据库的工具类,个人习惯测试了一下,避免连接数据库就发生错误,那就糗大了。

        顺便提一下,添加信息和更改信息我直接也封装到了这个工具类中,方便使用,减少重复代码的书写,当然对于新手,多写重复代码是一件好事,

        加强记忆和理解

      1 package com.bie.utils;
      2 
      3 import java.sql.Connection;
      4 import java.sql.DriverManager;
      5 import java.sql.PreparedStatement;
      6 import java.sql.ResultSet;
      7 import java.util.ResourceBundle;
      8 
      9 /***
     10  * 1.1:写DbUtils的工具类
     11  * :utils是工具类,方便以后调用
     12  * 在main方法测试的时候出现一个错误,
     13  * 瞄了一眼立马想到了没有添加mysql的驱动,
     14  * 所以我感觉测试还是很有必要的
     15  * @author biehongli
     16  *
     17  */
     18 public class DbUtils {
     19 
     20     private static String drivername;//数据库驱动,为了加载数据库驱动
     21     private static String url;//数据库连接字符串,只要是找到自己的数据库,需要和自己的数据库一致
     22     private static String user;//数据库账号,需要和自己的一致
     23     private static String password;//数据库密码,需要和自己的一致
     24     
     25     static{
     26         drivername=ResourceBundle.getBundle("db").getString("drivername");
     27         url=ResourceBundle.getBundle("db").getString("url");
     28         user=ResourceBundle.getBundle("db").getString("user");
     29         password=ResourceBundle.getBundle("db").getString("password");
     30     }
     31     
     32     /***
     33      * 加载数据库驱动和连接到数据库,我一般是加载和连接的时候分别输出,可以快速找到哪里出错
     34      * @return
     35      * @throws Exception
     36      */
     37     public static Connection getCon() throws Exception{
     38         Class.forName(drivername);//记载数据库驱动
     39         System.out.println("测试加载数据库驱动");
     40         //连接到数据库
     41         Connection con=DriverManager.getConnection(url, user, password);
     42         System.out.println("测试连接到数据库");
     43         return con;
     44     }
     45     
     46     /***
     47      * 这个用来判断关闭数据库的方法
     48      * @param con 关闭Connection的连接
     49      * @param ps  关闭PreparedStatement
     50      * @param rs  关闭ResultSet
     51      */
     52     public static void getClose(Connection con,PreparedStatement ps,ResultSet rs){
     53         //关闭数据库,注意关闭的顺序。养成好习惯
     54         try{
     55             if(rs!=null){
     56                 rs.close();
     57             }
     58             if(ps!=null){
     59                 ps.close();
     60             }
     61             if(con!=null){
     62                 con.close();
     63             }
     64         }catch(Exception e){
     65             e.printStackTrace();
     66         }
     67     }
     68     
     69     /***
     70      * 添加(插入)和更新(更改)可以提取公共的方法写在工具类中
     71      * 删除一般使用伪删除,这样删除就是更新(更改)操作,
     72      * 所以只有查询(查找)需要写更多的代码
     73      * @param sql 外面传来的sql语句
     74      * @param arr 外面传来的数组类型的,是用户信息封装到集合传递进来
     75      * @return 返回的是一个整形的数据类型
     76      */
     77     public static int addAndUpdate(String sql,Object[] arr){
     78         Connection con=null;
     79         PreparedStatement ps=null;
     80         try{
     81             con=DbUtils.getCon();//第一步连接数据库
     82             ps=con.prepareStatement(sql);//第二步预编译
     83             //第三步给sql语句中的参数复制
     84             for(int i=0;i<arr.length;i++){
     85                 ps.setObject(i+1, arr[i]);
     86             }
     87             //第四步执行sql并且返回。
     88             return ps.executeUpdate();
     89         }catch(Exception e){
     90             e.printStackTrace();
     91         }finally{
     92             //关闭资源,如果没有ResultSet类型的,加上null即可
     93             DbUtils.getClose(con, ps, null);
     94         }
     95         return 0;
     96     }
     97     /*public static void main(String[] args) {
     98         //我一般在写好连接数据库的工具类时先测试一下,避免连接数据库都失败,测试后可注释即可
     99         try {
    100             DbUtils.getCon();
    101             System.out.println("测试连接数据库终极版!!!");
    102         } catch (Exception e) {
    103             e.printStackTrace();
    104         }
    105     }*/
    106 }

      3:开始写实体类po层。这个实体类里面是用户信息的成员变量。

     1 package com.bie.po;
     2 /***
     3  * 1.2:写用户信息的实体类
     4  * 需要和自己设计好的数据库信息相对应。
     5  * @author biehongli
     6  *
     7  */
     8 public class UserInfo {
     9 
    10     private Integer userId;//用户编号
    11     private String userAccount;//用户账号
    12     private String userPw;//用户密码
    13     private String userNumber;//用户学号
    14     private String userName;//用户姓名
    15     private Integer userAge;//用户年龄
    16     private String  userSex;//用户性别
    17     private String userMark;//用户标识,可以使用一张表,完成管理员和用户
    18     //如果对setxxx,getxxx灰常熟练了,自动生成即可
    19     public Integer getUserId() {
    20         return userId;
    21     }
    22     public void setUserId(Integer userId) {
    23         this.userId = userId;
    24     }
    25     public String getUserAccount() {
    26         return userAccount;
    27     }
    28     public void setUserAccount(String userAccount) {
    29         this.userAccount = userAccount;
    30     }
    31     public String getUserPw() {
    32         return userPw;
    33     }
    34     public void setUserPw(String userPw) {
    35         this.userPw = userPw;
    36     }
    37     public String getUserNumber() {
    38         return userNumber;
    39     }
    40     public void setUserNumber(String userNumber) {
    41         this.userNumber = userNumber;
    42     }
    43     public String getUserName() {
    44         return userName;
    45     }
    46     public void setUserName(String userName) {
    47         this.userName = userName;
    48     }
    49     public Integer getUserAge() {
    50         return userAge;
    51     }
    52     public void setUserAge(Integer userAge) {
    53         this.userAge = userAge;
    54     }
    55     public String getUserSex() {
    56         return userSex;
    57     }
    58     public void setUserSex(String userSex) {
    59         this.userSex = userSex;
    60     }
    61     public String getUserMark() {
    62         return userMark;
    63     }
    64     public void setUserMark(String userMark) {
    65         this.userMark = userMark;
    66     }
    67     //重写toString()方法
    68     @Override
    69     public String toString() {
    70         return "UserInfo [userId=" + userId + ", userAccount=" + userAccount + ", userPw=" + userPw + ", userNumber="
    71                 + userNumber + ", userName=" + userName + ", userAge=" + userAge + ", userSex=" + userSex
    72                 + ", userMark=" + userMark + "]";
    73     }
    74     
    75     
    76 }

      4:写好实体类,接着写处理业务逻辑,这里是写的插入,所以省去了dao层,如果是查询还需要先写dao层(数据交互层),这里先写接口,然后写实现接口的类。

     1 package com.bie.system.service;
     2 
     3 import com.bie.po.UserInfo;
     4 
     5 /***
     6  * 1.3:如果没有在工具类DbUtils中封装addAndUpdate,
     7  *    那么需要现在dao层(数据访问层)写和数据库相关操作的代码
     8  *    如果封装好了,直接在service(业务逻辑层)写代码即可。
     9  * 我的习惯实现写接口再写实现接口的类。
    10  * @author biehongli
    11  *
    12  */
    13 public interface UserInfoInsertService {
    14 
    15     /***
    16      * 向数据库插入(添加)数据(用户的信息)
    17      * @param user  用户的信息
    18      * @return true表示插入成功,false表示插入失败
    19      */
    20     public boolean insertUser(UserInfo user);
    21     
    22 }

      5:写好接口,写实现接口的类,作为一个新手,最好写好service业务逻辑层进行junit测试,避免后期写一大推代码,错误多的不知道哪里错了。

     1 package com.bie.system.service.impl;
     2 
     3 import java.util.ArrayList;
     4 import java.util.List;
     5 
     6 import com.bie.po.UserInfo;
     7 import com.bie.system.service.UserInfoInsertService;
     8 import com.bie.utils.DbUtils;
     9 import com.bie.utils.MarkUtils;
    10 /***
    11  * 1.4:这是业务逻辑层的实现类,实现用户信息的接口
    12  * 
    13  * 切忌新手写好service业务逻辑层需要test测试(junit)
    14  * @author biehongli
    15  *
    16  */
    17 public class UserInfoInsertServiceImpl implements UserInfoInsertService{
    18 
    19     @Override
    20     public boolean insertUser(UserInfo user) {
    21         try{
    22             //System.out.println(user);//测试传来的UserInfo里面是否够存在用户信息
    23             if(user!=null && user.getUserAccount()!=null){
    24                 String sql="INSERT INTO user_info(user_account,user_pw,"
    25                         + "user_number,user_name,user_age,user_sex,user_mark)"
    26                         + " VALUES(?,?,?,?,?,?,?)";
    27                 List<Object> list=new ArrayList<Object>();
    28                 //可以理解位将实体类中get到的信息放到数据库中,因为set设置的信息就是为了查到数据库中
    29                 list.add(user.getUserAccount());//将设置好的账号信息保存到集合中
    30                 list.add(user.getUserPw());//将设置好的账号信息保存到集合中
    31                 list.add(user.getUserNumber());//将设置好的密码信息保存到集合中
    32                 list.add(user.getUserName());//将设置好的姓名信息保存到集合中
    33                 list.add(user.getUserAge());//将设置好的年龄信息保存到集合中
    34                 list.add(user.getUserSex());//将设置好的性别信息保存到集合中
    35                 //list.add(user.getUserMark());//将设置好的标识信息保存到集合中
    36                 //后台只可以添加管理员
    37                 user.setUserMark(MarkUtils.USER_MARK_MANAGER);
    38                 //将设置为默认的管理员添加到数据库
    39                 list.add(user.getUserMark());
    40                 
    41                 //将封装到集合list中的信息和sql语句传递到DbUtils封装好的 方法中
    42                 //这里sql转化位String语句,list转化位数组类型
    43                 int count=DbUtils.addAndUpdate(sql.toString(), list.toArray());
    44                 //System.out.println(count);//测试返回值是0还是1
    45                 if(count>0){
    46                     return true;//成功返回true
    47                 }else{
    48                     return false;//失败返回false
    49                 }
    50             }
    51         }catch(Exception e){
    52             e.printStackTrace();
    53         }
    54         return false;
    55     }
    56 
    57     
    58 }

       6:写好service,业务逻辑处理层,开始使用junit进行测试。测试结果就不粘贴了,遇到的测试错误已经在代码中注释了。

     1 package com.bie.system.service.impl;
     2 
     3 import org.junit.Test;
     4 
     5 import com.bie.po.UserInfo;
     6 import com.bie.system.service.UserInfoInsertService;
     7 
     8 /***
     9  * 1.5:测试的类
    10  * @author biehongli
    11  *
    12  */
    13 public class UserInfoInsertServiceImplTest {
    14 
    15     private UserInfoInsertService service=new UserInfoInsertServiceImpl();
    16     
    17     //测试的时候出点错,String sql="INSERT INTO user_info(user_account,user_pw,user_number,user_name,user_age,user_sex,user_mark) VALUES(?,?,?,?,?,?,?)";
    18     //插入语句写字段的时候加了''导致出错,找了一会,所以写好service业务逻辑层测试还是很重要的
    19     @Test
    20     public void insert(){
    21         UserInfo user=new UserInfo();
    22         user.setUserAccount("别先生");
    23         user.setUserPw("666666");
    24         user.setUserNumber("123456789");
    25         user.setUserName("小别同志");
    26         user.setUserAge(23);
    27         user.setUserSex("爷们");
    28         user.setUserMark("1");
    29         boolean mark=service.insertUser(user);
    30         if(mark){
    31             System.out.println("插入成功!!!");
    32         }else{
    33             System.out.println("明天考试了,今天还不复习,失败了吧!!!");
    34         }
    35     }
    36 }

      7:测试好,修改好,没啥问题开始进行servlet层写代码。这里使用了RequestBeanUtils,用法和3个jar包都在上面连接里面都有。

      需要注意的是userinfo_add.jsp的form的action路径和method="post"方法,具体的实现细节就不做多叙述了。代码写的很详细了。

     1 package com.bie.system.servlet;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletException;
     6 import javax.servlet.annotation.WebServlet;
     7 import javax.servlet.http.HttpServlet;
     8 import javax.servlet.http.HttpServletRequest;
     9 import javax.servlet.http.HttpServletResponse;
    10 
    11 import com.bie.po.UserInfo;
    12 import com.bie.system.service.UserInfoInsertService;
    13 import com.bie.system.service.impl.UserInfoInsertServiceImpl;
    14 import com.my.web.servlet.RequestBeanUtils;
    15 
    16 /***
    17  * 1.7:这里使用servlet3.0,说明一下,
    18  * 同时使用了RequestBeanUtils,这个要求表单的name属性必须和实体类UserInfo的成员变量名称一致
    19  *         使用方法如下
    20  * 注解的要求是模块名称加功能比如/system/userinfoinsert,避免后面发生错误
    21  * @author biehongli
    22  *
    23  */
    24 @WebServlet("/system/userinfoinsert")
    25 public class UserInfoInsertServlet extends HttpServlet{
    26 
    27     private static final long serialVersionUID = 1L;//序列号
    28 
    29     @Override
    30     protected void doPost(HttpServletRequest request, HttpServletResponse response) 
    31             throws ServletException, IOException {
    32         //RequestBeanUtils的使用方法,需要导入三个包。
    33         //commons-beanutils-1.8.3.jar  commons-logging-1.1.1.jar
    34         //commy-web-0.0.1.jar
    35         UserInfo user=RequestBeanUtils.requestToSimpleBean(request, UserInfo.class);
    36         System.out.println(user);//测试到这里是否出现bug
    37         //然后在servlet层调用service逻辑处理层
    38         UserInfoInsertService service=new UserInfoInsertServiceImpl();
    39         //调用service逻辑处理层的插入方法,返回布尔类型
    40         boolean mark=service.insertUser(user);
    41         //返回提示信息到页面
    42         if(mark){
    43             request.setAttribute("info", "用户信息添加成功!!!");
    44         }else{
    45             request.setAttribute("info", "用户信息添加失败!!!");
    46         }
    47         //转发到页面(重定向)user_info.jsp提示信息,成功或者失败
    48         request.getRequestDispatcher("/view/system/userinfo/user_info.jsp").forward(request, response);
    49     }
    50             
    51 }

       8:在写servlet的时候需要考虑乱码问题,这里在工具类写了公共的方法,过滤所有请求,设置字符集为utf-8。

     1 package com.bie.utils;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.Filter;
     6 import javax.servlet.FilterChain;
     7 import javax.servlet.FilterConfig;
     8 import javax.servlet.ServletException;
     9 import javax.servlet.ServletRequest;
    10 import javax.servlet.ServletResponse;
    11 import javax.servlet.annotation.WebFilter;
    12 /****
    13  * 1.8:处理乱码的过滤器
    14  * @WebFilter("/*")过滤所有的请求
    15  * @author biehongli
    16  *
    17  */
    18 @WebFilter("/*")
    19 public class UtfFilter implements Filter{
    20 
    21     @Override
    22     public void destroy() {
    23         // TODO Auto-generated method stub
    24         
    25     }
    26 
    27     @Override
    28     public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, 
    29             FilterChain filterChain)throws IOException, ServletException {
    30         //处理乱码,设置字符集为utf-8
    31         servletRequest.setCharacterEncoding("utf-8");
    32         filterChain.doFilter(servletRequest, servletResponse);
    33     }
    34 
    35     @Override
    36     public void init(FilterConfig arg0) throws ServletException {
    37         // TODO Auto-generated method stub
    38         
    39     }
    40 
    41     
    42 }

      9:最后我使用一张表完成管理员和普通用户的区别,所有有一个user_mark的字段,这里设置一下,使用0和1代表管理员和普通用户,需要注意的是这里开发的是后台,所以只可以添加管理员,所以设置固定即可。

     1 package com.bie.utils;
     2 /***
     3  * 1.9用户管理标识的工具类,用来写管理员和普通用户的标识
     4  * @author biehongli
     5  *
     6  */
     7 public class MarkUtils {
     8 
     9     //用户信息的的标识
    10     public static final String USER_MARK_MEMBER="0";//0代表普通会员
    11     public static final String USER_MARK_MANAGER="1";//1代表管理员
    12     
    13     
    14 }

      最后这里暂时还没有直接将插入的信息直接显示在页面上,下篇博客将实现此功能,

      下面演示一下实现的效果,如果想看代码结构和源码可以去上面的连接下载即可。

    提示信息如下所示:

     

    最后可以先去数据库查看测试数据是否插入成功:

     

    posted @ 2017-01-04 12:33 别先生 阅读( ...) 评论( ...) 编辑 收藏
    展开全文
  • 基于Servlet+JSP实现的图书管理系统,Web课程设计用得上,良心资源
  • jsp+mysql+servlet简略图书管理系统(含登录注册),图书的增删改查功能
  • 基于Jsp图书管理系统,实现借书还书操作,和对书籍的管理。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,807
精华内容 1,922
关键字:

jspservlet图书管理系统