基于MVC,实现简单的书籍信息管理,其中,模型 (M) 采用一般的JavaBean、视图 (V)采用JSP、控制 (C) 采用Servlet实现。另外,对于视图部分的JSP中,需要提供两种版本,即一般

来源:互联网 发布:linux的java环境变量 编辑:程序博客网 时间:2024/05/18 06:23

问题描述



实验内容

基于MVC,实现简单的书籍信息管理,其中,模型 (M) 采用一般的JavaBean、视图 (V)采用JSP、控制 (C) 采用Servlet实现。另外,对于视图部分的JSP中,需要提供两种版本,即一般的Scriplet (Java代码)和EL。

 

实验介绍

本实验将实现基于MVC实现简单的书籍信息管理功能,包括书籍信息的列表、添加、删除和修改功能;

数据库连接可以采用JDBC。需要操作的数据表book的结构为:

       bid :书籍id,int;                                       name:书名,varchar(50);

       authors :作者,varchar(30);                        publisher:出版社,varchar(30);

publishdate:出版日期,datetime;                  price:(书籍)价格,float。

视图部分的JSP代码,需要提供EL和Scriplet两个版本。

本实验可以参考第7章中的代码。MVC架构示意图如下:

环境要求

Java EE服务器:Tomcat 6.0

数据库服务器:MySQL 6.0

集成开发环境:MyEclipse 8.5

 

实验指导

步骤1:采用JavaBean实现MVC的模型(M)部分。可以尝试将与数据库连接(UTIL)、存取数据库功能(DAO)与业务数据Bean(VO)分离;

步骤2:采用JSP实现MVC的模型视图(V)部分。先参考教材第7课中的代码基于EL实现,然后翻译成对应的Scriptlet代码;

步骤3:采用Servlet实现MVC模型的(C)部分,实现对请求数据的读取,通过调用模型部分的JavaBean实现相应业务逻辑,然后产生相应输出以及页面跳转。


一、整体说明


1.MVC模型设计如图所示:




2、数据处理流程图




二、代码展示


1.booklist.jsp

说明:实现对数据库的删除,修改功能,跳转到增加书籍的页面


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>书籍列表</title><script language="javascript">//定义删除的函数function deleteConfirm() {var k=window.confirm('确认要删除吗?');//alert(k);return k;}</script>  </head>    <body>    <h1>书籍列表</h1>  <table>  <tr>  <td>书号</td>  <td>书名</td>  <td>作者</td>  <td>出版社</td>  <td>价格</td>  </tr>  <c:forEach var="book" items="${booklist}">  <tr>  <td>${book.bookid}</td>  <td>${book.title}</td>  <td>${book.author}</td>  <td>${book.publisher}</td>  <td>${book.price}</td>  <td>  <a href="book?action=delete&sid=${book.bookid}" onClick="return deleteConfirm()">删除</a>  </td>  <td>  <a href="book?action=findedit&sid=${book.bookid}">修改</a>  </td>  </tr>  </c:forEach>  </table>  <a href="book?action=findadd">添加书籍</a>  </body></html>
</pre><pre name="code" class="java">

效果如下:


2.edituser.jsp

