显示从 servlet 到 jsp 的结果集值



我需要帮助在不使用 JSTL 实现的情况下将结果集值从 servlet 转发到 jsp

工作流程 :

  1. 用户在文本框中输入值,然后单击搜索按钮
  2. 单击搜索时,将调用 servlet。servlet 专注于数据库实现,并将结果集值转发到请求来自的同一 jsp 页。

问题:我的结果集大小为 3,但仅表顶部的值就打印在我的 jsp 页面中。缺少其余 2 个值。我希望所有值都打印在我的 jsp 页面中。

这是我的代码:

产品列表.jsp

<%@page import="java.util.List"%>
<%@page import="web.Products"%>
<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
       <title>Products</title>
</head>
<body>
 <form method="post" align="center" action="ProductList">
Company Name:<input type="text" size="20" id="company" name="company" />
<input type="submit" value="search"/>
  <%
  List<Products> pdts = (List<Products>) request.getAttribute("list");
  if(pdts!=null){
    for(Products prod: pdts){
       out.println("<br/>" + prod.getProductname());
     }
  }
%>
</form>
</body>
</html>

产品.java

public class Products {
    private String productname;
    public String getProductname() {
        return productname;
    }
    public void setProductname(String productname) {
        this.productname=productname ;
    }
}

产品列表.java(servlet-code)

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpSession;

public class ProductList extends HttpServlet {
    static final String dbURL = "jdbc:mysql://localhost:3306/pdt";
    static final String dbUser = "root";
    static final String dbPass = "root";
    @Override
    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8"); 
        PrintWriter out = response.getWriter();
        ResultSet rs = null;
        Connection connection = null;   
        List<Products> pdt = new ArrayList<Products>();
        try{
            String company =request.getParameter("company");
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection (dbURL,dbUser,dbPass);
            String sql="select product_pck from comp_pdt_list where company_name='"+company+"'";
            PreparedStatement prep = connection.prepareStatement(sql); 
            rs=prep.executeQuery();
            while(rs.next()) { 
                Products prod=new Products();
                prod.setProductname(rs.getString("product_pck"));
                pdt.add(prod);
                request.setAttribute("list",pdt);
                RequestDispatcher rd=request.getRequestDispatcher("Productlist.jsp");    
                rd.forward(request,response); 
                return;
            }
            prep.close();
        } catch(Exception E) {
            //Any Exceptions will be caught here
            System.out.println("The error is"+E.getMessage());
        } finally {
            try {
                connection.close();
            } catch (Exception ex) {
                System.out.println("The error is" + ex.getMessage());
            }
        }
    }
}

在 while 循环中设置要请求的属性。因此,"列表"仅包含一个产品。(方法在第一次迭代时返回)

在 while 循环中将产品添加到列表中,并仅在 while 循环后设置列表(请求属性)。

以下应该可以解决它:

while(rs.next()){ 
        Products prod=new Products();
          prod.setProductname(rs.getString("product_pck"));
          pdt.add(prod);           
}
request.setAttribute("list",pdt);
RequestDispatcher rd=request.getRequestDispatcher("Productlist.jsp");    
rd.forward(request,response); 

相关内容

  • 没有找到相关文章

最新更新