自动登录小demo报空指针异常(NullPointerException)
这是一个登录小demo 密码用户名是固定的 然后利用session实现自动登录功能
前端代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="lo.do" method="post">
<table>
<tr>
<td>姓名</td>
<td><input type="text" name="user"></td>
</tr>
<tr>
<td>密码</td>
<td><input type="password" name="password"></td>
</tr>
<tr>
<td><input type="submit" value="登录"> </td>
</tr>
</table>
</form>
</body>
</html>
自动登录url servlet
package cn.baidu.c_autologin;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/In.do")
public class IndexServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
//判断是否有session,如果有值,登录,没有就登陆界面
//获取session对象,非创建方式
HttpSession session = request.getSession();
//判断存在session的对象和存储的信息
String name = (String)session.getAttribute("name");
//登陆的session name 盖亚 因为是简单测试 所以默认只要用户名对就自动登录
if(session !=null && name.equals("盖亚")){
String html="<font size='7' color='green'>欢迎铁子来到直播间</font><a href='login.html'> <input type='button' value='注销'></a>";
//登录成功以后假设到一个页面成功
response.getWriter().append(html);
}else {
//如果 session里面没有值的话 说明 之前没有登陆过 重定向到登录界面
response.sendRedirect(request.getContextPath()+"/login.html");
}
}
}
错误图:
知道了这里的错误是在
if(session !=null && name.equals("盖亚")){
解决方案
if(session !=null && "盖亚".equals(name)){
错误原因:
session.getAttribute("name"); //我们这个时候如果还没有存入 name 的话 会得到 null
//而我后来也用
String name="";
System.out.println(name.equals("盖亚")); //测试发现 结果就是空指针异常
所以下回我们在使用equals()方法的时候要尽量确定前面的值一定不能为空