显示的商品列表始终只有一个 麻烦老师指点迷津

来源:4-9 保存商品的代码实现

shuaiyi

2019-10-25 17:05:15

https://class.imooc.com/course/qadetail/132646

我刚好看到了这个问答  问题是一样的  之前学习的内容不影响所以一直以来就没去解决这个问题http://img.mukewang.com/climg/5db2b8e4090e829908830227.jpg可以看到 n = 1   至始至终我的商品列表都是显示一条而已  不是这节视频就有的问题

这是我的categoryServlet代码:
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.lmpl.CategoryServicelmpl;

/**
 * Servlet implementation class CategoryServlet
 */
@WebServlet("/CategoryServlet")
public class CategoryServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//请求路径 localhost:80808/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 CategoryServicelmpl();
		categoryService.delete(cid);
		//页面跳转
		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.setCname(cname);
		category.setCdesc(cdesc);
		//3 调用业务层处理数据
		CategoryService categoryService = new CategoryServicelmpl();
		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 CategoryServicelmpl();
		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 cdesc = request.getParameter("cdesc");
		System.out.println("接受数据为"+cname+" "+cdesc);
		//2 封装数据
		Category category = new Category();
		category.setCname(cname);
		category.setCdesc(cdesc);
		//3 调用业务层处理数据
		CategoryService categoryService = new CategoryServicelmpl();
		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 {
		//接收参数
		
		//封装数据
		
		//调用业务层处理数据
		System.out.println("CategoryServlet的findAll方法执行了");

		CategoryService categoryService = new CategoryServicelmpl();
		List<Category> list = categoryService.findAll();
		
		//页面跳转
		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);
	}

}

这是categoryServicelmpl:
package com.imooc.service.lmpl;

import java.util.List;

import com.imooc.dao.CategoryDao;
import com.imooc.dao.lmpl.CategoryDaolmpl;
import com.imooc.domain.Category;
import com.imooc.service.CategoryService;


public class CategoryServicelmpl implements CategoryService{

	@Override
	public List<Category> findAll() {
		//调用CategoryDao的方法
		System.out.println("CategoryServicelmpl的findAll方法执行了");
		CategoryDao categoryDao = new CategoryDaolmpl();
		return categoryDao.findAll();
	}

	@Override
	public void save(Category category) {
		CategoryDao categoryDao = new CategoryDaolmpl();
		categoryDao.save(category);
	}

	@Override
	public Category findOne(Integer cid) {
		CategoryDao categoryDao = new CategoryDaolmpl();
		return categoryDao.findOne(cid);
	}

	@Override
	public void update(Category category) {
		CategoryDao categoryDao = new CategoryDaolmpl();
		categoryDao.update(category);
		
	}

	@Override
	public void delete(Integer cid) {
		CategoryDao categoryDao = new CategoryDaolmpl();
		categoryDao.delete(cid);
		
	}

}

这是categoryDaolmpl:
package com.imooc.dao.lmpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
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 CategoryDaolmpl implements CategoryDao {

	@Override
	public List<Category> findAll() {
		System.out.println("CategoryDao的findAll方法执行了");
		
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<Category> list = null;
		try{
		//1 获得连接
			conn = JDBCUtils.getConnection();
		//2 编写sql
			String sql = "select * from category";
		//3 预编译sql
			pstmt = conn.prepareStatement(sql);
		//4 设置参数
			
		//5 执行sql
			rs = pstmt.executeQuery();
		//6 结果处理
			list = new ArrayList<Category>();
			while(rs.next()) {
				Category category = new Category();
				category.setCid(rs.getInt("cid"));
				category.setCname(rs.getString("cname"));
				category.setCdesc(rs.getString("cdesc"));
				
				list.add(category);
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
		//7 释放资源
			JDBCUtils.release(rs, pstmt, conn);
		}
		return list;
	}

	@Override
	public void save(Category category) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		try {
			conn = JDBCUtils.getConnection();
			String sql = "insert into category value(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();
			String sql = "select * from category where cid = ?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, cid);
			rs = pstmt.executeQuery();
			if(rs.next()) {//一个查询结果用if 多个用while
				Category category = new Category();
				category.setCid(rs.getInt("cid"));
				category.setCname(rs.getString("cname"));
				category.setCdesc(rs.getString("cdesc"));
				return category;
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(pstmt, conn);
		}
		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);
		}
	}

}

