Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSP中的迭代问题_Java_Database_Jsp_Loops - Fatal编程技术网

Java JSP中的迭代问题

Java JSP中的迭代问题,java,database,jsp,loops,Java,Database,Jsp,Loops,我使用servlet和jsp页面在表中显示数据库信息。我可以成功地将信息插入数据库,但当我尝试在另一个页面中显示信息时,我遇到了一个问题。我在(itr=data.iterator();itr.hasNext();)的行中得到一个错误。我的代码就在下面,我遇到的错误就在代码下面。我知道我的主要问题是迭代,所以如果有人能帮助我,我会非常感激。(顺便说一句,这段代码是我在youtube上观看的一段视频中逐字逐句的代码,用户在视频中很好地使用了这段代码) 根本原因 java.lang.NullPoint

我使用servlet和jsp页面在表中显示数据库信息。我可以成功地将信息插入数据库,但当我尝试在另一个页面中显示信息时,我遇到了一个问题。我在(itr=data.iterator();itr.hasNext();)的
行中得到一个错误。我的代码就在下面,我遇到的错误就在代码下面。我知道我的主要问题是迭代,所以如果有人能帮助我,我会非常感激。(顺便说一句,这段代码是我在youtube上观看的一段视频中逐字逐句的代码,用户在视频中很好地使用了这段代码)

根本原因

java.lang.NullPointerException
org.apache.jsp.displayjobs_jsp._jspService(displayjobs_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
更新:这是我的servlet代码

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class displayjobs
 */
@WebServlet("/schedule")
public class schedule extends HttpServlet {
List list = new ArrayList();
Statement stmt;
ResultSet res;
private static final long serialVersionUID = 1L;

/**
 * @see HttpServlet#HttpServlet()
 */
public schedule() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try{
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
        String connectionUrl = "jdbc:sqlserver://10.11.1.246;databaseName=Test;integratedSecurity=false;user=sa;password=S0l1dConcepts";
        Connection con = DriverManager.getConnection(connectionUrl);
        String query = "select * from jobs";
        stmt = con.createStatement();
        res = stmt.executeQuery(query);
        while(res.next()){
            list.add(res.getString(1));
            list.add(res.getString(2));
            list.add(res.getString(3));
            list.add(res.getString(4));
            list.add(res.getString(5));
            list.add(res.getString(6));
            list.add(res.getString(7));
            list.add(res.getString(8));
            list.add(res.getString(9));
            list.add(res.getString(10));
        }
        res.close();
    }
    catch(Exception e){
        RequestDispatcher rd = request.getRequestDispatcher("/error.jsp");
        rd.forward(request, response);
    }
    finally{
        request.setAttribute("jobsData",list);
        RequestDispatcher rd = request.getRequestDispatcher("/displayjobs.jsp");
        rd.forward(request, response);
        list.clear();
        out.close();
    }

}

}

在jsp中,您试图获取“jobsData”的值,在servlet中,您将列表存储在“jData”中。由于这个原因,无法获取请求属性,并且数据被设置为null

1    List data = (List)request.getAttribute("jobsData");
2    for(itr = data.iterator(); itr.hasNext();
复制代码的第一行返回一个
NULL
列表,因为servlet中属性的名称已被另一个名称设置(如果您打算将“list”传递为“jobsData”),即“jData”

您需要修复此命名以使其正常工作

Edit 1:
在不同的时间点调用代码块
GET
在页面加载时调用,而
POST
在表单提交时调用。你得到NPE是因为这个区块没有做任何事情

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}

请检查一下基本情况。您所指的块是一个POST块。您需要在get块中预先填充相同的对象,以便在页面加载时传递数据。

Easy<代码>数据
。当您搜索为什么找不到属性(名称错误?)时,请考虑离开scriptlet并使用JSTL。(List)request.getAttribute(“jobsData”);有结果吗?为我们写“数据”为什么数据为空?我正在为属性使用正确的名称。如果有帮助的话,我将包括我的servlet代码。我不能仅仅使用数据。列表强制转换是代码正常工作所必需的。请确保我们正在从数据库获取数据,并且u正在转发的列表不为空。问题是我尝试使用一个字符串“hello”的列表执行此操作,但它仍然为空。我假设setAttribute是个问题,但我不知道从这里该怎么办。我道歉。我把它改成两个都和jobsData匹配。我仍然得到空指针异常。知道为什么吗?由于某种原因,当两个名称匹配时,request.getAttribute(jobsData)仍然返回null。我认为列表可能是问题所在,所以我尝试将jobsData设置为10。将request.getAttribute(jobsData)强制转换为整数后,它仍然返回null。知道为什么吗?我试着把它加入到doGet方法中。现在我得到:java.lang.IllegalStateException:提交响应后无法转发。知道为什么吗?看看@rafaborrego的回答!我道歉。我把它改成两个都和jobsData匹配。我仍然得到空指针异常。知道为什么吗?由于某种原因,当两个名称匹配时,request.getAttribute(jobsData)仍然返回null。我认为列表可能是问题所在,所以我尝试将jobsData设置为10。将request.getAttribute(jobsData)强制转换为整数后,它仍然返回null。你知道为什么吗?第一次加载页面时,它是用GET请愿书完成的,点击提交后,你可以用GET或POST请愿书完成。您仅在doPost方法中添加列表,因此第一次加载页面时不会添加列表。尝试将相同的代码添加到doGet方法我尝试将其添加到doGet方法。现在我得到:java.lang.IllegalStateException:提交响应后无法转发。知道为什么吗?如果抛出异常,它将执行两次向前,一次在catch块内,另一次在finally块内。因此,当你做第二次转发时,响应已经提交。请从锁扣上卸下前进档,然后重试。
 finally{
        request.setAttribute("jData",list);
        RequestDispatcher rd = request.getRequestDispatcher("/displayjobs.jsp");
        rd.forward(request, response);
        list.clear();
        out.close();
    }
Edit 1:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
}