一、实现代码
①styleView.css
@charset "UTF-8";
.addBookStyle {
border-width: 1px;
border-color: black;
border-style: outset;
font-family: 宋体;
font-size: 16px;
background-color: #99ccff;
width: 700px;
position: relative;
left: 300px;
top: 10px;
}
.viewBookStyle {
border-width: 1px;
border-color: black;
border-style: outset;
font-family: 宋体;
font-size: 16px;
line-height: 20px;
text-align: center;
background-color: #99ccff;
width: 800px;
position: relative;
left: 300px;
}
.loginStoreStyle{
border-width:1px;
border-color:#333;
border-style:solid;
height: 140px;
width: 200px;
}
②loginStore.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>My JSP 'loginStore.jsp' starting page</title>
<link rel="stylesheet" type="text/css" href="styleView.css" />
<script type="text/javascript">
function changeTextStyle() {
var mytext = document.getElementById("textstyle");
mytext.style.borderColor = 'black';
mytext.style.borderStyle = 'solid';
mytext.style.borderWidth = '0 0 1px 0';
var mypassword = document.getElementById("passwordstyle");
mypassword.style.borderColor = 'black';
mypassword.style.borderStyle = 'solid';
mypassword.style.borderWidth = '0 0 1px 0';
}
</script>
</head>
<body οnlοad="changeTextStyle()">
<font color='red'><c:out value="${sessionScope.message }"></c:out></font>
<div class="loginStoreStyle">
<form action="/day_042403/CheckUser" method="post">
<table border="0" align="left" id="tableUser" width="200px"
height="140px">
<tr height="25%">
<td align="right" width="60px"> 用户:</td>
<td align="left"><input type="text" id="textstyle" size="16"
maxlength="16" name="userName" /></td>
</tr>
<tr height="25%">
<td align="right">密码:</td>
<td align="left"><input type="password" id="passwordstyle"
size="16" maxlength="16" name="userPass" /></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登录" />
<input type="reset" value="取消"/>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
③CheckUser.java
package cn.edu.imut.ctrl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.edu.imut.beans.Users;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.dao.factory.BookDaoFactory;
public class CheckUser extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
BookDao bookDao = BookDaoFactory.getBookDao();
String userName = request.getParameter("userName");
String userPass = request.getParameter("userPass");
Users user = bookDao.checkUsers(userName, userPass);
if(user!=null){
session.setAttribute("message", userName+",欢迎你!");
response.sendRedirect("bookstore/addBook.jsp");
}else{
session.setAttribute("message", "登录失败");
response.sendRedirect("bookstore/loginStore.jsp");
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
④addBook.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="styleView.css" />
<script type="text/javascript">
function checkBookName() {
var val = document.bookForm.bookName.value;
var reguser = /\w+/;
document.getElementById("bookError").innerHTML = "";
if (val.length == 0) {
document.getElementById("bookError").innerHTML = "<font color='red'>书名不能为空</font>";
} else if (val.length < 8 || val.length > 10) {
document.getElementById("bookError").innerHTML = "<font color='red'>书名8-10个字符</font>";
} else if (!reguser.test(val))
document.getElementById("bookError").innerHTML = "<font color='red'>书名只能为字母数字下划线</font>";
}
function checkBookPublish() {
document.getElementById("bookError").innerHTML = "";
var val = document.bookForm.bookPublish.value;
if (val.length == 0) {
document.getElementById("bookError").innerHTML = "<font color='red'>出版社不能为空</font>";
} else if (val.length < 7|| val.length > 10)
document.getElementById("bookError").innerHTML = "<font color='red'>出版社7-10个字符</font>";
}
</script>
<meta http-equiv="description" content="This is my page">
</head>
<body>
<font color='red'><c:out value="${sessionScope.message }"></c:out></font>
<div class="addBookStyle">
<form action="/day_042403/CtrlServlet" method="post" name="bookForm">
<table border="0" align="center" cellpadding="10">
<tr>
<td id="bookError" colspan="2"></td>
</tr>
<tr>
<td align="left">选择分类:</td>
<td align="left"><select name="bookClasses">
<option selected="selected">请选择</option>
<option>Computer</option>
<option>DataBase</option>
</select></td>
</tr>
<tr>
<td align="left">图书名称:</td>
<td align="left"><input type="text" name="bookName"
οnblur=checkBookName() />
</td>
</tr>
<tr>
<td align="left">作者:</td>
<td align="left"><input type="text" name="bookAuthor" />
</td>
</tr>
<tr>
<td align="left">出版社:</td>
<td align="left"><input type="text" name="bookPublish"
οnblur=checkBookPublish() />
</td>
</tr>
<tr>
<td align="left">页数:</td>
<td align="left"><input type="text" name="bookPage" />
</td>
</tr>
<tr>
<td align="left">版本:</td>
<td align="left"><input type="text" name="bookEdit" />
</td>
</tr>
<tr>
<td align="left">图片:</td>
<td align="left"><input type="file" value="上传图片">
</td>
</tr>
<tr>
<td align="left">价格:</td>
<td align="left">市场价:<input type="text" name="bookPrice" />
元,会员价:<input type="text" name="bookNewPrice" />元</td>
</tr>
<tr>
<td align="left">推荐度:</td>
<td><select name="bookDegree">
<option selected="selected">请选择:</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select></td>
</tr>
<tr>
<td align="left">评论:</td>
<td align="left" rowspan="2"><textarea rows="3" cols="50"
name="bookComment"></textarea></td>
</tr>
<tr>
<td align="left"></td>
</tr>
<tr>
<td align="left"></td>
</tr>
<tr align="center">
<td colspan="2"><input type="submit" value="更新"></td>
</tr>
</table>
</form>
</div>
</body>
</html>
⑤CtrlServlet.java
package cn.edu.imut.ctrl;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.edu.imut.beans.Book;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.dao.factory.BookDaoFactory;
public class CtrlServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
BookDao bookDao = BookDaoFactory.getBookDao();
String bookName = request.getParameter("bookName");
String bookPublish = request.getParameter("bookPublish");
response.getWriter().println(bookName + bookPublish);
if (bookName == "" || bookPublish == "") {
session.setAttribute("message", "添加失败,请重新添加!");
response.sendRedirect("bookstore/addBook.jsp");
} else {
SimpleDateFormat formater = new SimpleDateFormat("yyyy/MM/dd k:m:s");
String bookNewTime = formater.format(new Date());
Book book = new Book();
book.setBookName(bookName);
book.setBookPublish(bookPublish);
book.setBookNewTime(bookNewTime);
Boolean flag = bookDao.checkBook(bookName);
if (flag == true) {
bookDao.updateBook(book);
session.setAttribute("message", bookName + "已修改!");
} else {
bookDao.createBook(book);
session.setAttribute("message", bookName + "已添加!");
}
Integer pageCount = bookDao.pageBook();
session.setAttribute("pageCount", pageCount);
ArrayList<Book> array = bookDao.queryAll(1);
session.setAttribute("array", array);
response.sendRedirect("bookstore/viewBook.jsp");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
⑥viewBook.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.util.*" import="cn.edu.imut.beans.Book"
import="cn.edu.imut.beans.Page" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" type="text/css" href="styleView.css" />
</head>
<body>
<div class="viewBookStyle">
<font color="red"><c:out value="${sessionScope.message }"></c:out></font>
<form action="/day_042403/QueryServlet" method="post">
<table border="1" bordercolor="black" align="center" width="500px"
cellspacing="0" cellpadding="10">
<tr align="right">
<td colspan="4">
书名:<input type="text" name="queryBook" />
<input type="submit" value="查询">
</td>
</tr><tr>
<th width="150">名称</th>
<th width="150">出版社</th>
<th width="150">时间</th>
<th width="150">操作</th>
</tr>
<c:forEach items="${sessionScope.array }" var="book">
<tr>
<td><c:out value="${book.bookName }"></c:out></td>
<td><c:out value="${book.bookPublish }"></c:out></td>
<td><c:out value="${book.bookNewTime }"></c:out></td>
<td><a
href="/day_042403/DeleteServlet?bookName=${book.bookName }">删除</a>|<a
href="/day_042403/bookstore/addBook.jsp">修改</a></td>
</tr>
</c:forEach>
</table>
</form>
<%
Integer pageCount = (Integer) session.getAttribute("pageCount");
for (int i = 1; i <= pageCount; i++) {
out.println("<a href='/day_042403/PageServlet?pageNow=" + i + "'><" + i + "></a>");
}
%>
</div>
</body>
</html>
⑦PageServlet.java
package cn.edu.imut.ctrl;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.edu.imut.beans.Book;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.dao.factory.BookDaoFactory;
public class PageServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
BookDao bookDao = BookDaoFactory.getBookDao();
String spageNow = request.getParameter("pageNow");
Integer pageNow = Integer.parseInt(spageNow);
ArrayList<Book> array = bookDao.queryAll(pageNow);
session.setAttribute("array", array);
response.sendRedirect("bookstore/viewBook.jsp");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
⑧DeleteServlet.java
package cn.edu.imut.ctrl;
import java.io.IOException;
import java.util.ArrayList;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import cn.edu.imut.beans.Book;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.dao.factory.BookDaoFactory;
public class DeleteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpSession session = request.getSession();
BookDao bookDao = BookDaoFactory.getBookDao();
String bookName = request.getParameter("bookName");
bookDao.deleteBook(bookName);
Integer pageCount = bookDao.pageBook();
session.setAttribute("pageCount", pageCount);
ArrayList<Book> array = bookDao.queryAll(1);
session.setAttribute("array", array);
session.setAttribute("message", bookName+"已删除!");
response.sendRedirect("bookstore/viewBook.jsp");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
}
⑨QueryServlet.java
package cn.edu.imut.ctrl;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.edu.imut.beans.Book;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.dao.factory.BookDaoFactory;
public class QueryServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
String bookName = request.getParameter("queryBook");
BookDao bookDao = BookDaoFactory.getBookDao();
Book book = bookDao.read(bookName);
response.getWriter().println(book.toString());
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
⑩DBUtils.java
package cn.edu.imut.utils;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DBUtils {
public static String DBDRIVER = "com.mysql.jdbc.Driver";
public static String DBURL = "jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=utf-8&useSSL=false";
public static String DBNAME = "root";
public static String DBPASS = "123";
static {
try {
Class.forName(DBDRIVER);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() {
try {
return DriverManager.getConnection(DBURL, DBNAME, DBPASS);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public static void getClose(Connection conn, PreparedStatement psmt, ResultSet rs) {
try {
if (rs != null)
rs.close();
if (psmt != null)
psmt.close();
if (conn != null)
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
⑪BookDao.java
package cn.edu.imut.dao;
import java.util.ArrayList;
import cn.edu.imut.beans.Book;
import cn.edu.imut.beans.Users;
public interface BookDao {
/**
* 查询每一页图书信息
* @param pageNow 当前页
* @return ArrayList<Book>
*/
public ArrayList<Book> queryAll(Integer pageNow);
/**
* 增加一条图书信息
* @param book
*/
public void createBook(Book book);
/**
* 查询图书信息
* @param bookName 书名
* @return Book
*/
public Book read(String bookName);
/**
* 修改图书信息
* @param book
*/
public void updateBook(Book book);
/**
* 删除图书信息
* @param bookName 书名
*/
public void deleteBook(String bookName);
/**
* 查询有多少条图书信息(rowCount)
* @return 总页数(pageCount)
*/
public Integer pageBook();
public Users checkUsers(String userName, String userPass);
/**
* 判断图书是否存在
* @param bookName 书名
* @return flag
*/
public boolean checkBook(String bookName);
}
⑫BookDaoImpl.java
package cn.edu.imut.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import cn.edu.imut.beans.Book;
import cn.edu.imut.beans.Users;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.utils.DBUtils;
public class BookDaoImpl implements BookDao {
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
public ArrayList<Book> queryAll(Integer pageNow) {
ArrayList<Book> array = new ArrayList<Book>();
String sql = "select * from Book limit ?,5";
conn = DBUtils.getConnection();
try {
psmt = conn.prepareStatement(sql);
psmt.setInt(1, (pageNow - 1) * 5);
rs = psmt.executeQuery();
while (rs.next()) {
String bookName = rs.getString(1);
String bookPublish = rs.getString(2);
String bookNewTime = rs.getString(3);
Book book = new Book(bookName, bookPublish, bookNewTime);
array.add(book);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
return array;
}
public void createBook(Book book) {
conn = DBUtils.getConnection();
String sql = "insert into Book values(?,?,?)";
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, book.getBookName());
psmt.setString(2, book.getBookPublish());
psmt.setString(3, book.getBookNewTime());
psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
}
public Book read(String bookName) {
Book book = null;
conn = DBUtils.getConnection();
String sql = "select * from Book where bookName=?";
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, bookName);
rs = psmt.executeQuery();
while (rs.next()) {
book = new Book(rs.getString(1), rs.getString(2), rs.getString(3));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
return book;
}
public void updateBook(Book book) {
conn = DBUtils.getConnection();
String sql = "update Book set bookPublish=?,bookNewTime=? where bookName=?";
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, book.getBookPublish());
psmt.setString(2, book.getBookNewTime());
psmt.setString(3, book.getBookName());
psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
}
public void deleteBook(String bookName) {
String sql = "delete from Book where bookName = ?";
conn = DBUtils.getConnection();
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, bookName);
psmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
}
public Integer pageBook() {
conn = DBUtils.getConnection();
String sql = "select count(*) from Book";
Integer pageCount = 1;
try {
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
rs.next();
Integer rowCount = rs.getInt(1);
pageCount = rowCount % 5 == 0 ? rowCount / 5 : rowCount / 5 + 1;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
return pageCount;
}
public Users checkUsers(String userName, String userPass) {
Users user = null;
conn = DBUtils.getConnection();
String sql = "select * from Users where userName=? and userPass=?";
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, userName);
psmt.setString(2, userPass);
rs = psmt.executeQuery();
while (rs.next()) {
user = new Users(rs.getString(1), rs.getString(2));
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
return user;
}
public boolean checkBook(String bookName) {
boolean flag = false;
conn = DBUtils.getConnection();
String sql = "select * from Book where bookName=?";
try {
psmt = conn.prepareStatement(sql);
psmt.setString(1, bookName);
rs = psmt.executeQuery();
if (rs.next()) {
flag = true;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
DBUtils.getClose(conn, psmt, rs);
}
return flag;
}
}
⑬BookDaoFactory.java
package cn.edu.imut.dao.factory;
import cn.edu.imut.dao.BookDao;
import cn.edu.imut.dao.impl.BookDaoImpl;
public class BookDaoFactory {
public static BookDao getBookDao() {
return new BookDaoImpl();
}
}
⑭Book.java
package cn.edu.imut.beans;
public class Book {
private String bookName;
private String bookPublish;
private String bookNewTime;
public Book() {
super();
// TODO Auto-generated constructor stub
}
public Book(String bookName, String bookPublish, String bookNewTime) {
super();
this.bookName = bookName;
this.bookPublish = bookPublish;
this.bookNewTime = bookNewTime;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public String getBookPublish() {
return bookPublish;
}
public void setBookPublish(String bookPublish) {
this.bookPublish = bookPublish;
}
public String getBookNewTime() {
return bookNewTime;
}
public void setBookNewTime(String bookNewTime) {
this.bookNewTime = bookNewTime;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("书名:"+bookName+"<br><br>");
sb.append("出版社:"+bookPublish+"<br><br>");
sb.append("更新时间:"+bookNewTime+"<br><br>");
return sb.toString();
}
}
⑮Users.java
package cn.edu.imut.beans;
public class Users {
private String userName;
private String userPass;
public Users() {
super();
// TODO Auto-generated constructor stub
}
public Users(String userName, String userPass) {
super();
this.userName = userName;
this.userPass = userPass;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPass() {
return userPass;
}
public void setUserPass(String userPass) {
this.userPass = userPass;
}
}
二、实现功能
- 简单分页.
- crud.
- js表单验证.
- MVC设计模式.
三、实现结果
登录界面
添加和修改图书界面
表单验证提示
修改界面
删除界面
查询界面
项目截图
四、优点与不足
- 代码很符合MVC规范.
- 逻辑不是很有条理.
- 只有三个界面,简洁性、健壮性很好.
- 使用了五个servlet控制器,代码很冗余.
五、源码
链接:https://pan.baidu.com/s/1pkQXZTosbgZJZ5DyNle5aw 密码:asp2