?
1. 創(chuàng)建數(shù)據(jù)庫(kù)及數(shù)據(jù)表
#創(chuàng)建數(shù)據(jù)庫(kù)jdbc
CREATE DATABASE jdbc ;
#打開數(shù)據(jù)庫(kù)
USE jdbc ;
#創(chuàng)建用戶表 t_user
CREATE TABLE t_user(
id int PRIMARY KEY auto_increment,
username VARCHAR(20),
password VARCHAR(20),
sex VARCHAR(2),
hobby VARCHAR(20),
city VARCHAR(20),
signature VARCHAR(200)
);
#創(chuàng)建圖書表 t_book
CREATE TABLE t_book(
id int PRIMARY KEY auto_increment,
bookname VARCHAR(20),
price FLOAT ,
author VARCHAR(20)
);
#在兩個(gè)表中插入分別插入一條數(shù)據(jù)
INSERT INTO t_user VALUES(NULL,'admin','123','男','足球','濟(jì)南','我是admin');
INSERT INTO t_book VALUES(NULL,'JavaWeb教程','50','李四');
2.在idea中創(chuàng)建一個(gè)JavaWeb項(xiàng)目
- 在WEB-INF下創(chuàng)建一個(gè)lib包,并導(dǎo)入以下jar包:(導(dǎo)入后,鼠標(biāo)右鍵選中l(wèi)ib文件夾,單擊“add as lib...”
?注:使用Lombok包時(shí),除了需要導(dǎo)入jar包還需要從idea中下載Lombok插件
- file -- setting -- plugins -- 搜Lombok -- 勾選上 -- Apply -- OK
- file -- setting -- Build Exec.....? -- Compiler -- Annotation Processors -- 勾選Enable annotation processing
3.在web下創(chuàng)建4個(gè)jsp和1和html
- 4個(gè)jsp(addBook.jsp 、 bookList.jsp 、 index.jsp 、 updateBook.jsp)
- 1個(gè)html(register.html)
? ? ? ? ?1. 創(chuàng)建addBook.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加圖書</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" >
<!-- jQuery文件。務(wù)必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- bootstrap.bundle.min.js 用于彈窗、提示、下拉菜單,包含了 popper.min.js -->
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<h2 class="text-center my-4">新增圖書</h2>
<div class="row">
<p class="col-md-5 offset-md-7">歡迎您,${loginUser.username}</p>
<div class="col-md-4 offset-md-4">
<form action="addbookservlet" method="post" >
<table class="table table-bordered">
<tr>
<td>圖書名稱:</td>
<td><input type="text" class="form-control" name="bookname" placeholder="請(qǐng)輸入圖書名稱" id="bookname"></td>
</tr>
<tr>
<td>圖書價(jià)格:</td>
<td><input type="text" class="form-control" name="price" placeholder="請(qǐng)輸入圖書價(jià)格" id="price"></td>
</tr>
<tr>
<td>圖書作者:</td>
<td><input type="text" class="form-control" name="author" placeholder="請(qǐng)輸入圖書作者" id="author"></td>
</tr>
<tr>
<td colspan="2"><button type="submit" class="btn btn-primary">提交</button></td>
</tr>
</table>
</form>
</div>
</div>
</div>
</body>
</html>
? ? ? ? ? ? ? ? 2. 創(chuàng)建bookList.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<html>
<head>
<title>圖書列表</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" >
<!-- jQuery文件。務(wù)必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- bootstrap.bundle.min.js 用于彈窗、提示、下拉菜單,包含了 popper.min.js -->
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<h2 class="text-center my-4">圖書列表</h2>
<div class="row">
<div class="col-md-6 offset-md-3">
<p class="col-md-3 offset-md-9">歡迎您,${loginUser.username}</p>
<a class="btn btn-primary my-2" href="addBook.jsp">新增圖書</a>
<table class="table table-hover">
<thead>
<tr>
<th>編號(hào)</th>
<th>圖書名稱</th>
<th>價(jià)格</th>
<th>作者</th>
<th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach var="book" items="${list}">
<tr>
<td>${book.id}</td>
<td>${book.bookname}</td>
<td>${book.price}</td>
<td>${book.author}</td>
<td>
<a href="getBookInfoById?id=${book.id}" class="btn btn-primary">修改</a>
<button class="btn btn-danger" data-toggle="modal" data-target="#myModal" onclick="transId(${book.id})">刪除</button>
</td>
</tr>
</c:forEach>
</tbody>
</table>
</div>
</div>
<!-- 模態(tài)框 -->
<div class="modal fade" id="myModal">
<div class="modal-dialog">
<div class="modal-content">
<!-- 模態(tài)框頭部 -->
<div class="modal-header">
<h4 class="modal-title">提示</h4>
<button type="button" class="close" data-dismiss="modal">×</button>
</div>
<input type="hidden" id="bookid" value="">
<!-- 模態(tài)框主體 -->
<div class="modal-body">
確認(rèn)刪除該信息嗎?
</div>
<!-- 模態(tài)框底部 -->
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal" onclick="doDelete()">確定</button>
<button type="button" class="btn btn-secondary" data-dismiss="modal">關(guān)閉</button>
</div>
</div>
</div>
</div>
</div>
<script>
function transId(id){
//jQuery -- $("#bookid") 從頁(yè)面上尋找id屬性為bookid的元素
$("#bookid").val(id); //jQuery寫法
// document.getElementById("bookid").value = id ; //javaScript寫法
}
function doDelete(){
window.location = "delBook?id="+ $("#bookid").val(); //jQuery寫法
// window.location = "delBook?id="+document.getElementById("bookid").value ; //javaScript寫法
}
</script>
</body>
</html>
? ? ? ? ? ? ? ? 3. 創(chuàng)建index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<title>登錄</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" >
<!-- jQuery文件。務(wù)必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- bootstrap.bundle.min.js 用于彈窗、提示、下拉菜單,包含了 popper.min.js -->
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<h2 class="text-center">登錄</h2>
<div class="row">
<div class="col-md-4 offset-md-4">
<!-- 菜鳥教程https://www.runoob.com -- 學(xué)習(xí)Bootstrap4 -->
<c:if test="${!empty errmsg}">
<div class="alert alert-danger alert-dismissible">
<button type="button" class="close" data-dismiss="alert">×</button>
<strong>錯(cuò)誤!</strong> ${errmsg}
</div>
</c:if>
<form action="loginservlet" method="post">
<div class="form-group">
<label for="username">賬號(hào):</label>
<input type="text" class="form-control" id="username" name="username" placeholder="請(qǐng)輸入用戶名" value="${cookie.username.value}">
</div>
<div class="form-group">
<label for="password">密碼:</label>
<input type="password" class="form-control" id="password" name="password" placeholder="請(qǐng)輸入密碼" value="${cookie.password.value}">
</div>
<div class="form-check">
<label class="form-check-label center-block">
<input class="form-check-input" type="checkbox" name="remeber" ${(empty cookie.username)?"":"checked"} > 記住密碼
</label>
</div>
<button type="submit" class="btn btn-primary mt-4 mx-auto">登錄</button>
<a href="register.html" style=" display: inline-block;margin-right: 10px; width: 64px; height: 40px; float: right; margin-top: 36px;">免費(fèi)注冊(cè)</a>
</form>
</div>
</div>
<div class="text-center text-info">
Tips:賬號(hào):admin 密碼:123
</div>
</div>
</form>
</body>
</html>
? ? ? ? ? ? ? ? 4. 創(chuàng)建updateBook.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>修改圖書</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" >
<!-- jQuery文件。務(wù)必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- bootstrap.bundle.min.js 用于彈窗、提示、下拉菜單,包含了 popper.min.js -->
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<h2 class="text-center my-4">修改圖書</h2>
<div class="row">
<p class="col-md-5 offset-md-7">歡迎您,${loginUser.username}</p>
<div class="col-md-4 offset-md-4">
<form action="uptBook" method="post">
<input type="hidden" name="id" value="${book.id}">
<table class="table table-bordered">
<tr>
<td>圖書名稱:</td>
<td><input type="text" class="form-control" name="bookname" placeholder="請(qǐng)輸入圖書名稱" id="bookname"
value="${book.bookname}"></td>
</tr>
<tr>
<td>圖書價(jià)格:</td>
<td><input type="text" class="form-control" name="price" placeholder="請(qǐng)輸入圖書價(jià)格" id="price"
value="${book.price}"></td>
</tr>
<tr>
<td>圖書作者:</td>
<td><input type="text" class="form-control" name="author" placeholder="請(qǐng)輸入圖書作者" id="author"
value="${book.author}"></td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn btn-primary">提交</button>
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
</body>
</html>
? ? ? ? ? ? ? ? 5. 創(chuàng)建register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注冊(cè)</title>
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- 新 Bootstrap4 核心 CSS 文件 -->
<link rel="stylesheet" >
<!-- jQuery文件。務(wù)必在bootstrap.min.js 之前引入 -->
<script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>
<!-- bootstrap.bundle.min.js 用于彈窗、提示、下拉菜單,包含了 popper.min.js -->
<script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>
<!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->
<script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container-fluid">
<h2 class="text-center my-4">注冊(cè)賬號(hào)</h2>
<div class="row">
<div class="col-md-4 offset-md-4">
<form action="registerservlet" method="post">
<table class="table table-bordered">
<tr>
<td>賬號(hào):</td>
<td><input type="text" class="form-control" name="username" placeholder="請(qǐng)輸入賬號(hào)" id="username">
</td>
</tr>
<tr>
<td>密碼:</td>
<td><input type="password" class="form-control" name="password" placeholder="請(qǐng)輸入密碼"
id="password"></td>
</tr>
<tr>
<td>性別:</td>
<td>
<label class="form-inline">
<label><input type="radio" class="form-control" name="sex" value="男">男</label><br>
<label><input type="radio" class="form-control" name="sex" value="女">女</label>
</label>
</td>
</tr>
<tr>
<td>愛好:</td>
<td>
<label class="form-inline">
<label class="form-check-label"><input type="checkbox" class="form-control" name="hobby"
value="足球">足球</label>
<label class="form-check-label"><input type="checkbox" class="form-control" name="hobby"
value="籃球">籃球</label>
<label class="form-check-label"><input type="checkbox" class="form-control" name="hobby"
value="乒乓球">乒乓球</label>
<label class="form-check-label"><input type="checkbox" class="form-control" name="hobby"
value="唱歌">唱歌</label>
</label>
</td>
</tr>
<tr>
<td>所在城市:</td>
<td>
<select name="city">
<option value="濟(jì)南">濟(jì)南</option>
<option value="青島">青島</option>
<option value="濟(jì)寧">濟(jì)寧</option>
<option value="臨沂">臨沂</option>
<option value="泰安">泰安</option>
</select>
</td>
</tr>
<tr>
<td>個(gè)性簽名:</td>
<td>
<textarea name="signature"></textarea>
</td>
</tr>
<tr>
<td colspan="2">
<button type="submit" class="btn btn-primary">提交</button>
</td>
</tr>
</table>
</form>
</div>
</div>
</div>
</body>
</html>
4.在src下創(chuàng)建4個(gè)文件夾
- 創(chuàng)建controller文件夾? --放servlet文件
- 創(chuàng)建dao文件夾? --放interface接口? ------在dao下創(chuàng)建文件夾impl? --放實(shí)現(xiàn)接口的方法
- 創(chuàng)建enity文件夾? --放對(duì)象類
- 創(chuàng)建util文件夾? --放定義的方法(例如:連接數(shù)據(jù)庫(kù)的方法)
- 直接創(chuàng)建一個(gè)Test的Java類? --用于在控制臺(tái)測(cè)試
? ? ? ? ? ? ? ? 1. 創(chuàng)建controller文件夾,并創(chuàng)建以下servlet
? ? ? ? 1.創(chuàng)建 addBookServlet
import com.individual.dao.BookDao;
import com.individual.dao.impl.BookDaoImpl;
import com.individual.enity.Book;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet(name = "AddBookServlet", value = "/addbookservlet")
public class AddBookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修改編碼
request.setCharacterEncoding("UTF-8");
//獲取表單數(shù)據(jù)
Book book = new Book();
Map<String, String[]> map = request.getParameterMap();
try {
BeanUtils.populate(book,map);
//調(diào)用Dao中添加圖書的方法
BookDao bookDao = new BookDaoImpl();
int row = bookDao.addBook(book);
if (row != 0){
//跳轉(zhuǎn)到圖書列表頁(yè)
response.sendRedirect("querybookservlet");
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
? ? ? ? 2.創(chuàng)建 LoginServler
import com.individual.dao.UserDao;
import com.individual.dao.impl.UserDaoImpl;
import com.individual.enity.User;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "LoginServlet", value = "/loginservlet")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修改編碼
request.setCharacterEncoding("UTF-8");
//接收表單傳遞的參數(shù)
String username = request.getParameter("username");
String password = request.getParameter("password");
//登陸界面的記住密碼
String remeber = request.getParameter("remeber");
//構(gòu)建成一個(gè)User的對(duì)象
User user = new User();
user.setUsername(username);
user.setPassword(password);
//調(diào)用Dao的登陸方法,驗(yàn)證能否登錄
UserDao userDao = new UserDaoImpl() ;
User loginUser = userDao.login(user);
if (loginUser == null){
//登陸失敗
request.setAttribute("errmsg","賬號(hào)或密碼錯(cuò)誤");
request.getRequestDispatcher("index.jsp").forward(request,response);
}else {
//登陸成功
if (remeber != null){
//記住密碼 -- 寫Cookie
//賬號(hào)
Cookie cookie_username = new Cookie("username", username);
cookie_username.setMaxAge(60*5);
response.addCookie(cookie_username);
//密碼
Cookie cookie_password = new Cookie("password", password);
cookie_password.setMaxAge(60*5);
response.addCookie(cookie_password);
}else {
//刪除密碼 -- 刪Cookie
Cookie[] cookies = request.getCookies();
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username") || cookie.getName().equals("password")){
cookie.setMaxAge(0);
response.addCookie(cookie);
}
}
}
//創(chuàng)建session對(duì)象,保存用戶的信息
HttpSession session = request.getSession();
session.setAttribute("loginUser",loginUser); //存入數(shù)據(jù)
response.sendRedirect("querybookservlet");
}
}
}
? ? ? ? 3.創(chuàng)建 QueryBookServlet
import com.individual.dao.BookDao;
import com.individual.dao.impl.BookDaoImpl;
import com.individual.enity.Book;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;
@WebServlet(name = "QueryBookServlet", value = "/querybookservlet")
public class QueryBookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//查詢所有圖書信息
BookDao bookDao = new BookDaoImpl();
List<Book> allBooks = bookDao.getAllBooks();
//轉(zhuǎn)發(fā)到bookList.jsp 顯示
request.setAttribute("list",allBooks);
request.getRequestDispatcher("bookList.jsp").forward(request,response);
}
}
? ? ? ? 4.創(chuàng)建 RegisterServlet
import com.individual.dao.UserDao;
import com.individual.dao.impl.UserDaoImpl;
import com.individual.enity.User;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet(name = "RegisterServlet", value = "/registerservlet")
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修改編碼
request.setCharacterEncoding("UTF-8");
//獲取表單元素(方式1:)
String username = request.getParameter("username");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
//多選框 -- 不同
String[] hobbies = request.getParameterValues("hobby");
String hobbyStr = "" ;
for (String hobby : hobbies) {
hobbyStr += hobby + " " ;
}
String city = request.getParameter("city");
String signature = request.getParameter("signature");
//封裝成User對(duì)象
User user = new User(username, password, sex, hobbyStr, city, signature);
/*
//獲取表單元素(方式2:BeanUtil (jar包:commons-logging-1.2.jar commons-dbutils-1.7.jar))
//封裝成User對(duì)象
User user = new User();
Map<String, String[]> map = request.getParameterMap(); //多個(gè)單選處理封裝
//多選框需要單獨(dú)處理
String[] hobbies = request.getParameterValues("hobby");
String hobbyStr = "" ;
for (String hobby : hobbies) {
hobbyStr += hobby + " " ;
}
try {
BeanUtils.populate(user,map);
user.setHobby(hobbyStr); //封裝進(jìn)多個(gè)愛好選項(xiàng)
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
*/
//調(diào)用Dao中的注冊(cè)方法
UserDao userDao = new UserDaoImpl();
int row = userDao.register(user);
//跳轉(zhuǎn)到登陸界面
if (row != 0 ){
response.sendRedirect("index.jsp");
}else {
response.sendRedirect("register.html");
}
}
}
?????????5. 創(chuàng)建 GetBookInfoByIdServlet
import com.individual.dao.BookDao;
import com.individual.dao.impl.BookDaoImpl;
import com.individual.enity.Book;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "GetBookInfoByIdServlet", value = "/getBookInfoById")
public class GetBookInfoByIdServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修改編碼
request.setCharacterEncoding("UTF-8");
//獲取圖書的id
int id = Integer.parseInt(request.getParameter("id"));
//根據(jù)圖書的id,查詢圖書的信息
BookDao bookDao = new BookDaoImpl();
Book book = bookDao.getBookById(id);
//跳轉(zhuǎn)到圖書修改頁(yè)面
request.setAttribute("book",book);
request.getRequestDispatcher("updateBook.jsp").forward(request,response);
}
}
? ? ? ? 6. 創(chuàng)建?UpateBookServlet
import com.individual.dao.BookDao;
import com.individual.dao.impl.BookDaoImpl;
import com.individual.enity.Book;
import org.apache.commons.beanutils.BeanUtils;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
@WebServlet(name = "UpateBookServlet", value = "/uptBook")
public class UpateBookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//修改編碼
request.setCharacterEncoding("UTF-8");
//獲取頁(yè)面上的圖書信息(圖書信息修改后的)
Map<String, String[]> map = request.getParameterMap();
Book book = new Book();
try {
BeanUtils.populate(book,map);
//調(diào)用dao,執(zhí)行修改圖書功能
BookDao bookDao = new BookDaoImpl();
int row = bookDao.uptBook(book);
//調(diào)轉(zhuǎn)回 圖書列表頁(yè)
if (row != 0){
response.sendRedirect("querybookservlet");
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
? ? ? ? 7.創(chuàng)建?DeleteBookServlet
import com.individual.dao.BookDao;
import com.individual.dao.impl.BookDaoImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "DeleteBookServlet", value = "/delBook")
public class DeleteBookServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取圖書id
int id = Integer.parseInt(request.getParameter("id"));
//調(diào)用dao中的刪除圖書的方法
BookDao bookDao = new BookDaoImpl();
int row = bookDao.dalBook(id);
//跳轉(zhuǎn)回 列表頁(yè)
if (row != 0){
response.sendRedirect("querybookservlet");
}
}
}
? ? ? ? ? ? ? ? 2.?創(chuàng)建dao文件夾并在dao下創(chuàng)建文件夾impl
? ? ? ? 1.在dao下創(chuàng)建interface文件 - BookDao
import com.individual.enity.Book;
import java.util.List;
public interface BookDao {
//查詢所有圖書
List<Book> getAllBooks();
//添加圖書
int addBook(Book book);
//根據(jù)圖書id,查詢圖書信息
Book getBookById(int id);
//修改圖書
int uptBook(Book book);
//刪除圖書
int dalBook(int id);
}
? ? ? ? 2.在dao下創(chuàng)建interface文件 - UserDao
import com.individual.enity.User;
/*
UserDao :
數(shù)據(jù)存取對(duì)象 - 增刪改查
*/
public interface UserDao {
User login(User user) ; //登陸方法
int register(User user) ; //注冊(cè)方法
}
? ? ? ? 3.在impl下創(chuàng)建Java文件 - BookDaoImpl
import com.individual.dao.BookDao;
import com.individual.enity.Book;
import com.individual.util.DBUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class BookDaoImpl implements BookDao {
QueryRunner qr = new QueryRunner();
@Override
public List<Book> getAllBooks() {
List<Book> list = null;
String sql = "select * from t_book" ;
try {
list = qr.query(DBUtil.getConn(),sql,new BeanListHandler<>(Book.class));
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
@Override
public int addBook(Book book) {
int row = 0 ;
String sql = "insert into t_book values(null,?,?,?)";
try {
row = qr.update(DBUtil.getConn(), sql, book.getBookname(), book.getPrice(), book.getAuthor());
} catch (SQLException e) {
e.printStackTrace();
}
return row;
}
@Override
public Book getBookById(int id) {
Book book = null ;
String sql = "select * from t_book where id = ?" ;
try {
book = qr.query(DBUtil.getConn(), sql, new BeanHandler<>(Book.class), id);
} catch (SQLException e) {
e.printStackTrace();
}
return book;
}
@Override
public int uptBook(Book book) {
int row = 0 ;
String sql = "update t_book set bookname = ? , price = ? , author = ? where id = ?";
try {
row = qr.update(DBUtil.getConn(), sql, book.getBookname(), book.getPrice(), book.getAuthor(), book.getId());
} catch (SQLException e) {
e.printStackTrace();
}
return row ;
}
@Override
public int dalBook(int id) {
int row = 0;
String sql = "delete from t_book where id = ?";
try {
row = qr.update(DBUtil.getConn(), sql, id);
} catch (SQLException e) {
e.printStackTrace();
}
return row;
}
}
? ? ? ? 4.在impl下創(chuàng)建Java文件 - UserDaoImpl
import com.individual.dao.UserDao;
import com.individual.enity.User;
import com.individual.util.DBUtil;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
QueryRunner qr = new QueryRunner();
//登錄
@Override
public User login(User user) {
User loginUser = null ;
String sql = "select * from t_user where username = ? and password = ?" ;
try {
loginUser = qr.query(DBUtil.getConn(), sql, new BeanHandler<>(User.class), user.getUsername(), user.getPassword());
} catch (SQLException e) {
e.printStackTrace();
}
return loginUser;
}
//注冊(cè)
@Override
public int register(User user) {
int row = 0 ;
String sql = "insert into t_user values(null,?,?,?,?,?,?)" ;
try {
row = qr.update(DBUtil.getConn(), sql, user.getUsername(), user.getPassword(), user.getSex(), user.getHobby(),
user.getCity(), user.getSignature());
} catch (SQLException e) {
e.printStackTrace();
}
return row;
}
}
? ? ? ? ??
? ? ? ? ? ? ? ? 3. 創(chuàng)建enity文件夾
? ? ? ? 1.創(chuàng)建Java文件 - Book
/*
使用Lombok實(shí)體類
*/
import lombok.Data;
@Data
public class Book {
private int id ;
private String bookname;
private float price;
private String author;
}
? ? ? ? 2.創(chuàng)建Java文件 - User
/*
實(shí)體類(JavaBean)
*/
public class User {
private int id ;
private String username ;
private String password ;
private String sex ;
private String hobby ;
private String city ;
private String signature ;
public User() {
}
public User(String username, String password, String sex, String hobby, String city, String signature) {
this.username = username;
this.password = password;
this.sex = sex;
this.hobby = hobby;
this.city = city;
this.signature = signature;
}
public User(int id, String username, String password, String sex, String hobby, String city, String signature) {
this.id = id;
this.username = username;
this.password = password;
this.sex = sex;
this.hobby = hobby;
this.city = city;
this.signature = signature;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getHobby() {
return hobby;
}
public void setHobby(String hobby) {
this.hobby = hobby;
}
public String getCity() {
return city;
}
public void setCity(String city) {
this.city = city;
}
public String getSignature() {
return signature;
}
public void setSignature(String signature) {
this.signature = signature;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
", sex='" + sex + '\'' +
", hobby='" + hobby + '\'' +
", city='" + city + '\'' +
", signature='" + signature + '\'' +
'}';
}
}
? ? ? ? ? ? ?
????????????????? 4. 創(chuàng)建util文件夾??
? ? ? ? 1. 創(chuàng)建Java文件 - DBUtil
import java.sql.*;
/*
連接數(shù)據(jù)庫(kù)的工具類
*/
public class DBUtil {
//1.獲取數(shù)據(jù)庫(kù)連接
public static Connection getConn(){
Connection conn = null;
//2.1 加載驅(qū)動(dòng)
try {
Class.forName("com.mysql.cj.jdbc.Driver");
//2.2 獲取連接
String url = "jdbc:mysql://localhost:3306/jdbc?useSSL=false&allowPublicKeyRetrieval=true&serverTimezone=UTC";
String user = "root"; //數(shù)據(jù)庫(kù)的用戶名
String password = "root"; //數(shù)據(jù)庫(kù)的密碼
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//2.釋放資源
public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
????????????????? 5. 直接創(chuàng)建一個(gè)Test的Java類?
? ? ? ? 1. 創(chuàng)建Java文件 - Test
import com.individual.dao.BookDao;
import com.individual.dao.impl.BookDaoImpl;
import com.individual.dao.impl.UserDaoImpl;
import com.individual.enity.Book;
import com.individual.enity.User;
import java.util.List;
import java.util.Scanner;
public class Test {
static Scanner sc = new Scanner(System.in) ;
public static void main(String[] args) {
// testLogin(); //驗(yàn)證登錄
// testRegister(); //驗(yàn)證注冊(cè)
// testQueryBook(); //驗(yàn)證查詢所有圖書
testAddBook(); //驗(yàn)證添加圖書
}
private static void testAddBook() {
Book book = new Book();
book.setBookname("java");
book.setPrice(20);
book.setAuthor("曹操");
BookDao bookDao = new BookDaoImpl();
int row = bookDao.addBook(book);
if (row != 0){
System.out.println("圖書添加成功");
}
}
private static void testQueryBook() {
BookDao bookDao = new BookDaoImpl();
List<Book> books = bookDao.getAllBooks();
for (Book book : books) {
System.out.println(book);
}
}
private static void testRegister() {
System.out.println("請(qǐng)輸入賬號(hào):");
String username = sc.next();
System.out.println("請(qǐng)輸入密碼:");
String password = sc.next();
System.out.println("請(qǐng)輸入性別:");
String sex = sc.next();
System.out.println("請(qǐng)輸入愛好:");
String hobby = sc.next();
System.out.println("請(qǐng)輸入城市:");
String city = sc.next();
System.out.println("請(qǐng)輸入個(gè)性簽名:");
String signature = sc.next();
//構(gòu)建User對(duì)象
User user = new User(username, password, sex, hobby, city, signature);
//調(diào)用Dao的注冊(cè)方法
UserDaoImpl userDao = new UserDaoImpl();
int row = userDao.register(user) ;
if (row != 0){
System.out.println("注冊(cè)成功");
}else {
System.out.println("注冊(cè)失敗");
}
}
private static void testLogin() {
//驗(yàn)證登錄
System.out.println("請(qǐng)輸入賬號(hào):");
String username = sc.next();
System.out.println("請(qǐng)輸入密碼:");
String password = sc.next();
User user = new User();
user.setUsername("username");
user.setPassword("password");
UserDaoImpl userDao = new UserDaoImpl();
User loginUser = userDao.login(user);
if (loginUser == null){
System.out.println("登錄失敗");
}else {
System.out.println("登陸成功");
}
}
}
----------------------------------------------------? 改進(jìn)版? --------------------------------------------------
新增技術(shù):使用? Filter過濾器? 、數(shù)據(jù)庫(kù)連接池
????????Filter過濾器(訪問路徑過濾器、修改編碼過濾器):
訪問路徑過濾器:
在src下新建一個(gè)包,名為: filter
在這個(gè)包下創(chuàng)建名為:?AuthorFilter 的Filter文件
import com.individual.enity.User;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter(filterName = "AuthorFilter",urlPatterns = "/*")
public class AuthorFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request1 = (HttpServletRequest) request;
HttpServletResponse response1 = (HttpServletResponse) response;
//可直接放行的資源路徑
String uris[] = {
"/ch07/",
"/ch07/index.jsp",
"/ch07/loginservlet",
"/ch07/addBook.jsp",
};
//有一些資源可直接放行(登錄頁(yè)、驗(yàn)證頁(yè)、首頁(yè))
String requestURI = request1.getRequestURI();
if (checkURI(uris,requestURI)){
chain.doFilter(request, response);
return;
}
//判斷用戶是否登錄
HttpSession session = request1.getSession();
User loginUser = (User) session.getAttribute("loginUser");
if (loginUser != null){
//已登錄,放行
chain.doFilter(request, response);
}else {
//未登錄,重定向到登錄頁(yè)
response1.sendRedirect("index.jsp");
}
}
//驗(yàn)證哪些資源可直接放行
public boolean checkURI(String uris[],String requestUri){
boolean flag = false;
for (String s : uris) {
if (requestUri.equals(s)){
flag = true;
}
}
return flag;
}
}
修改編碼過濾器:
在filter包下創(chuàng)建名為: EncodingFilter 的Filter文件
import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")
public class EncodingFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
//修改編碼
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
chain.doFilter(request, response);
}
}
(此時(shí)就可以將controller包下servlet文件中的修改編碼代碼刪除)?
? ? ? ? ? ? ?
???????????????? 數(shù)據(jù)庫(kù)連接池
在src下新建下圖所示配置文件
?在lib文件夾下新添druid-1.1.12.jar
在util包下新建Java文件 :?DruidUtils
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DruidUtils {
//Druid德魯伊,據(jù)說是魔獸世界中的一個(gè)角色,森林女神
public static DruidDataSource dataSource;//數(shù)據(jù)庫(kù)連接池
//1.初始化Druid連接池
static {
//第二種方式:使用軟編碼通過配置文件初始化
try {
Properties properties = new Properties();
//通過類加載器加載配置文件
InputStream inputStream = DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(inputStream);
//創(chuàng)建連接池
dataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
e.printStackTrace();
}
}
//2.獲取連接
public static Connection getConnection() {
try {
return dataSource.getConnection();//從連接池中獲取連接
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public static DataSource getDataSource(){
return dataSource;
}
//3.釋放資源
public static void closeAll(Connection connection, Statement statement, ResultSet resultSet) {
//釋放resultSet
try {
if (resultSet != null) {
resultSet.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
//釋放Statement
try {
if (statement != null) {
statement.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
//釋放Connection
try {
if (connection != null) {
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
將dao包下的impl包中的BookDaoImpl文件改成:
import com.individual.dao.BookDao;
import com.individual.enity.Book;
import com.individual.util.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;
import java.sql.SQLException;
import java.util.List;
public class BookDaoImpl implements BookDao {
QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
@Override
public List<Book> getAllBooks() {
List<Book> list = null;
String sql = "select * from t_book" ;
try {
list = qr.query(sql,new BeanListHandler<>(Book.class));
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
@Override
public int addBook(Book book) {
int row = 0 ;
String sql = "insert into t_book values(null,?,?,?)";
try {
row = qr.update(sql, book.getBookname(), book.getPrice(), book.getAuthor());
} catch (SQLException e) {
e.printStackTrace();
}
return row;
}
@Override
public Book getBookById(int id) {
Book book = null ;
String sql = "select * from t_book where id = ?" ;
try {
book = qr.query(sql, new BeanHandler<>(Book.class), id);
} catch (SQLException e) {
e.printStackTrace();
}
return book;
}
@Override
public int uptBook(Book book) {
int row = 0 ;
String sql = "update t_book set bookname = ? , price = ? , author = ? where id = ?";
try {
row = qr.update(sql, book.getBookname(), book.getPrice(), book.getAuthor(), book.getId());
} catch (SQLException e) {
e.printStackTrace();
}
return row ;
}
@Override
public int dalBook(int id) {
int row = 0;
String sql = "delete from t_book where id = ?";
try {
row = qr.update(sql, id);
} catch (SQLException e) {
e.printStackTrace();
}
return row;
}
}
將dao包下的impl包中的UserDaoImpl文件改成:文章來源:http://www.zghlxwxcb.cn/news/detail-474165.html
import com.individual.dao.UserDao;
import com.individual.enity.User;
import com.individual.util.DruidUtils;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import java.sql.SQLException;
public class UserDaoImpl implements UserDao {
QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());
//登錄
@Override
public User login(User user) {
User loginUser = null ;
String sql = "select * from t_user where username = ? and password = ?" ;
try {
loginUser = qr.query(sql, new BeanHandler<>(User.class), user.getUsername(), user.getPassword());
} catch (SQLException e) {
e.printStackTrace();
}
return loginUser;
}
//注冊(cè)
@Override
public int register(User user) {
int row = 0 ;
String sql = "insert into t_user values(null,?,?,?,?,?,?)" ;
try {
row = qr.update(sql, user.getUsername(), user.getPassword(), user.getSex(), user.getHobby(),
user.getCity(), user.getSignature());
} catch (SQLException e) {
e.printStackTrace();
}
return row;
}
}
(此時(shí),即可將util包中DBUtil文件刪除)文章來源地址http://www.zghlxwxcb.cn/news/detail-474165.html
到了這里,關(guān)于JavaWeb階段案例--簡(jiǎn)易版管理圖書系統(tǒng)(增刪改查)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!