显示的商品列表始终只有一个 麻烦老师指点迷津
来源: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;
}
}相似问题