鱼C论坛

 找回密码
 立即注册
查看: 1592|回复: 1

[已解决]JSP中出现了java.lang.NullPointerException报错

[复制链接]
发表于 2023-4-24 13:23:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
课上学习Servlet和JSP做一个可以添加学生和查看学生的成绩管理系统,但是在查看学生时发生了500的错误:

错误截图

错误截图

相关代码:
  1. <%@ page import="java.util.ArrayList" %>
  2. <%@ page import="com.itheima.bean.Student" %><%--
  3.   Created by IntelliJ IDEA.
  4.   User: Administrator
  5.   Date: 2023/4/24
  6.   Time: 10:50
  7.   To change this template use File | Settings | File Templates.
  8. --%>
  9. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  10. <html>
  11. <head>
  12.     <title>查看学生成绩</title>
  13. </head>
  14. <body>
  15. <table width="600px" border="1px">
  16.     <tr>
  17.         <th>学生姓名</th>
  18.         <th>学生姓名</th>
  19.         <th>学生姓名</th>
  20.     </tr>
  21.     <%
  22.         ArrayList<Student> students = (ArrayList<Student>) session.getAttribute("students");
  23.         if (students.size() != 0) {
  24.             for (Student s : students) {
  25.     %>
  26.     <tr>
  27.         <td><%=s.getUsername()%>
  28.         </td>
  29.         <td><%=s.getAge()%>
  30.         </td>
  31.         <td><%=s.getScore()%>
  32.         </td>
  33.     </tr>
  34.     <%
  35.             }
  36.         }
  37.     %>
  38. </table>
  39. </body>
  40. </html>
复制代码

对应的Servlet代码:
  1. package com.itheima.servlet;

  2. import com.itheima.bean.Student;

  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.*;
  9. import java.util.ArrayList;

  10. @WebServlet("/listStudentServlet")
  11. public class ListStudentServlet extends HttpServlet {
  12.     @Override
  13.     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  14.         //创建字符输入流,读取相关文件
  15.         //String realPath = getServletContext().getRealPath("stu.txt");
  16.         BufferedReader br = new BufferedReader(new FileReader("c:/test/develop/stu.txt"));

  17.         //创建集合保存对象
  18.         ArrayList<Student> list = new ArrayList<>();

  19.         //读取文件数据并封装
  20.         String line;
  21.         while ((line=br.readLine()) != null){
  22.             Student s = new Student();
  23.             String[] arr = line.split(",");
  24.             s.setUsername(arr[0]);
  25.             s.setAge(Integer.parseInt(arr[1]));
  26.             s.setScore(Integer.parseInt(arr[2]));
  27.             list.add(s);

  28.         }

  29.         //将数据存入会话域
  30.         req.getSession().setAttribute("students",list);

  31.         //重定向到查看学生页面
  32.         resp.sendRedirect("/test/listStudent.jsp");
  33.     }

  34.     @Override
  35.     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  36.         doGet(req, resp);
  37.     }
  38. }
复制代码

恳请各位大佬指正
最佳答案
2023-4-24 13:26:07
从你的代码来看,这个问题可能是由于`students`这个session属性没有正确地初始化导致的。如果`ListStudentServlet`在查看学生的JSP页面之前没有被调用,那么`students`属性将不存在,从而导致NullPointerException。

为了解决这个问题,你可以在JSP页面中添加一个非空检查,以确保`students`不为空。如果`students`为null,你可以将其初始化为空列表,这样就不会出现NullPointerException了。

修改后的JSP代码如下:

  1. <%
  2.     ArrayList<Student> students = (ArrayList<Student>) session.getAttribute("students");
  3.     if (students == null) {
  4.         students = new ArrayList<>();
  5.     }
  6.     if (students.size() != 0) {
  7.         for (Student s : students) {
  8. %>
  9. <tr>
  10.     <td><%=s.getUsername()%>
  11.     </td>
  12.     <td><%=s.getAge()%>
  13.     </td>
  14.     <td><%=s.getScore()%>
  15.     </td>
  16. </tr>
  17. <%
  18.         }
  19.     }
  20. %>
复制代码


另外,我注意到在`<table>`标签里的三个`<th>`标签的内容都是“学生姓名”,建议你修改为对应的标题,例如:

  1. <tr>
  2.     <th>学生姓名</th>
  3.     <th>学生年龄</th>
  4.     <th>学生成绩</th>
  5. </tr>
复制代码


这样,即使在第一次访问JSP页面时`ListStudentServlet`没有被调用,也不会出现NullPointerException错误,同时也保证了表格标题的正确显示。希望这些修改能帮助你解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-4-24 13:26:07 | 显示全部楼层    本楼为最佳答案   
从你的代码来看,这个问题可能是由于`students`这个session属性没有正确地初始化导致的。如果`ListStudentServlet`在查看学生的JSP页面之前没有被调用,那么`students`属性将不存在,从而导致NullPointerException。

为了解决这个问题,你可以在JSP页面中添加一个非空检查,以确保`students`不为空。如果`students`为null,你可以将其初始化为空列表,这样就不会出现NullPointerException了。

修改后的JSP代码如下:

  1. <%
  2.     ArrayList<Student> students = (ArrayList<Student>) session.getAttribute("students");
  3.     if (students == null) {
  4.         students = new ArrayList<>();
  5.     }
  6.     if (students.size() != 0) {
  7.         for (Student s : students) {
  8. %>
  9. <tr>
  10.     <td><%=s.getUsername()%>
  11.     </td>
  12.     <td><%=s.getAge()%>
  13.     </td>
  14.     <td><%=s.getScore()%>
  15.     </td>
  16. </tr>
  17. <%
  18.         }
  19.     }
  20. %>
复制代码


另外,我注意到在`<table>`标签里的三个`<th>`标签的内容都是“学生姓名”,建议你修改为对应的标题,例如:

  1. <tr>
  2.     <th>学生姓名</th>
  3.     <th>学生年龄</th>
  4.     <th>学生成绩</th>
  5. </tr>
复制代码


这样,即使在第一次访问JSP页面时`ListStudentServlet`没有被调用,也不会出现NullPointerException错误,同时也保证了表格标题的正确显示。希望这些修改能帮助你解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-22 09:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表