说明:实现对书籍的添加,修改操作

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri = "http://java.sun.com/jsp/jstl/core" prefix = "c"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>        <title>编辑书本信息</title>  </head>    <body>    ${type}    <c:if test="${type==\"add\"}">添加书籍</c:if>    <c:if test="${type==\"edit\"}">修改书籍</c:if>        <form action="book?action=${type}" method="post">    <table>    <tr>    <td>书号</td>    <td>    <c:if test="${empty book}">    <input type="text" name="sid"/>    </c:if>    <c:if test="${! empty book}">    <input type="text" name="sid" value="${book.bookid}"/>    </c:if>    </td>    </tr>    <tr>    <td>书名</td>    <td>    <c:if test="${empty book}">    <input type="text" name="title"/>    </c:if>    <c:if test="${! empty book}">    <input type="text" name="title" value="${book.title}"/>    </c:if>    </td>    </tr>    <tr>    <td>作者</td>    <td>    <c:if test="${empty book}">    <input type="text" name="author"/>    </c:if>    <c:if test="${! empty book}">    <input type="text" name="author" value="${book.author}"/>    </c:if>    </td>    </tr>    <tr>    <td>出版社</td>    <td>    <c:if test="${empty book}">    <input type="text" name="publisher"/>    </c:if>    <c:if test="${! empty book}">    <input type="text" name="publisher" value="${book.publisher}"/>    </c:if>    </td>    </tr>        <tr>    <td>价格</td>    <td>    <c:if test="${empty book}">    <input type="text" name="price"/>    </c:if>    <c:if test="${! empty book}">    <input type="text" name="price" value="${book.price}"/>    </c:if>    </td>    </tr>    <tr>    <td>    <input type="submit" value="确定"/>    </td>    <td>    <input type="reset" value="重置"/>    </td>    </tr>    </table>    </form>    <a href="book?action=list">书籍列表</a>  </body></html>


效果如下:




3.BookDAO.java

说明:BookDAO.java是模型,又称之为数据模型,是应用模型中处理应用程序数据逻辑的部分。它通常封装了与应用程序的业务逻辑相关的数据以及对数据的处理方法。重要的一点是,模型与数据格式无关。在本题中,BookDAO类里封装了对数据库的增,删,查,改四种功能。在BookServlet.java里面被调用。

