实验六 DAO 和 MVC 模式

1、实验目的:

熟悉采用 DAO 模式实现对数据库的访问方法,利用 Servlet 实现 MVC 模式,并为后续 Hibernate 框架的学习打下基础。

2、实验内容:

在实验五实现的功能中增加数据库访问功能。
1、根据系统设计建立所需的数据库、数据表。
2、确定项目的 DAO 模型,开发相应类,在该类中实现增删改查的相应操作。3、编写公共的数据库连接类 DBCon 类,在 DAO 中使用 DBCon 提供的数据库连接。
4、编写控制器类 Servlet,在其中加入对 DAO 对象的调用,并根据传递参数的不同执行不同的操作,实现数据库的增删改查操作,即能够添加图书、修改图书信息以及删除图书、查询图书。
实现界面:
在这里插入图片描述在这里插入图片描述在这里插入图片描述

代码实现:

目录:

在这里插入图片描述

jsp

add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>增加图书</title>
<script type="text/javascript">  
    function check(form) {  
        with (form) {  
            if (name.value == "") {  
                alert("用户名不能为空");  
                return false;  
            }  
        }  
    }  
</script>
</head>
<body>
<form action="add" method="post" onsubmit="check(this)">  
    <table align="center" width="450">  
        <tr>  
            <td align="center" colspan="2">  
                <h2>添加图书信息</h2>  
                <hr>  
            </td>  
        </tr>  
        <tr>  
            <td align="right">书名:</td>  
            <td><input type="text" name="name"></td>  
        </tr>  
        
         <tr>  
            <td align="right">图书价格:</td>  
            <td><input type="text" name="price"></td>  
        </tr> 
        <tr>  
            <td align="right">作者:</td>  
            <td><input type="text" name="author"></td>  
        </tr>  
        <tr>  
            <td align="right">出版社:</td>  
            <td><input type="text" name="press"></td>  
        </tr>  
         <tr>  
            <td align="right">图书数量:</td>  
            <td><input type="text" name="number"></td>  
        </tr>  
        <tr>  
            <td align="center" colspan="2">
                <input type="submit" value="添 加">  
            </td>  
        </tr>  
    </table>  
</form>  
</body>
</html>

list.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"  
    pageEncoding="utf-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<%@page import="java.util.List"%>  
<%@page import="bean.Book"%>  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>所有用户</title>  
<style type="text/css">  
td {  
    font-size: 12px;  
}  
h2 {  
    margin: 0px  
}  
</style>  
<script type="text/javascript">  
   
</script>  
</head>  
<body>  
    <h2 align="center">  
        <a href="add.jsp">添加图书</a>  
    </h2> 
    <br>
    <table align="center" width="800" border="1" height="300"  
        bordercolor="white" bgcolor="pink" cellpadding="1" cellspacing="1">  
        <tr bgcolor="white">  
            <td align="center" colspan="9">  
                <h2>所有图书信息</h2>  
            </td>  
        </tr>  
        <tr align="center" bgcolor="#e1ffc1">  
            <td><b>ID</b></td> 
            <td><b>书名</b></td>   
            <td><b>价格</b></td>  
            <td><b>作者</b></td> 
            <td><b>出版社</b></td>  
            <td><b>数量</b></td>  
            
            <td colspan="4"><b>操作</b></td>  
        </tr>  
        <%  
            // 获取用户信息集合  
            List<Book> list = (List<Book>) request.getAttribute("bookInfoList");  
            // 判断是否有数据
            if (list == null || list.size() < 1) {  
        %>
                <tr bgcolor="white"><td colspan="5" ><h4 align="center">没有数据</h4></td></tr>
        <%
            } else {  
                // 遍历用户集合中的数据  
                for (Book book : list) {  
        %>  
        <tr align="center"  bgcolor="white">  
            <td><%=book.getId()%></td>  
             <td><%=book.getName()%></td>  
            <td><%=book.getPrice()%></td>  
            <td><%=book.getAuthor()%></td> 
            <td><%=book.getPress()%></td>  
            <td><%=book.getNumber()%></td>  
            
            <td >  
               <a href="update?id=<%=book.getId()%>">修改</a> 
            </td>  
            <td>  
                <a href="delete?id=<%=book.getId()%>" onclick="return confirm('您确定删除吗')">删除</a>  
            </td>  
            
        </tr>  
        <%  
            }  
            }  
        %>  
    </table>  
</body>  
</html>  

