【问题标题】:Passing ResultSet from Servlet to JSP将 ResultSet 从 Servlet 传递给 JSP
【发布时间】:2026-01-25 04:10:02
【问题描述】:

我想将结果集从 Servlet 传递到 JSP 页面,并在我的 JSP 页面中有它的值。

这是 Servlet 的代码:

protected void doPost (HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException
{
    String username = request.getParameter("username");
    String password = request.getParameter("password");
    PrintWriter out = response.getWriter();
    Data select = new Data(username,password);
    try {
        Boolean result = select.Select(username, password);
        if (result) {
            ResultSet rset=select.SelectAll(username,password);
            request.setAttribute("user",rset);
            getServletConfig().getServletContext()
                    .getRequestDispatcher("/dashboard.jsp")
                    .forward(request,response);

        } else
            out.print("Please check your username and password");        
    } catch (Exception e) {
        out.print("There seems to be a exception" + e);
    }
}

这里调用的两个函数分别返回boolean值和ResultSet值 Select 函数返回 boolean 值,而 SelectAll 返回 ResultSet

我的 JSP 代码如下所示:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Username: <c:out value="$(user.username)"/> <br/>
Email:    <c:out value="$(user.email)"/>    <br/>
Contact:  <c:out value="$(user.contact)"/>  <br/>

【问题讨论】:

  • 那么您面临什么错误或异常?
  • 您确定 ResultSet 类包含用户名属性吗?!!
  • 我不会将结果集直接传递给 JSP,而是从结果集中提取信息并将其公开在适当的 DTO 中。
  • Dave 是对的,使用这样的结果集不是一个好主意,请参阅*.com/q/20497778/217324

标签: java jsp servlets el resultset


【解决方案1】:

要继续处理结果集,请初始化对象 User,它应该有 getter 和 setter

ResultSet rset=select.SelectAll(username,password);
if (rset.next()){
  User user = new User();
  user.setUsername(rset.get("username"));
  user.setEmail(rset.get("email"));
  user.setContact(rset.get("contact"));
  request.setAttribute("user",user);
  getServletContext().getRequestDispatcher("/dashboard.jsp")
                    .forward(request,response);
}

【讨论】:

  • 用户名:$(user.username) 电子邮件:$(user.email) 联系人:$(user.contact) 这是我在制作课程并向其添加结果集内容后得到的输出跨度>
  • 因为大括号用于 EL 表达式 ${user.email}。
  • 谢谢先生您帮了我很多
【解决方案2】:

不要通过ResultSet!相反,遵循DAO 模式并创建Java POJO 类,其字段将反映数据库中的列。通过while 循环(while(rs.next()) {...})从ResultSet 中提取数据,将值分配给您之前创建的POJO 类实例并将该实例添加到List(以防您想要传递多个用户)。返回列表(如果是多个用户)或只是一个实例(如果是单个用户)。

将对象列表设置为属性并通过JSP 中的JSTL forEach 循环对其进行迭代(如果有多个用户)。

【讨论】: