Java 导致Http 500错误的循环的Servlet

Java 导致Http 500错误的循环的Servlet,java,html,jsp,servlets,Java,Html,Jsp,Servlets,我正在创建一个登录servlet。我不知道为什么,但我的for循环导致它显示500级错误。任何帮助都将不胜感激。 创建的类只是一个带有getter和setter的基本类 public Login() { super(); } boolean isNameValid; boolean isPassValid; public void init(ServletConfig config) throws ServletException { super.init(config);

我正在创建一个登录servlet。我不知道为什么,但我的for循环导致它显示500级错误。任何帮助都将不胜感激。 创建的类只是一个带有getter和setter的基本类

public Login() {
    super();

}

boolean isNameValid;
boolean isPassValid;

public void init(ServletConfig config) throws ServletException {
    super.init(config);
    ServletContext context = this.getServletContext();
    if (context.getAttribute("HomeworkUsers") == null) {
        ArrayList<CS320User> HomeworkUsers = new ArrayList<CS320User>();
        getServletContext().setAttribute("HomeworkUsers", HomeworkUsers);

        CS320User user1 = new CS320User("John", "Doe", "john@doe.com", "1!");
        CS320User user2 = new CS320User("Joe", "Boxer", "joe@boxer.com",
                "2@");

        HomeworkUsers.add(user1);
        HomeworkUsers.add(user2);

        context.setAttribute("HomeworkUsers", HomeworkUsers);
    }
}

protected void doGet(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {
    ServletContext context = this.getServletContext();

    ArrayList<CS320User> HomeworkUsers = (ArrayList<CS320User>) context
            .getAttribute("HomeworkUsers");

    response.setContentType("text/html");
    PrintWriter out = response.getWriter();

    out.println("<!doctype html>");
    out.println("<html>");
    out.println("<head>");
    out.println("</head>");
    out.println("<body>");
    out.println("<h3>Login Servlet</h3>");

    out.println("<form action=\"Login\" method=\"post\">");

    out.println("Username: <input type='text' name='Username'/>");
    out.println("<br/>");
    out.println("Create Password: <input type='password' name= 'password' /> ");
    out.println("<br/>");
    out.println("<br/>");
    out.println("<label for =\"Remember Me\"> Remember Me");
    out.println("<input type=\"checkbox\" id= \"Remember Me\">");
    out.println("</label>");
    out.println("<br/>");

    out.println("<input type='submit' name='login' value='Login' /> ");

    out.println("<br>");

    for (CS320User users : HomeworkUsers) {
        if (users.getEmail().contains(request.getParameter("Username"))
                && users.getPassword().contains(
                        request.getParameter("password"))) {

            out.println(users.getEmail());
            out.println(users.getFirst());
            isNameValid = true;
            isPassValid = true;
        }
    }
    String Username = request.getParameter("Username");
    String password = request.getParameter("password");
    out.println(Username);
    out.println(password);
    out.println(isNameValid);
    out.println(isPassValid);
    out.println("</form>");
    out.println("</body>");
    out.println("</html>");
}

protected void doPost(HttpServletRequest request,
        HttpServletResponse response) throws ServletException, IOException {

    if (isNameValid == true && isPassValid == true) {
        response.sendRedirect("Welcome");
    }
    doGet(request, response);

}
公共登录(){
超级();
}
布尔值是有效的;
布尔值是有效的;
public void init(ServletConfig config)抛出ServletException{
super.init(config);
ServletContext=this.getServletContext();
if(context.getAttribute(“HomeworkUsers”)==null){
ArrayList HomeworkUsers=新建ArrayList();
getServletContext().setAttribute(“HomeworkUsers”,HomeworkUsers);
CS320User user1=新的CS320User(“John”、“Doe”、“Doe”)john@doe.com", "1!");
CS320User user2=新的CS320User(“Joe”、“Boxer”、”joe@boxer.com",
"2@");
添加(user1);
添加(user2);
setAttribute(“HomeworkUsers”,HomeworkUsers);
}
}
受保护的无效数据集(HttpServletRequest请求,
HttpServletResponse响应)引发ServletException,IOException{
ServletContext=this.getServletContext();
ArrayList HomeworkUsers=(ArrayList)上下文
.getAttribute(“家庭作业用户”);
response.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
out.println(“”);
println(“登录Servlet”);
out.println(“”);
out.println(“用户名:”);
out.println(“
”); println(“创建密码:”); out.println(“
”); out.println(“
”); out.println(“记住我”); out.println(“”); out.println(“”); out.println(“
”); out.println(“”); out.println(“
”); 用于(CS320用户:家庭作业用户){ if(users.getEmail()包含(request.getParameter(“用户名”)) &&users.getPassword()包含( request.getParameter(“密码”)){ out.println(users.getEmail()); out.println(users.getFirst()); isNameValid=true; isPassValid=true; } } 字符串Username=request.getParameter(“用户名”); 字符串密码=request.getParameter(“密码”); out.println(用户名); out.println(密码); out.println(isNameValid); out.println(isPassValid); out.println(“”); out.println(“”); out.println(“”); } 受保护的void doPost(HttpServletRequest请求, HttpServletResponse响应)引发ServletException,IOException{ if(isNameValid==true&&isPassValid==true){ 回复。发送重定向(“欢迎”); } doGet(请求、响应); }
如果不记录异常,我的意思是如果不处理它们,在运行时可能会像预期的那样出现500个错误

要防止这种情况,只需使用
try catch
块并在catch块中处理异常。(至少记录它们)

在代码中,只有一件事会导致for循环行中出现异常,那就是家庭作业用户的可能性为空

ArrayList<CS320User> HomeworkUsers = (ArrayList<CS320User>) context
            .getAttribute("HomeworkUsers");
ArrayList HomeworkUsers=(ArrayList)上下文
.getAttribute(“家庭作业用户”);

在我在顶部编写的代码部分中,您将获得一个上下文属性,它可以为null。您的解决方案可能是检查它是否为空。

如果您遇到500个错误,则日志中可能存在异常。找到它并将其发布在问题中-或者如果您可以根据异常(很可能)解决问题,则删除该问题。我非常确定您得到的是NullPointerException,请您将您的代码块(for循环)放入try,catch代码块并记录捕获的异常。谢谢。尝试,捕捉似乎使它现在的工作,但我有另一个问题。看起来我的ArrayList还是空的。至少我相信是这样,因为它从来没有像它应该的那样进入if语句。你确定你在上下文中添加了“家庭作业用户”吗?