update.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@page import="bean.Book"%> 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改图书信息页面</title>
</head>
<body>
    <div>
        <table>
            <thead><tr><td><h1>修改图书数量</h1></td></tr></thead>
            <tbody>
                <form action="update" method="post">
                <tr>
                    <td>图书ID:</td>
                    <td><input type="text" name="id" value="${book.id}"
                       readonly="readonly" /></td>
                </tr>
                 <tr>
                    <td>图书名:</td>
                    <td><input type="text" name="name" value="${book.name}"
                      /></td>
                </tr>
            <tr>
                    <td>价格:</td>
                    <td><input type="text" name="price" value="${book.price}"
                        /></td>
                </tr>
                <tr>
                    <td>作者:</td>
                    <td><input type="text" name="author" value="${book.author}"
                        /></td>
                </tr>
                <tr>
                    <td>出版社:</td>
                    <td><input type="text" name="press" value="${book.press}"
                        /></td>
                </tr>
                <tr>
                    <td>数量:</td>
                    <td><input type="text" name="number" value="${book.number}" /></td>
                </tr>
                <tr>
                    <td><input class="btn" type="submit" value="提交" /> <input
                        class="btn" type="reset" value="重置" /></td>
                </tr>
            </tbody>
            </form>
        </table>
    </div>
</body>
</html>

JAVA类:

Book.java

package bean;

public class Book {
	private Integer id;
	private String name;
	private String press;
	private String author;
	private Float price;
	private Integer number;

	public Integer getNumber() {
		return number;
	}

	public void setNumber(Integer number) {
		this.number = number;
	}

	public String getAuthor() {
		return author;
	}

	public void setAuthor(String author) {
		this.author = author;
	}

	public Float getPrice() {
		return price;
	}

	public void setPrice(Float price) {
		this.price = price;
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPress() {
		return press;
	}

	public void setPress(String press) {
		this.press = press;
	}

}

AddServlet.java

package Control;

import java.io.IOException;

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 bean.Book;
import dao.BookDao;
@WebServlet("/add")
public class AddServlet extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String name = req.getParameter("name");
        Float price = Float.valueOf(req.getParameter("price"));
        String author = req.getParameter("author");
        String press =req.getParameter("press");
        Integer number=Integer.valueOf(req.getParameter("number"));
        Book book = new Book();//创建user对象
        book.setName(name);
        book.setPrice(price);
        book.setAuthor(author);
        book.setPress(press);
        book.setNumber(number);
        
        BookDao dao = new BookDao();
        dao.addBook(book);//添加到数据库中
        req.getRequestDispatcher("list").forward(req, resp);
    }
}

DeleteServlet.java

package Control;

import java.io.IOException;

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 bean.Book;
import dao.BookDao;
@WebServlet("/delete")
public class DeleteServlet extends HttpServlet{
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       Book book=new Book();
    	String idStr = req.getParameter("id"); // 删除数据的ID,根据ID删除
        if (idStr != null && !idStr.equals("")) {
            int id = Integer.valueOf(idStr);
           BookDao dao = new BookDao();
            dao.deleteBook(id);
        }
        req.getRequestDispatcher("list").forward(req, resp);
    }
}

ListServlet.java

package Control;

import java.io.IOException;
import java.util.List;

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 bean.Book;
import dao.BookDao;

@WebServlet("/list")
//上面注释的是WebServlet3.0的使用方式,通过这样的注解,不需要配置web.xml也可运行程序
public class ListServlet extends HttpServlet {

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        BookDao dao = new BookDao();
        List<Book> list = dao.getAllBooks();
        req.setAttribute("bookInfoList", list);
        req.getRequestDispatcher("list.jsp").forward(req, resp);
        
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
    
}

UpdateServlet.java

package Control;

import java.io.IOException;

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 bean.Book;
import dao.BookDao;
@WebServlet("/update")
public class UpdateServlet extends HttpServlet {
   
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        String idStr = req.getParameter("id");
        if (idStr != null && !idStr.equals("")) {
            int id = Integer.valueOf(idStr);
            BookDao dao = new BookDao();
           Book book = dao.selectBookById(id);
            req.setAttribute("book", book);
        }
        req.getRequestDispatcher("update.jsp").forward(req, resp);
    }

   
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 
        String idStr = req.getParameter("id");
        
        if (idStr != null && !idStr.equals("")) {
            int id = Integer.valueOf(idStr);
            String name=req.getParameter("name");
            String press=req.getParameter("press");
           Float price=Float.valueOf(req.getParameter("price"));
            String author=req.getParameter("author");
            Integer number=Integer.valueOf(req.getParameter("number"));
            Book book = new Book();
            book.setNumber(number);
            book.setAuthor(author);
            book.setPrice(price);
            book.setPress(press);
            book.setName(name);
            book.setId(id);
            BookDao dao = new BookDao();
            dao.updateBook(book);
         
        }
        req.getRequestDispatcher("list").forward(req, resp);
    }
}

BookDao.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import bean.Book;

