Javaweb项目实战:油画商城。第三集----分类模块的实现!!!GOGOGOGO!!疫情还在,别乱跑呢,学习别停!!!

Irisa ·
更新时间:2024-09-20
· 522 次阅读

由于近期准备机试内容,断更了下。 我思考了思考,还是继续更吧。 万一有人看呢 对你万一有帮助呢? 谁说的准哦 唉。。 人 生 难 得 一 zhi ji

这次的内容是实现分类模块
需求是我们可以展示数据库中有的分类
并添加新的分类到数据库之后跳转到展示分类的页面,展示数据库中所有的分类
当然也可以删除,删除后,跳转到展示分类的页面,展示数据库中所有的分类
也可以修改某个分类,修改后跳转到展示分类的页面,展示数据库中所有的分类

好啦,首先是Servlet的实现,我们在coding的时候不是把所有的功能都写完哈,
而是写一个功能,接着继续往下深入到Service,再到dao
如果你的需求明确,也可以一层一层写,但是吧不容易调试了就。

package com.imooc.web.action; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.imooc.domain.Category; import com.imooc.service.CategoryService; import com.imooc.service.impl.CategoryServiceImpl; @WebServlet("/CategoryServlet") public class CategoryServlet extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求路径localhost:8080/shop/CategoryServlet?method=findAll String methodName = request.getParameter("method"); if ("findAll".equals(methodName)) { // 查询所有分类 findAll(request, response); } else if ("saveUI".equals(methodName)) { // 跳转到添加页面 saveUI(request, response); } else if ("save".equals(methodName)) { // 保存分类的方法 save(request, response); } else if ("edit".equals(methodName)) {// 编辑分类的方法 edit(request, response); } else if ("update".equals(methodName)) { // 修改分类 update(request, response); } else if ("delete".equals(methodName)) { // 删除分类 delete(request, response); } } /** * 后台分类管理,删除分类的方法 * * @param request * @param response * @throws IOException */ private void delete(HttpServletRequest request, HttpServletResponse response) throws IOException { //接收数据 Integer cid = Integer.parseInt(request.getParameter("cid")); // 处理数据 CategoryService categoryService = new CategoryServiceImpl(); categoryService.delete(cid); // 4、页面跳转 response.sendRedirect(request.getContextPath() + "/CategoryServlet?method=findAll"); } /** * 后台分类管理修改分类的方法 * * @param request * @param response * @throws IOException */ private void update(HttpServletRequest request, HttpServletResponse response) throws IOException { // 1、接收数据 Integer cid = Integer.parseInt(request.getParameter("cid")); String cname = request.getParameter("cname"); String cdesc = request.getParameter("cdesc"); // 2、封装数据 Category category = new Category(); category.setCid(cid); category.setCdesc(cdesc); category.setCname(cname); // 3、调用业务层处理数据 CategoryService categoryService = new CategoryServiceImpl(); categoryService.update(category); // 4、页面跳转 response.sendRedirect(request.getContextPath() + "/CategoryServlet?method=findAll"); } /** * 后台分类管理,编辑分类的方法 * * @param request * @param response * @throws IOException * @throws ServletException */ private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 1、接收数据 Integer cid = Integer.parseInt(request.getParameter("cid")); // 2、调用业务层处理数据 CategoryService categoryService = new CategoryServiceImpl(); Category category = categoryService.findOne(cid); // 3、页面跳转 request.setAttribute("category", category); request.getRequestDispatcher("/admin/category_update.jsp").forward(request, response); } /** * 后台分类管理保存分类的方法 * * @param request * @param response * @throws IOException */ private void save(HttpServletRequest request, HttpServletResponse response) throws IOException { // 1、接收数据 String cname = request.getParameter("cname"); String cdes = request.getParameter("cdes"); System.out.println("接收的数据是" + cname + " " + cdes); // 2、封装数据 Category category = new Category(); category.setCdesc(cdes); category.setCname(cname); // 3、调用业务层处理数据 CategoryService categoryService = new CategoryServiceImpl(); categoryService.save(category); // 4、页面跳转 response.sendRedirect(request.getContextPath() + "/CategoryServlet?method=findAll"); } /** * 后台分类管理跳转到添加页面 * * @param request * @param response * @throws IOException * @throws ServletException */ private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher("/admin/category_add.jsp").forward(request, response); } /** * 后台分类管理查询所有分类的方法 * * @param request * @param response * @throws IOException * @throws ServletException */ private void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 接收参数 // 封装数据 // 调用业务层处理数据 CategoryService categoryService = new CategoryServiceImpl(); List list = categoryService.findAll(); for (Category c : list) { System.out.println(c.toString()); } // 页面跳转 request.setAttribute("list", list); request.getRequestDispatcher("/admin/category_list.jsp").forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); } }

接下来是Service层的接口和其实现。
是根据Servlet的调用

package com.imooc.service; import java.util.List; import com.imooc.domain.Category; public interface CategoryService { List findAll(); void save(Category category); Category findOne(Integer cid); void update(Category category); void delete(Integer cid); } package com.imooc.service.impl; import java.sql.Connection; import java.sql.SQLException; import java.util.List; import com.imooc.dao.CategoryDao; import com.imooc.dao.ProductDao; import com.imooc.dao.impl.CategoryDaoImpl; import com.imooc.dao.impl.ProductDaoImpl; import com.imooc.domain.Category; import com.imooc.domain.Product; import com.imooc.service.CategoryService; import com.imooc.utils.JDBCUtils; public class CategoryServiceImpl implements CategoryService { @Override public List findAll() { // 调用CategoryDao方法 System.out.println("service success"); CategoryDao categoryDao = new CategoryDaoImpl(); return categoryDao.findAll(); } @Override public void save(Category category) { // TODO Auto-generated method stub CategoryDao categoryDao = new CategoryDaoImpl(); categoryDao.save(category); } @Override public Category findOne(Integer cid) { // TODO Auto-generated method stub CategoryDao categoryDao = new CategoryDaoImpl(); return categoryDao.findOne(cid); } @Override public void update(Category category) { // TODO Auto-generated method stub CategoryDao categoryDao = new CategoryDaoImpl(); categoryDao.update(category); } @Override public void delete(Integer cid) { /** * 事务的管理:在业务层统一创建连接对象,保证多个DAO中使用同一个连接: 1、创建连接之后,将连接对象传递给DAO * 2、创建一个连接对象,将连接对象绑定到当前线程中(ThreadLocal ) */ // TODO Auto-generated method stub Connection conn = null; // 在删除分类之前,先将所属该分类的商品处理下 try { conn = JDBCUtils.getConnection(); conn.setAutoCommit(false);// 开启事务 ProductDao productDao = new ProductDaoImpl(); List list = productDao.findByCid(cid); for (Product p : list) { p.getCategory().setCid(null); productDao.update(conn, p); } // int i=1/0; CategoryDao categoryDao = new CategoryDaoImpl(); categoryDao.delete(conn, cid); conn.commit();// 提交事务 } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } e.printStackTrace(); } finally { if (conn != null) { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }

然后是Dao层啦

package com.imooc.dao; import java.sql.Connection; import java.util.List; import com.imooc.domain.Category; public interface CategoryDao { List findAll(); void save(Category category); Category findOne(Integer cid); void update(Category category); void delete(Integer cid); void delete(Connection conn, Integer cid); } package com.imooc.dao.impl; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import com.imooc.dao.CategoryDao; import com.imooc.domain.Category; import com.imooc.utils.JDBCUtils; public class CategoryDaoImpl implements CategoryDao { @Override public List findAll() { // 获得链接 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; List list = new ArrayList(); try { conn = JDBCUtils.getConnection(); // 编写sql String sql = "select * from category"; // 预编译sql // 设置参数 pstmt = conn.prepareStatement(sql); // 执行sql rs = pstmt.executeQuery(); // 结果处理 while (rs.next()) { Category c = new Category(); c.setCid(rs.getInt("cid")); c.setCname(rs.getString("cname")); c.setCdesc(rs.getString("cdesc")); list.add(c); } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 JDBCUtils.release(rs, pstmt, conn); } System.out.println("dao success"); return list; } @Override public void save(Category category) { Connection conn = null; PreparedStatement pstmt = null; try { conn = JDBCUtils.getConnection(); String sql = "insert category values(null,?,?)"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, category.getCname()); pstmt.setString(2, category.getCdesc()); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.release(pstmt, conn); } } @Override public Category findOne(Integer cid) { // 获得链接 Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = JDBCUtils.getConnection(); // 编写sql String sql = "select * from category where cid=?"; // 预编译sql pstmt = conn.prepareStatement(sql); // 设置参数 pstmt.setInt(1, cid); // 执行sql rs = pstmt.executeQuery(); // 结果处理 if (rs.next()) { Category c = new Category(); c.setCid(rs.getInt("cid")); c.setCname(rs.getString("cname")); c.setCdesc(rs.getString("cdesc")); return c; } } catch (Exception e) { e.printStackTrace(); } finally { // 释放资源 JDBCUtils.release(rs, pstmt, conn); } System.out.println("dao success"); return null; } @Override public void update(Category category) { Connection conn = null; PreparedStatement pstmt = null; try { conn = JDBCUtils.getConnection(); String sql = "update category set cname=? , cdesc=? where cid=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, category.getCname()); pstmt.setString(2, category.getCdesc()); pstmt.setInt(3, category.getCid()); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.release(pstmt, conn); } } @Override public void delete(Integer cid) { Connection conn = null; PreparedStatement pstmt = null; try { conn = JDBCUtils.getConnection(); String sql = "delete from category where cid=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, cid); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { JDBCUtils.release(pstmt, conn); } } @Override public void delete(Connection conn, Integer cid) { PreparedStatement pstmt = null; try { String sql = "delete from category where cid=?"; pstmt = conn.prepareStatement(sql); pstmt.setInt(1, cid); pstmt.executeUpdate(); } catch (Exception e) { e.printStackTrace(); } finally { if (pstmt != null) { try { pstmt.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }

为了解决上传文字,中文乱码的问题
我们加一个过滤器就好啦
在这里插入图片描述

package com.imooc.web.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * Servlet Filter implementation class CharacterEncodingFilter */ @WebFilter("/*") public class CharacterEncodingFilter implements Filter { /** * Default constructor. */ public CharacterEncodingFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { request.setCharacterEncoding("UTF-8"); // pass the request along the filter chain chain.doFilter(request, response); } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } }

OK,目前为止
我们算是实现了这个购物车模块呢
具体效果如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
看都看到这里了,
点赞,关注,来一波,老铁666,双击加关注。主播送头发。


作者:JJyu可及



javaweb项目 javaweb 实战 商城 疫情 模块 学习 分类

需要 登录 后方可回复, 如果你还没有账号请 注册新账号