1.对JSP页面作抽取优化
2.对登录预注册的Servlet类作优化处理
在jsp页面中添加隐藏域,利用反射动态的获取action的值,以此来确定需要执行的方法
package com.atguigu.web;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;
public abstract class baseServlet extends HttpServlet {
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String action = req.getParameter("action");
try {
// 获取action业务鉴别字符串,获取相应的业务 方法反射对象
Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
// System.out.println(method);
// 调用目标业务 方法
method.invoke(this, req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
}
}
package com.atguigu.web;
import com.atguigu.pojo.User;
import com.atguigu.service.UserService;
import com.atguigu.service.impl.UserServiceImpl;
import com.atguigu.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class UserServlet extends baseServlet {
private UserService userService = new UserServiceImpl();
protected void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1、获取请求的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
// 调用 userService.login()登录处理业务
User loginUser = userService.login(new User(null, username, password, null));
// 如果等于null,说明登录 失败!
if (loginUser == null) {
// 把错误信息,和回显的表单项信息,保存到Request域中
req.setAttribute("msg", "用户或密码错误!");
req.setAttribute("username", username);
// 跳回登录页面
req.getRequestDispatcher("/pages/user/login.jsp").forward(req, resp);
} else {
// 登录 成功
//跳到成功页面login_success.html
req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req, resp);
}
}
protected void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 1、获取请求的参数
String username = req.getParameter("username");
String password = req.getParameter("password");
String email = req.getParameter("email");
String code = req.getParameter("code");
User user = WebUtils.copyParamToBean(req.getParameterMap(), new User());
// 2、检查 验证码是否正确 === 写死,要求验证码为:abcde
if ("abcde".equalsIgnoreCase(code)) {
// 3、检查 用户名是否可用
if (userService.existsUsername(username)) {
System.out.println("用户名[" + username + "]已存在!");
// 把回显信息,保存到Request域中
req.setAttribute("msg", "用户名已存在!!");
req.setAttribute("username", username);
req.setAttribute("email", email);
// 跳回注册页面
req.getRequestDispatcher("/pages/user/regist.jsp").forward(req, resp);
} else {
// 可用
// 调用Sservice保存到数据库
userService.registUser(new User(null, username, password, email));
//
// 跳到注册成功页面 regist_success.jsp
req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req, resp);
}
} else {
// 把回显信息,保存到Request域中
req.setAttribute("msg", "验证码错误!!");
req.setAttribute("username", username);
req.setAttribute("email", email);
System.out.println("验证码[" + code + "]错误");
req.getRequestDispatcher("/pages/user/regist.jsp").forward(req, resp);
}
}
}
3.对后台管理的图书管理模块进行编写
BookDao接口与BookDaoImpl类的编写
在这里需要注意的是在查询操作编写sql语句时一定需要查询图书的id,不然会导致后续的操作
package com.atguigu.dao;
import com.atguigu.pojo.Book;
import java.util.List;
public interface BookDao {
//添加图书
public int addBook(Book book);
//删除图书
public int deleteBookById(Integer id);
//更改图书
public int updateBook(Book book);
//查询单本图书
public Book queryBookById(Integer id);
//查询全部图书
public List queryBooks();
}
package com.atguigu.dao.impl;
import com.atguigu.dao.BookDao;
import com.atguigu.pojo.Book;
import java.util.List;
public class BookDaoImpl extends baseDao implements BookDao {
@Override
public int addBook(Book book) {
String sql = "insert into t_book(`name`,`author`,`price`,`sales`,`stock`,`img_path`)values(?,?,?,?,?,?)";
return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgpath());
}
@Override
public int deleteBookById(Integer id) {
String sql = "delete from t_book where id = ?";
return update(sql,id);
}
@Override
public int updateBook(Book book) {
String sql = "update t_book set `name`=?,`author`=?,`price`=?,`sales`=?,`stock`=?,`img_path`=? where id = ?";
return update(sql,book.getName(),book.getAuthor(),book.getPrice(),book.getSales(),book.getStock(),book.getImgpath(),book.getId());
}
@Override
public Book queryBookById(Integer id) {
String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` from t_book where id = ?";
return queryForOne(Book.class,sql,id);
}
@Override
public List queryBooks() {
String sql = "select `id`,`name`,`author`,`price`,`sales`,`stock`,`img_path` from t_book";
return queryForList(Book.class,sql);
}
}
BookService接口与BookServiceImpl类的编写
package com.atguigu.service;
import com.atguigu.pojo.Book;
import java.util.List;
public interface BookService {
public int addBook(Book book);
public int deleteBookById(Integer id);
public int updateBook(Book book);
public Book queryBookById(Integer id);
public List queryBooks();
}
package com.atguigu.service.impl;
import com.atguigu.dao.BookDao;
import com.atguigu.dao.impl.baseDao;
import com.atguigu.dao.impl.BookDaoImpl;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import java.util.List;
public class BookServiceImpl extends baseDao implements BookService {
BookDao bookDao = new BookDaoImpl();
@Override
public int addBook(Book book) {
return bookDao.addBook(book);
}
@Override
public int deleteBookById(Integer id) {
return bookDao.deleteBookById(id);
}
@Override
public int updateBook(Book book) {
return bookDao.updateBook(book);
}
@Override
public Book queryBookById(Integer id) {
return bookDao.queryBookById(id);
}
@Override
public List queryBooks() {
return bookDao.queryBooks();
}
}
编写BookServlet
在执行添加和修改时,都会跳转到同一个页面,而在修改跳转页面时会将图书的数据送过去。
同时也需要在修改页面添加上id的隐藏域
package com.atguigu.web;
import com.atguigu.pojo.Book;
import com.atguigu.service.BookService;
import com.atguigu.service.UserService;
import com.atguigu.service.impl.BookServiceImpl;
import com.atguigu.utils.WebUtils;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.text.ParseException;
import java.util.List;
public class BookServlet extends baseServlet {
private BookService bookService = new BookServiceImpl();
protected void add (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//获取参数
Book book = WebUtils.copyParamToBean(req.getParameterMap(), new Book());
//添加
bookService.addBook(book);
//重定向两次请求
//不使用跳转的原因是可能会导致图书重复添加
resp.sendRedirect(req.getContextPath()+"/host/bookServlet?action=list");
}
protected void delete (HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
//获取参数
String id1 = req.getParameter("id");
int id = WebUtils.parseInt(id1, 0);
//删除
bookService.deleteBookById(id);
//重定向到图书展示页面
resp.sendRedirect(req.getContextPath()+"/host/bookServlet?action=list");
}
protected void getBook(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取参数
int id = WebUtils.parseInt(req.getParameter("id"),0);
//查询图书
Book book = bookService.queryBookById(id);
//保存图书
req.setAttribute("book",book);
System.out.println(book);
//跳转
req.getRequestDispatcher("/pages/host/book_edit.jsp").forward(req,resp);
}
protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取参数
Book book = WebUtils.copyParamToBean(req.getParameterMap(),new Book());
System.out.println(book);
//修改
bookService.updateBook(book);
//重定向
resp.sendRedirect(req.getContextPath() + "/host/bookServlet?action=list");
}
protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//查询全部图书
List books = bookService.queryBooks();
//保存到request域中
req.setAttribute("books",books);
//跳转到图书展示页面
req.getRequestDispatcher("/pages/host/book_manager.jsp").forward(req,resp);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>编辑图书 <%-- 静态包含 base标签、css样式、jQuery文件 --%> <%@ include file="/pages/common/head.jsp"%>h1 { text-align: center; margin-top: 200px; } h1 a { color:red; } input { text-align: center; } 执行什么操作?${empty requestScope.book} 编辑图书 <%-- 静态包含 manager管理模块的菜单 --%> <%@include file="/pages/common/manager_menu.jsp"%> <%--静态包含页脚内容--%> <%@include file="/pages/common/footer.jsp"%>



