我这段代码哪里错了吗?报500

我这段代码哪里错了吗?报500

package com.imooc.servlet;

import java.io.IOException;
import java.util.List;

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 javax.websocket.RemoteEndpoint;

import com.imooc.domain.User;


@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//接收数据
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		//从ServletContext域中获得用户信息的集合
		List<User> list=(List<User>)this.getServletContext().getAttribute("list");
		for(User user:list) {
			//判断用户名是否正确
			if(username.equals(user.getUsername())) {
				//用户名正确
				if(password.equals(user.getPassword())) {
					//密码正确
					//登录成功
 //判断复选框是否勾选
String remember=request.getParameter("remember");
if("true".equals(remember)) {
	//记住用户名
	Cookie cookie=new Cookie("username", user.getUsername());
	//设置路径和时间
	cookie.setPath("/reg_login");
	cookie.setMaxAge(60*60*24);
	//将cookie回写到浏览器
	response.addCookie(cookie);
}
					//将用户的信息存在session中
					request.getSession().setAttribute("user", user);
					response.sendRedirect("/reg_login/success.jsp");
					return;
				}
			}
		}
		//登录失败
		request.setAttribute("msg","用户名或密码错误");
	    request.getRequestDispatcher("/login.jsp").forward(request, response);
	}
	

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

}

HTTP Status 500 – Internal Server Error

Type Exception Report

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

java.lang.NullPointerException
com.imooc.servlet.LoginServlet.doGet(LoginServlet.java:28)
javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Note The full stack trace of the root cause is available in the server logs.

Apache Tomcat/8.5.32


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

6回答
提问者 广州麻辣牛杂档 2018-08-01 12:05:58
package com.imooc.servlet;

import java.util.List;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import com.imooc.domain.*;



/**
 * 用户注册的初始化的Servlet
 */
@WebServlet("/InitServlet")
public class InitServlet extends HttpServlet {
@Override
public void init() throws ServletException {
	//创建一个list集合保存用户信息
	List<User>list=new ArrayList<User>();
	this.getServletContext().setAttribute("list", list);
}

}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>reg_login</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <description></description>
    <display-name>InitServlet</display-name>
    <servlet-name>InitServlet</servlet-name>
    <servlet-class>com.imooc.servlet.InitServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
</web-app>


  • 建议同学将@WebServlet("/InitServlet")去掉,同时使用配置文件和注解的方式对同一个Servlet进行配置就会出现问题,去掉以后再配置文件中对InitServlet配置访问路径后再试下~
    2018-08-01 16:50:26
好帮手慕珊 2018-07-31 17:13:14

把list中的内容打印一下,看看是否都为null,另外,贴一下把list中的内容存储ServletContext中的代码,也就是this.getServletContext().setAttribute()相关的代码。祝学习愉快!

http://img1.sycdn.imooc.com//climg/5b6027f10001d85006480196.jpg

  • 提问者 广州麻辣牛杂档 #1
    难受 发布时,一直转圈,发不出去
    2018-08-01 09:37:19
  • 提问者 广州麻辣牛杂档 #2
    http://docpe.com/Download/080109415813.doc
    2018-08-01 09:42:53
  • 是慕课网的问答区发不出内容吗?找到this.getServletContext().setAttribute()的位置了吗?你看一下2-3小节,老师有一个InitServlet初始化集合的类,你看一下是否有这个类,并且是否在web.xml中进行了一些初始化的配置。祝学习愉快!
    2018-08-01 11:40:00
提问者 广州麻辣牛杂档 2018-07-31 16:21:07
<%@page import="com.imooc.utils.CookieUtils"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<link rel="stylesheet" href="./css/login.css">
</head>
<body>
    <div class="login">
        <div class="header">
            <h1>
                <a href="./login.jsp">登录</a> <a href="./regist.jsp">注册</a>
            </h1>
            </div>
        <% 
        String username="";
        //获得从客户端携带过来的所有cookie
        Cookie[] cookies=request.getCookies();
        //从Cookie的数组中查找指定名称的cookie
        Cookie cookie=CookieUtils.findCookie(cookies, "username");
        if(cookie!=null){
        	username=cookie.getValue();
        }
         if(session.getAttribute("username")!=null){
        	username=(String)session.getAttribute("username");
        }
        String msg="";
        if(request.getAttribute("msg")!=null){
        	msg=(String)request.getAttribute("msg");
        }
        

        %>
        <h3><font color="red"><%=msg %></font></h3>
        <form action="/reg_login/LoginServlet" method="post" enctype="multipart/form-data">
            <table>
                <tr>
                    <td class="td1">用户名</td>
                    <td><input type="text" class="input1" name="username" value="<%=username %>"></td>
                </tr>
                <tr>
                <td class="td1">密码</td>
                <td><input type="password" class="input1" name="password"></td>
                </tr>
                <tr>
                <td class="td1" colspan="2">
                    <input type="checkbox" name="remember" value="true" checked="checked"> 记住用户名</td>
                </tr>
                <tr>
                    <td colspan="2">
                        <div class="btn-red">
                            <input type="submit" value="登录" id="login-btn">
                        </div>
                    </td>
                </tr>
            </table>

        </form>
    </div>
