抬头望树 2024-05-31 16:08 采纳率: 83.3%
浏览 3

JavaWeb出现错误提问

img

请问idea里写的代码这个错误怎么改呀?写了一个index.servlet还有student.servlet


import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "indexServlet",urlPatterns = "/index")
public class indexServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie[] cookies = request.getCookies();
        String name = null;
        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("name".equals(cookie.getName())) {
                    name = cookie.getValue();
                    break;
                }
            }
        }
        if(name!=null){
            request.setAttribute("prefilledAccount",name);
        }
        RequestDispatcher dispatcher= request.getRequestDispatcher("login.jsp");
        dispatcher.forward(request,response);
    }

}
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import java.io.IOException;
@WebServlet(name="loginServlet",urlPatterns = "/login")
public class loginServlet extends javax.servlet.http.HttpServlet {
    protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
        String name = request.getParameter("number");
        String PassWord = request.getParameter("password");
        if (name.equals("admin") && PassWord.equals("admin")) {
            Cookie cookie=new Cookie("name",name);
            response.addCookie(cookie);
            response.sendRedirect("student.jsp");
        } else {
            response.sendRedirect("login.jsp");
        }
    }
    protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {

    }
}

import swpu.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.IOException;
import java.util.ArrayList;
import java.util.List;

@WebServlet(name="studentServlet",urlPatterns = "/stu")
public class studentServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        List<Student> students = new ArrayList<>();

            for (int i = 0; i < 15; i++) {
                Student student = new Student();
                student.setId(3 + i);
                student.setCno("2022317741" + i);
                student.setName("student" + i);
                student.setMajor("网络工程");
                student.setGrade(2022);
                students.add(student);
            }
        request.setAttribute("students", students);
        request.getRequestDispatcher("student.jsp").forward(request, response);
    }
}

这是student.jsp的内容:

<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: HuaWei
  Date: 2024/5/17
  Time: 11:50
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="swpu.Student" %>
<html>
<head>
    <title>Title</title>
    <style>
        td{
            width:100px;
            height:20px;
            border:1px solid black;
        }
        #one{
            float: right;
        }
        #two{
            float: right;
            color:lightblue;
            border:none;
            background-color:white;
        }
        #three{
            float:left;
            color:lightblue;
            border:none;
            background-color:white;
        }
    </style>
    <script>

        function sure() {
            alert("确定要删除吗?");
        }
    </script>
</head>
<body>
<form method="post" action="${pageContext.request.contextPath}/untitled/stu">
    <table cellspacing="0">
        <tr>
            <td colspan="6">
                学生基本信息
                <span ><input type="submit" value="添加" id="one" onclick="change()"></span>
            </td>
        </tr>
        <tr>
            <td>
                序号
            </td>
            <td>
                学号
            </td>
            <td>
                姓名
            </td>
            <td>
                专业
            </td>
            <td>
                年级
            </td>
            <td>
                操作
            </td>
        </tr>
        <tr>
            <td>
                1
            </td>
            <td>
                001
            </td>
            <td>
                张三
            </td>
            <td>
                网络工程
            </td>
            <td>
                2022级
            </td>
            <td>
                <input type="submit" value="修改" id="three"><input type="button" value="删除" id="two" onclick="sure()">
            </td>
        </tr>
        <tr>
            <td>
                2
            </td>
            <td>
                002
            </td>
            <td>
                张四
            </td>
            <td>
                网络工程
            </td>
            <td>
                2022级
            </td>
            <td>
                <input type="submit" value="修改" id="three"onclick="change()"><input type="button" value="删除" id="two" onclick="sure()">
            </td>
        </tr>
        <tr>
            <td>
                3
            </td>
            <td>
                003
            </td>
            <td>
                张五
            </td>
            <td>
                网络工程
            </td>
            <td>
                2022级
            </td>
            <td>
                <input type="submit" value="修改" id="three" onclick="change()"><input type="button" value="删除" id="two" onclick="sure()">
            </td>
        </tr>

        <%
            List<Student> students = (List<Student>) request.getAttribute("students");
            for (Student student : students) {
        %>
        <tr>
            <td><%= student.getId()%></td>
            <td><%= student.getCno() %></td>
            <td><%= student.getName() %></td>
            <td><%= student.getMajor() %></td>
            <td><%= student.getGrade() %></td>
            <td>
                <input type="submit" value="修改" id="three" onclick="change()"><input type="button" value="删除" id="two" onclick="sure()">
            </td>
        </tr>
        <%
            }
        %>

    </table>
</form>
</body>
</html>


  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-05-31 16:08
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    根据你提供的错误信息和代码,HTTP 500内部服务器错误是由于在student.jsp页面中访问了null对象导致的NullPointerException。错误发生在student.jsp的第134行,这行代码试图遍历一个名为students的请求属性,但这个属性在此时是null

    解决步骤:

    1. 检查studentServlet是否正确传递了students列表: 在你的studentServlet中,你已经创建了一个students列表并添加了一些Student对象。确保这个列表在被设置为请求属性之前不是null

      request.setAttribute("students", students);
      

      这段代码看起来是正确的,但你需要确保students列表在调用setAttribute之前已经被正确初始化并填充了数据。

    2. 确保studentServlet在所有情况下都能正确执行: 检查studentServletdoGet方法是否在所有分支路径中都设置了students属性。如果存在某些条件分支没有设置这个属性,那么在这些分支的执行路径中,students将为null

    3. student.jsp中添加空值检查:student.jsp中,当尝试访问students列表之前,先检查它是否为null

      <% 
          List<Student> students = (List<Student>) request.getAttribute("students");
          if (students == null || students.isEmpty()) {
              // 处理空列表的情况,例如显示一个消息
              out.println("<p>没有学生数据。</p>");
          } else {
              // 正常遍历和显示学生数据
              for (Student student : students) {
      %>
      <!-- 你的学生数据展示代码 -->
      <%
              }
          }
      %>
      
    4. 检查请求转发是否正确: 确保loginServlet在重定向到student.jsp之前,studentServlet已经被正确调用,并且students属性被设置。

    5. 查看服务器日志: 错误信息提示可以在服务器日志中查看更详细的堆栈跟踪信息。检查服务器日志以获取更多线索。

    6. 调试和测试: 使用调试工具逐步执行代码,检查students属性在传递到student.jsp之前的状态。

    代码实现:

    根据你的描述,你的studentServlet看起来是正确的。你需要确保在loginServlet中正确调用了studentServlet。如果loginServlet在重定向之前没有调用studentServlet,那么student.jsp将无法接收到students属性。

    参考资料:

    这些资源可以帮助你更好地理解Servlets和JSP的工作原理,以及如何调试和解决这类问题。

    最后,请确保你的IDE和服务器配置正确,以便能够正确地运行和调试你的Java Web应用程序。如果你使用的是IntelliJ IDEA,它提供了强大的调试工具来帮助你诊断问题。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月31日
  • 创建了问题 5月31日