马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
课上学习Servlet和JSP做一个可以添加学生和查看学生的成绩管理系统,但是在查看学生时发生了500的错误:
错误截图
相关代码:<%@ page import="java.util.ArrayList" %>
<%@ page import="com.itheima.bean.Student" %><%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2023/4/24
Time: 10:50
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>查看学生成绩</title>
</head>
<body>
<table width="600px" border="1px">
<tr>
<th>学生姓名</th>
<th>学生姓名</th>
<th>学生姓名</th>
</tr>
<%
ArrayList<Student> students = (ArrayList<Student>) session.getAttribute("students");
if (students.size() != 0) {
for (Student s : students) {
%>
<tr>
<td><%=s.getUsername()%>
</td>
<td><%=s.getAge()%>
</td>
<td><%=s.getScore()%>
</td>
</tr>
<%
}
}
%>
</table>
</body>
</html>
对应的Servlet代码:package com.itheima.servlet;
import com.itheima.bean.Student;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
@WebServlet("/listStudentServlet")
public class ListStudentServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//创建字符输入流,读取相关文件
//String realPath = getServletContext().getRealPath("stu.txt");
BufferedReader br = new BufferedReader(new FileReader("c:/test/develop/stu.txt"));
//创建集合保存对象
ArrayList<Student> list = new ArrayList<>();
//读取文件数据并封装
String line;
while ((line=br.readLine()) != null){
Student s = new Student();
String[] arr = line.split(",");
s.setUsername(arr[0]);
s.setAge(Integer.parseInt(arr[1]));
s.setScore(Integer.parseInt(arr[2]));
list.add(s);
}
//将数据存入会话域
req.getSession().setAttribute("students",list);
//重定向到查看学生页面
resp.sendRedirect("/test/listStudent.jsp");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
恳请各位大佬指正
从你的代码来看,这个问题可能是由于`students`这个session属性没有正确地初始化导致的。如果`ListStudentServlet`在查看学生的JSP页面之前没有被调用,那么`students`属性将不存在,从而导致NullPointerException。
为了解决这个问题,你可以在JSP页面中添加一个非空检查,以确保`students`不为空。如果`students`为null,你可以将其初始化为空列表,这样就不会出现NullPointerException了。
修改后的JSP代码如下:
<%
ArrayList<Student> students = (ArrayList<Student>) session.getAttribute("students");
if (students == null) {
students = new ArrayList<>();
}
if (students.size() != 0) {
for (Student s : students) {
%>
<tr>
<td><%=s.getUsername()%>
</td>
<td><%=s.getAge()%>
</td>
<td><%=s.getScore()%>
</td>
</tr>
<%
}
}
%>
另外,我注意到在`<table>`标签里的三个`<th>`标签的内容都是“学生姓名”,建议你修改为对应的标题,例如:
<tr>
<th>学生姓名</th>
<th>学生年龄</th>
<th>学生成绩</th>
</tr>
这样,即使在第一次访问JSP页面时`ListStudentServlet`没有被调用,也不会出现NullPointerException错误,同时也保证了表格标题的正确显示。希望这些修改能帮助你解决问题。
|