</body>
</html>


提问者 广州麻辣牛杂档 2018-07-31 16:19:22
package com.imooc.servlet;

import java.io.IOException;
import java.util.List;

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 javax.websocket.RemoteEndpoint;

import com.imooc.domain.User;


@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	//接收数据
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		//从ServletContext域中获得用户信息的集合
		List<User> list=(List<User>)this.getServletContext().getAttribute("list");
		for(User user:list) {
			//判断用户名是否正确
			if(username.equals(user.getUsername())) {
				//用户名正确
				if(password.equals(user.getPassword())) {
					//密码正确
					//登录成功
 //判断复选框是否勾选
String remember=request.getParameter("remember");
if("true".equals(remember)) {
	//记住用户名
	Cookie cookie=new Cookie("username", user.getUsername());
	//设置路径和时间
	cookie.setPath("/reg_login");
	cookie.setMaxAge(60*60*24);
	//将cookie回写到浏览器
	response.addCookie(cookie);
}
					//将用户的信息存在session中
					request.getSession().setAttribute("user", user);
					response.sendRedirect("/reg_login/success.jsp");
					return;
				}
			}
		}
		//登录失败
		request.setAttribute("msg","用户名或密码错误");
	    request.getRequestDispatcher("/login.jsp").forward(request, response);
	}
	

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

}


提问者 广州麻辣牛杂档 2018-07-31 16:18:40
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
<link rel="stylesheet" href="./css/reg.css">
</head>
<body>
    <div class="reg">
        <div class="header">
            <h1>
                <a href="./login.jsp">登录</a> <a href="./regist.jsp">注册</a>
            </h1>
            
        </div>
        
        <!-- 文件上传的条件
        *表单必须是post提交方式
        *表单必须有文件上传项,文件上传项必须有name和值
        *表单的enctype属性必须设置为multipart/from-data -->
        <%
        String msg="";
        if(request.getAttribute("msg")!=null){
        	msg=(String)request.getAttribute("msg");
        }
        %>
<%--         <h3><font color="red"><%=msg %></h3> --%>
        <form action="/reg_login/RegistServlet" method="post" enctype="multipart/form-data">
            <table>
                <tr>
                    <td class="td1">用户名</td>
                    <td><input type="text" class="input1" name="username"></td>
                </tr>
                <tr>
                    <td class="td1">密码</td>
                    <td><input type="password" class="input1" name="password"></td>
                </tr>
                <tr>
                    <td class="td1">昵称</td>
                    <td><input type="text" class="input1" name="nickname"></td>
                </tr>
                <tr>
                    <td class="td1">性别</td>
                    <td>
                        <input type="radio" name="sex" value="male">男
                        <input type="radio" name="sex" value="female">女
                    </td>
                </tr>
                <tr>
                    <td class="td1">上传头像</td>
                    <td><input type="file" id="photo" name="upload"></td>
                </tr>
                <tr>
                    <td class="td1">兴趣爱好</td>
                    <td><label> 
                        <input type="checkbox" name="hobby" value="篮球">篮球
                        <input type="checkbox" name="hobby" value="足球">足球
                        <input type="checkbox" name="hobby" value="排球">排球 
                        <input type="checkbox" name="hobby" value="羽毛球">羽毛球
                    </label></td>
                </tr>
                <tr>
                    <td colspan="2">
                        <div class="btn-red">
                            <input type="submit" value="注册" id="reg-btn">
                        </div>
                    </td>
                </tr>
            </table>
        </form>
    </div>
</body>
</html>


好帮手慕珊 2018-07-31 10:02:46

500是内部错误,是代码原因引起的。这个错误是空指针异常,一般是由于对象为null,但是还继续调用对象的方法导致的,从错误提示上可以看到,LoginServlet的28行出问题了,可以看看你电脑上28行是什么内容,然后排查一下对象为什么是null了。祝学习愉快!

  • 提问者 广州麻辣牛杂档 #1
    28行: if(username.equals(user.getUsername())) { 注册后,登录就出现这个500,我发代码给你帮我看下可以么
    2018-07-31 10:56:27
  • 你把你的代码都贴到问答区吧,就像之前的代码一样,贴到回答里。包括jsp页面,还有和list相关的代码
    2018-07-31 11:33:31
  • 上传了哈
    2018-07-31 16:25:26
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师