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

由于近期准备机试内容,断更了下。
我思考了思考,还是继续更吧。
万一有人看呢
对你万一有帮助呢?
谁说的准哦
唉。。
人
生
难
得
一
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<Category> 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<Category> 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<Category> 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<Product> 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<Category> 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<Category> findAll() {
		// 获得链接
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<Category> list = new ArrayList<Category>();
		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,双击加关注。主播送头发。

发布了48 篇原创文章 · 获赞 9 · 访问量 2404

猜你喜欢

转载自blog.csdn.net/jjy19971023/article/details/104810289