源代码:
https://github.com/jeffery11586/Leo-Messi
create table jspproduct(
id int primary key auto_increment,
name varchar(30) not null,
description varchar(100) ,
price int check( price >= 0 ),
account int check( account >= 0 ),
status int default 1 check( status in (0, 1) ),
addtime date
);
create table jspuser(
id int(10) primary key auto_increment,
username varchar(15) unique,
password varchar(6) not null check( length(password)=6),
realname varchar(20) not null
);
insert into jspuser values(1,'huxz','123456','胡鑫喆');
insert into jspuser values(2,'liucy','123456','刘春阳');
insert into jspuser values(3,'luxw','123456','陆晓伟');
commit;
流程:QueryProductListServlet–>product_list.jsp
在index.jsp中添加商品管理标签,链接为/QueryProductListServlet,并测试链接
商品管理
新建QueryProductListServlet
拿到ProductService的实现类的实例化对象
private ProductService productService=new ProductServiceImpl();
逻辑处理
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.调用service的查询商品的列表的方法,返回商品列表
List products=productService.selectAllProduct();
//2.保存商品列表
request.setAttribute("products",products);
//3.请求转发到Product_list.jsp,在页面上显示商品列表和信息
request.getRequestDispatcher("product_list.jsp").forward(request,response);
}
逐级完成selectAllProduct()方法(最终在DAO层实现):
ProductServiceimpl中私有一个ProductDAO的实现类对象用来下一步调用
private ProductDAO productDAO= new ProductDAOIml();
ProductService中定义selectAllProduct方法,实现类中重写方法。
ProductDAO中定义selectAllProduct方法,实现类中重写方法。
//ProductServiceImpl
@Override
public List selectAllProduct() {
return productDAO.selectAllProduct();//将ProductDAO返回的商品列表返回给Servlet
}
//ProductDAOIml
@Override
public List selectAllProduct() {
//uodate
//findlist 方法为BaseDAO中的方法用来查询所有信息
return findList(Product.class,"select * from jspproduct ");
}
此方法的调用流程:
QueryProductListServlet—>ProductService—>ProductServiceImpl—>ProductDAO—>ProductDAOIml—>selectAllProduct() 查询后逐级返回给Servlet
新建product_list.jsp
QueryProductListServlet将在数据库中查询到的商品列表存到request中,请求转发到product_list.jsp,product_list.jsp遍历商品列表,展示商品信息
新增
id
商品名称
商品描述
商品单价
商品数量
商品状态
商品上架时间
操作
<%
//获取Product对象列表遍历
List products = (List) request.getAttribute("products");
for (Product product:products){
%>
//展示信息
<%=product.getId()%>
<%=product.getName()%>
<%=product.getDescription()%>
<%=product.getPrice()%>
<%=product.getAccount()%>
<%
if(product.getStatus()==1){
%>
上架
<%
}else {
%>
下架
<%
}
%>
//格式化时间需要引入标签库 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
//删除功能
删除
修改
<%
}
%>
流程:Product_list.jsp–>DelectProductServlet–>QueryProductListServlet
在Product_list.jsp中添加页面添加超链接
删除
新建 DelectProductServlet
拿到ProductService的实现类的实例化对象
private ProductService productService=new ProductServiceImpl();
逻辑实现
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取id
Integer id = Integer.parseInt(request.getParameter("id"));
//2.调用Service的删除方法
productService.deleteProductById(id);
//3.请求重定向到查询的Servlet
response.sendRedirect("QueryProductListServlet");
}
在DAO层中实现deleteProductById方法,不需要返回值,之后重定向到QueryProductListServlet
@Override
public void deleteProductById(Integer id) {
update("delete from jspproduct where id=?",id);
}
测试可以正常删除。
商品添加功能
流程:Product_list.jsp–>product_add.jsp–>AddProductServlet -->QueryProductListServlet
在Product_list.jsp页面添加超链接
新增
新建product_add.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
Title
form表单提交到AddProductServlet
新建AddProductServlet
private ProductService productService=new ProductServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取jsp的参数
String name = request.getParameter("name");
String description = request.getParameter("description");
Integer price = Integer.parseInt(request.getParameter("price"));
Integer account = Integer.parseInt(request.getParameter("account"));
Integer status = Integer.parseInt(request.getParameter("status"));
//2.新建商品类,保存商品的信息
Product product = new Product();
product.setName(name);
product.setDescription(description);
product.setAccount(account);
product.setStatus(status);
product.setPrice(price);
product.setAddtime(new Date());
//3.调用Service的addproduct方法
productService.addProduct(product);
//4.重定向到查询的servlet
response.sendRedirect("QueryProductListServlet");
}
在DAO层实现addProduct方法,无需返回对象,之后重定向到QueryProductListServlet
@Override
public void addProduct(Product product) {
update("insert into jspproduct values(null,?,?,?,?,?,?)",product.getName(),product.getDescription(),product.getPrice(),product.getAccount(),product.getStatus(),product.getAddtime());
}
测试,添加商品正常。
.商品修改功能
流程:
Product_list.jsp–>QueryProductByIdServlet–>Product_update.jsp–>UpdateProductServlet–>QueryProductListServlet
商品修改功能要先根据id展示这个商品的信息,然后修改后保存。
添加标签到Product_list.jsp
修改
新建QueryProductByIdServlet查询该商品的信息
逻辑处理
private ProductService productService=new ProductServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取id
Integer id = Integer.parseInt(request.getParameter("id"));
//2.根据id查询商品信息返回商品对象
Product product= productService.selectProductById(id);
//3.保存商品对象
request.setAttribute("product",product);
//4.请求转发到Product_update.jsp
request.getRequestDispatcher("Product_update.jsp").forward(request,response);
}
ProductDAOImpl实现selectProductById方法并返回对象存入request中
@Override
public Product selectProductById(Integer id) {
return findOne(Product.class,"select * from jspproduct where id = ?",id);
}
新建Product_update.jsp显示根据id查询到的信息并修改
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
Title
<% Product product= (Product)request.getAttribute("product");%>
修改提交后到UpdateProductServlet中
新建UpdateProductServlet
private ProductService productService = new ProductServiceImpl();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取jsp的参数
String name = request.getParameter("name");
String description = request.getParameter("description");
Integer price = Integer.parseInt(request.getParameter("price"));
Integer account = Integer.parseInt(request.getParameter("account"));
Integer status = Integer.parseInt(request.getParameter("status"));
Integer id = Integer.parseInt(request.getParameter("id"));
//2.新建商品类,保存商品的信息
Product product = new Product();
product.setName(name);
product.setDescription(description);
product.setAccount(account);
product.setStatus(status);
product.setPrice(price);
product.setAddtime(new Date());
product.setId(id);
//3.调用Service的addproduct方法
productService.updateProduct(product);
//4.重定向到查询的servlet
response.sendRedirect("QueryProductListServlet");
}
到DAO层实现updatproduct方法无需返回对象,之后重定向到QueryProductListServlet即可
@Override
public void updateProduct(Product product) {
update("update jspproduct set name=?,description=?,price=?,account=?,status=? where id= ?",product.getName(),product.getDescription(),product.getPrice(),product.getAccount(),product.getStatus(),product.getId());
}
}
测试,完成所有功能的实现。