Java 导致Http 500错误的循环的Servlet
我正在创建一个登录servlet。我不知道为什么,但我的for循环导致它显示500级错误。任何帮助都将不胜感激。 创建的类只是一个带有getter和setter的基本类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);
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语句。你确定你在上下文中添加了“家庭作业用户”吗?