利用javabean由servlet向JSP传递数据,HTTP状态 500 - 内部服务器错误,

HTTP状态 500 - 内部服务器错误

类型 异常报告

消息 在 [23] 行处理 [/index.jsp] 时发生异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况
org.apache.jasper.JasperException: 在 [23] 行处理 [/index.jsp] 时发生异常

20:
21: <%
22: List list = (List)request.getAttribute("ResultSet");
23: for(DepartmentBean item:list){
24: out.println(item.getDepartmentld()+" "+ item.getDepartmentName());
25: }
26: %>

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:611)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:500)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:326)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
servlet.GetDeptListServlet.doGet(GetDeptListServlet.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根本原因。
java.lang.NullPointerException: Cannot invoke "java.util.List.iterator()" because "list" is null
org.apache.jsp.index_jsp._jspService(index_jsp.java:146)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:326)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
servlet.GetDeptListServlet.doGet(GetDeptListServlet.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Cannot invoke "java.util.List.iterator()" because "list" is null
空指针异常

  1. request获取的ResultSet有问题,需要检查下传输的请求头参数,看下为什么是空的,可以考虑下postman之类的先做接口测试。
  2. 空指针异常处理,即使获取参数有问题,代码也要进行规避空指针的情况。修改举例如下:
List list = (List)request.getAttribute("ResultSet");
for(DepartmentBean item:list){
 out.println(item.getDepartmentld()+" "+ item.getDepartmentName());
 }
 修改为:
List list = (List)request.getAttribute("ResultSet");
if (list != null) for(DepartmentBean item:list) {
 out.println(item.getDepartmentld()+" "+ item.getDepartmentName());
 }

package servlet;

import java.io.IOException;
import java.sql.;
import java.util.
;
import bean.*;

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 GetDeptListServlet

  • /
    @WebServlet("/GetDeptListServlet")
    public class GetDeptListServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**

    • @see HttpServlet#HttpServlet()
    • /
      public GetDeptListServlet() {
      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

      try {
      Class.forName("com.mysql.jdbc.Driver").newInstance();
      String url = "jdbc:mysql://localhost:3306/CRM";
      String user= "root";
      String pwd ="123456";

      Connection conn = DriverManager.getConnection(url,user,pwd);

      String sql = "SELECT * FROM Department;";
      Statement stmt = conn.createStatement();

      ResultSet rs = stmt.executeQuery(sql);
      List list = new ArrayList();
      while(rs.next()) {

        DepartmentBean  model = new DepartmentBean();
        model.setDepartmentld(rs.getString("Departmentld"));
        model.setDepartmentName(rs.getString("DepartmentName"));
        list.add(model);
      

      }

      request.setAttribute("ResultSet",list);

      rs.close();
      stmt.close();
      conn.close();

      }
      catch(Exception ex) {

      }
      request.getRequestDispatcher("index.jsp").forward(request, response);

            //rs.close();
            //stmt.close();
            //conn.close();
      

      }

    /**

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

<%@ page language="java" contentType="texthtml; charset=UTF-8"
import="java.util.*,java.sql.*,bean.*"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath=request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

My JSP 'index.jsp' starting page<%

List list = (List)request.getAttribute("ResultSet");
for(DepartmentBean item:list){
out.println(item.getDepartmentld()+" "+ item.getDepartmentName());
}
%>

package bean;

public class DepartmentBean {
private String departmentld;
private String departmentName;
public String getDepartmentld() {
return departmentld;
}
public void setDepartmentld(String departmentld) {
this.departmentld = departmentld;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}

}

先判断是否为空 ,如果为空 然后new ArrayList即可解决,如果是查询问题则修改底层控制层代码即可

前面已经提到了,就是空指针异常。即你后端查询的数据没有结果,导致变量为null传到jsp,遍历失败!

空指针异常

List list = (List)request.getAttribute("ResultSet");

这个地方list 是null,检查下“ResultSet”这个key.