import model.DbHelper;

public class BookDao {
     public List<Book> getAllBooks(){  
            List<Book> list = new ArrayList<Book>();  
            Connection conn = DbHelper.getConnection();//连接数据库
            String sql  = "select * from book";  
            try {
                PreparedStatement pst = conn.prepareStatement(sql);
                ResultSet rst = pst.executeQuery();
                while (rst.next()) {
                	Book book = new Book();
                	book.setId(rst.getInt("id"));  
                	book.setName(rst.getString("name"));
                	book.setPrice(rst.getFloat("price"));
                	book.setAuthor(rst.getString("author"));
                	book.setPress(rst.getString("press"));  
                	book.setNumber(rst.getInt("number"));
                	
                    list.add(book);
                }
                rst.close();  
                pst.close();  
            } catch (SQLException e) {
                e.printStackTrace();  
            }
            return list;  
        }
     
        
        public boolean addBook(Book book){ 
            String sql = "INSERT INTO `book`(`name`,`price`,`author`,`press`,`number`) VALUES (?,?,?,?,?)";  
            Connection conn = DbHelper.getConnection();
            try {
                PreparedStatement pst = conn.prepareStatement(sql);
                pst.setString(1, book.getName());
                pst.setFloat(2, book.getPrice());
                pst.setString(3, book.getAuthor());
                pst.setString(4, book.getPress());
                pst.setInt(5, book.getNumber());
                int count = pst.executeUpdate();
                pst.close();
                return count>0?true:false; 
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return false;
        }
        
      
        public boolean updateBook(Book book){  
        	String sql = "UPDATE `book` SET `name`=?,`price`=?,`author`=?,`press`=?,`number`=? WHERE `id` = ?"; 
        	
        	Connection conn = DbHelper.getConnection();
            try {
                PreparedStatement pst = conn.prepareStatement(sql);

               pst.setString(1,book.getName());
               pst.setFloat(2, book.getPrice());
               pst.setString(3,book.getAuthor());
               pst.setString(4, book.getPress());
                pst.setInt(5, book.getNumber());
                pst.setInt(6, book.getId());  
                int count = pst.executeUpdate();
                pst.close(); 
                return count>0?true:false;  
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return false;
        }
        public boolean deleteBook(int id){  
            String sql = "delete from book where id = ?"; 
            Connection conn = DbHelper.getConnection();
            
            try {
                PreparedStatement pst = conn.prepareStatement(sql);
                pst.setInt(1,id);
              
                int count = pst.executeUpdate();
                pst.close();
                return count>0?true:false; 
  
                
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return false;
        }
        
     
        public Book selectBookById(int id){  
            Connection conn = DbHelper.getConnection();
            String sql  = "select * from book where id = "+id;
            Book book = null;
            try {
                PreparedStatement pst = conn.prepareStatement(sql);
                ResultSet rst = pst.executeQuery();
                while (rst.next()) {
                	book = new Book();
             	book.setId(rst.getInt("id"));
                	book.setName(rst.getString("name"));
               	book.setPrice(rst.getFloat("price"));
               	book.setAuthor(rst.getString("author"));
               	book.setPress(rst.getString("press"));
                	book.setNumber(rst.getInt("number"));
                }
                rst.close();
                pst.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            return book;  
        }
}

CharacterEncodingFilter.java

package Filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

/**
 * Servlet Filter implementation class CharacterEncodingFilter
 */
@WebFilter(
		urlPatterns= {"/*"},
		initParams= {
				@WebInitParam(name="encoding",value="utf-8")
		}
		)
public class CharacterEncodingFilter implements Filter {
protected String encoding ;
    	

    /**
     * Default constructor. 
     */
    public CharacterEncodingFilter() {
        // TODO Auto-generated constructor stub	
    	
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here
if( encoding !=null) {
	request.setCharacterEncoding(encoding);
}
		// pass the request along the filter chain
		chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
		this.encoding=fConfig.getInitParameter("encoding");
	}

}

DbHelper.java

package model;

import java.sql.Connection;
import java.sql.DriverManager;

public class DbHelper {
    private static String url = "jdbc:mysql://localhost:3308/lab6?useUnicode=true&characterEncoding=utf-8";  //数据库地址
    private static String userName = "root";  //数据库用户名
    private static String passWord = null;  //数据库密码
    private static Connection conn = null;
    
    private DbHelper(){
        
    }
    
    public static Connection getConnection(){
        if(null == conn){
            try {
                Class.forName("com.mysql.jdbc.Driver");
                conn = DriverManager.getConnection(url, userName, passWord);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return conn;
    }
    
    public static void main(String[] args) {  //测试数据库是否连通
        System.out.println(getConnection());
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只懒洋洋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值