每个Impl我都写错成lmpl了 但是好像不影响 就没改了

http://img.mukewang.com/climg/5db2ba180921781c02990865.jpg这是我的WebContent目录下的jsp存放路径


写回答

2回答

好帮手慕珊

2019-10-25

你好!findAll方法的return list语句要写到while循环的外面,否则把一条数据添加到list后,该方法就执行结束了。

http://img.mukewang.com/climg/5db2ce480955614706040372.jpg

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

1

shuaiyi

提问者

2019-10-25

额  发的是分类的代码 分类没有错  补发下商品的代码

这是ProductServlet类:

package com.imooc.web.action;

import java.io.IOException;
import java.util.List;
import java.util.Map;

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.domain.Product;
import com.imooc.service.CategoryService;
import com.imooc.service.ProductService;
import com.imooc.service.lmpl.CategoryServicelmpl;
import com.imooc.service.lmpl.ProductServicelmpl;
import com.imooc.utils.UploadUtils;


@WebServlet("/ProductServlet")
public class ProductServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收method的参数
		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);
		}
	}
	
	/**
	 * 后台商品管理,修改商品的方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接受数据
		Integer pid = Integer.parseInt(request.getParameter("pid"));
		//调用业务层处理数据
		ProductService productService = new ProductServicelmpl();
		Product product = productService.findOne(pid);
		//查询所有分类
		CategoryService categoryService = new CategoryServicelmpl();
		List<Category> categoryList = categoryService.findAll();
		//页面跳转
		request.setAttribute("product", product);
		request.setAttribute("categoryList",categoryList);
		request.getRequestDispatcher("/admin/product_update.jsp").forward(request, response);
	}

	/**
	 * 后台商品管理,保存商品的方法
	 * @param request
	 * @param response
	 * @throws IOException 
	 */
	private void save(HttpServletRequest request, HttpServletResponse response) throws IOException {
		System.out.println("save============");
		//完成文件的上传
		Map<String,String> map = UploadUtils.uploadFile(request);
		//将数据完成封装
		Product product = new Product();
		product.setPname(map.get("pname"));
		product.setAuthor(map.get("author"));
		product.setPrice(Double.parseDouble(map.get("price")));
		product.setDescription(map.get("description"));
		product.setFilename(map.get("filename"));
		product.setPath(map.get("path"));
		
		product.getCategory().setCid(Integer.parseInt(map.get("cid")));
		//处理数据
		ProductService productService = new ProductServicelmpl();
		productService.save(product);
		//页面跳转
		response.sendRedirect(request.getContextPath()+"/ProductServlet?method=findAll");
	}

	/**
	 * 商品模块,跳转到添加页面
	 * @param request
	 * @param response
	 * @throws IOException 
	 * @throws ServletException 
	 */
	private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//查询所有分类的信息
		CategoryService categoryService = new CategoryServicelmpl();
		List<Category> list = categoryService.findAll();
		//页面跳转
		request.setAttribute("categoryList", list);
		request.getRequestDispatcher("/admin/product_add.jsp").forward(request, response);
	}


	private void findAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//不接收参数
		//不封装
		//调用业务层处理数据
		System.out.println("ProductServlet的findAll方法执行了");
		ProductService productService = new ProductServicelmpl();
		List<Product> list = productService.findAll();
		//页面跳转
		request.setAttribute("list", list);
		request.getRequestDispatcher("/admin/product_list.jsp").forward(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

这是ProductService的实现类:

package com.imooc.service.lmpl;

import java.util.List;

import com.imooc.dao.ProductDao;
import com.imooc.dao.lmpl.ProductDaolmpl;
import com.imooc.domain.Product;
import com.imooc.service.ProductService;

public class ProductServicelmpl implements ProductService{

	@Override
	public List<Product> findAll() {
		System.out.println("ProductService的findAll方法执行了");
		ProductDao productDao = new ProductDaolmpl();
		return productDao.findAll();
	}

	@Override
	public void save(Product product) {
		ProductDao productDao = new ProductDaolmpl();
		productDao.save(product);
	}

	@Override
	public Product findOne(Integer pid) {
		ProductDao productDao = new ProductDaolmpl();
		return productDao.findOne(pid);
	}

	
	
}

这是ProductDao的实现类:

package com.imooc.dao.lmpl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.imooc.dao.ProductDao;
import com.imooc.domain.Product;
import com.imooc.utils.JDBCUtils;

public class ProductDaolmpl implements ProductDao {

	@Override
	public List<Product> findAll() {
		System.out.println("ProductDao的findAll方法执行了");
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		List<Product> list = null;
		try {
			conn = JDBCUtils.getConnection();
			String sql = "select * from product p,category c where p.cid = c.cid";
			pstmt = conn.prepareStatement(sql);
			rs = pstmt.executeQuery();
			list = new ArrayList<Product>();
			while(rs.next()) {
				Product product = new Product();
				product.setPid(rs.getInt("pid"));
				product.setPname(rs.getString("pname"));
				product.setAuthor(rs.getString("author"));
				product.setPrice(rs.getDouble("price"));
				product.setDescription(rs.getString("description"));
				product.setFilename(rs.getString("filename"));
				product.setPath(rs.getString("path"));
				//封装商品所属的分类
				product.getCategory().setCid(rs.getInt("cid"));
				product.getCategory().setCname(rs.getString("cname"));
				product.getCategory().setCdesc(rs.getString("cdesc"));
				
				list.add(product);
				return list;
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(rs, pstmt, conn);
		}
		return null;
	}

	@Override
	public void save(Product product) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		
		try {
			conn = JDBCUtils.getConnection();
			String sql = "insert into product values(null,?,?,?,?,?,?,?)";
			pstmt = conn.prepareStatement(sql);
			pstmt.setString(1, product.getPname());
			pstmt.setString(2, product.getAuthor());
			pstmt.setDouble(3, product.getPrice());
			pstmt.setString(4, product.getDescription());
			pstmt.setString(5, product.getFilename());
			pstmt.setString(6, product.getPath());
			
			pstmt.setInt(7,product.getCategory().getCid());
			int n = pstmt.executeUpdate();
			System.out.println(n);
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(pstmt, conn);
		}
	}

	@Override
	public Product findOne(Integer pid) {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		try {
			conn = JDBCUtils.getConnection();
			String sql = "select * from product p,category c where p.cid=c.cid and p.pid=?";
			pstmt = conn.prepareStatement(sql);
			pstmt.setInt(1, pid);
			rs = pstmt.executeQuery();
			if(rs.next()) {
				Product product = new Product();
				product.setPid(rs.getInt("pid"));
				product.setPname(rs.getString("pname"));
				product.setAuthor(rs.getString("author"));
				product.setPrice(rs.getDouble("price"));
				product.setDescription(rs.getString("description"));
				product.setFilename(rs.getString("filename"));
				product.setPath(rs.getString("path"));
				//封装商品所属的分类
				product.getCategory().setCid(rs.getInt("cid"));
				product.getCategory().setCname(rs.getString("cname"));
				product.getCategory().setCdesc(rs.getString("cdesc"));
				
				return product;
			}
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			JDBCUtils.release(rs,pstmt, conn);
		}
		return null;
	}

}


0

0 学习 · 8016 问题

查看课程