package dao;import java.sql.Connection;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.List;import util.DBConnection;import vo.Book;public class BookDAO {private Connection conn;private Statement stmt;private ResultSet rs;//Retrieve all studentspublic List<Book> getAllBooks() {List<Book> list = new ArrayList<Book>();String sSql = "select * from books";try {rs = executeQuery(sSql);while(rs.next()) {Book temp = new Book();temp.setBookid(rs.getString(1));temp.setTitle(rs.getString(2));temp.setAuthor(rs.getString(3));temp.setPublisher(rs.getString(4));temp.setPrice(rs.getInt(5));list.add(temp);}} catch(Exception e) {System.out.println(e.toString());} finally {close();}return list;}//Find a student by idpublic Book findBookByID(String sID) {String sSql = "select * from books where bookid = '" + sID + "'";try {rs = executeQuery(sSql);while(rs.next()) {Book temp = new Book();temp.setBookid(rs.getString(1));temp.setTitle(rs.getString(2));temp.setAuthor(rs.getString(3));temp.setPublisher(rs.getString(4));temp.setPrice(rs.getInt(5));return temp;}} catch(Exception e) {System.out.println(e.toString());} finally {close();}return null;}//Add a studentpublic void add(Book book) {String sSql = "insert into books(bookid,title,author,publisher,price) values('" + book.getBookid() + "', '" +book.getTitle() + "', '" +book.getAuthor()+ "', '"+book.getPublisher() + "', '" +book.getPrice()+"')";try {executeUpdate(sSql);} catch(Exception e) {System.out.println(e.toString());} finally {close();}}//Delete a studentpublic void delete(String sID) {String sSql = "delete from books where bookid = '" + sID + "'";try {executeUpdate(sSql);} catch(Exception e) {System.out.println(e.toString());} finally {close();}}//Edit a studentpublic void edit(Book book) {String sSql = "update books set title = '" + book.getTitle() + "', author = '" + book.getAuthor() + "', publisher = '"+ book.getPublisher()+"',price = '" + book.getPrice() +"' where bookid = '" + book.getBookid()+ "'";try {executeUpdate(sSql);} catch(Exception e) {System.out.println(e.toString());} finally {close();}}//Execute sql updatepublic int executeUpdate(String sSql) throws SQLException, ClassNotFoundException {return getStatement().executeUpdate(sSql);}//Execute sql querypublic ResultSet executeQuery(String sSql) throws SQLException, ClassNotFoundException {return getStatement().executeQuery(sSql);}//Obtain statementpublic Statement getStatement() throws SQLException, ClassNotFoundException {if(stmt == null) {stmt = DBConnection.getConnection().createStatement();}return stmt;}public void close() {if(rs != null) {try {rs.close();} catch(Exception e) {System.out.println(e.toString());}}if(stmt != null) {try {stmt.close();} catch(Exception e) {System.out.println(e.toString());}}if(conn != null) {try {conn.close();} catch(Exception e) {System.out.println(e.toString());}}}}

4.BookServlet.java

说明:BookServlet是控制器,接受用户的输入并调用模型和视图去完成用户的需求。控制器本身不输出任何东西或者做任何对数据的处理问题,它只接受请求并决定调用哪个模型构件去处理请求,然后决定用哪个视图来显示模型处理返回的数据。

package servlet;import java.io.IOException;import java.util.List;import javax.servlet.RequestDispatcher;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import vo.Book;import dao.BookDAO;public class BookServlet extends HttpServlet {private static final long serialVersionUID = 1L;public BookServlet() {super();}public void destroy() {super.destroy(); }public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response)<span style="background-color: rgb(51, 255, 255);">;//doGet()函数里面只要这一句就可以了,表示当用户使用<span style="font-family: Arial, Helvetica, sans-serif;">doGet</span>()方法请求时,采用和doPost()相同的处理方法</span><pre name="code" class="java">
}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {request.setCharacterEncoding("GB2312");//编码设置
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(0, 204, 204);">  //下面5行getParameter()函数里面的参数必须和jsp文件里面的对应属性的名称相一致</span>String bookid=request.getParameter("sid");String title=request.getParameter("title");String author=request.getParameter("author");String publisher=request.getParameter("publisher");String price=request.getParameter("price");String sAction = request.getParameter("action");System.out.println("action: " + sAction);<span style="background-color: rgb(0, 204, 204);">//控制台输出,方便调试</span>BookDAO bookDAO = new BookDAO();if(sAction.equals("list")) {List<Book> list=bookDAO.getAllBooks(); request.setAttribute("booklist", list);} else if(sAction.equals("add")) {Book book = new Book();book.setBookid(bookid);book.setTitle(title);book.setAuthor(author);book.setPublisher(publisher);int price1=Integer.parseInt(price);//设置int形式book.setPrice(price1);bookDAO.add(book);} else if(sAction.equals("edit")) {Book book = new Book();book.setBookid(bookid);book.setTitle(title);book.setAuthor(author);book.setPublisher(publisher);int price1=Integer.parseInt(price);//设置int形式book.setPrice(price1);bookDAO.edit(book);} else if(sAction.equals("findedit")) {Book book=bookDAO.findBookByID(bookid);request.setAttribute("book",book);} else if(sAction.equals("delete")) {bookDAO.delete(bookid);}String sForward;if(sAction.equals("findedit")) {request.setAttribute("type", "edit");sForward = "edituser.jsp";} else if(sAction.equals("findadd")) {request.setAttribute("type", "add");sForward = "edituser.jsp";} else if(sAction.equals("list")) {sForward = "booklist.jsp";} else {sForward = "book?action=list";}RequestDispatcher rd = request.getRequestDispatcher(sForward);rd.forward(request, response);}public void init() throws ServletException {// Put your code here}}

5.DBConnection.java

说明:连接数据库

package util;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DBConnection {public static Connection getConnection(){Connection conn=null;try {Class.forName("com.mysql.jdbc.Driver");conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql","root","root");} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return conn;}}
</pre><p><span style="font-size:18px; background-color:rgb(255,204,0)">6.Book.java</span></p><p><span style="font-family:SimHei; font-size:18px">说明:连接数据库</span></p><p></p><pre name="code" class="java">package vo;public class Book {private String bookid;private String title;private String author;private String publisher;private int price;public String getBookid() {return bookid;}public void setBookid(String bookid) {this.bookid = bookid;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public String getPublisher() {return publisher;}public void setPublisher(String publisher) {this.publisher = publisher;}public int getPrice() {return price;}public void setPrice(int price) {this.price = price;}}








0 0
原创粉丝点击