显示的商品列表始终只有一个 麻烦老师指点迷津
来源:4-9 保存商品的代码实现
shuaiyi
2019-10-25 17:05:15
https://class.imooc.com/course/qadetail/132646
我刚好看到了这个问答 问题是一样的 之前学习的内容不影响所以一直以来就没去解决这个问题可以看到 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了 但是好像不影响 就没改了
这是我的WebContent目录下的jsp存放路径
2回答
好帮手慕珊
2019-10-25
你好!findAll方法的return list语句要写到while循环的外面,否则把一条数据添加到list后,该方法就执行结束了。
如果我的回答解决了你的疑惑,请采纳!祝学习愉快!
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; } }
相似问题
回答 10
回答 1