
*解决主页面用户名显示为null的问题:
* 原因:因为在用户登录成功后使用重定向显示主页面,两次请求,而用户的信息在第一次请求中,第二次请求中没有户 数据,所以显示为null




当你关闭浏览器时,再次打开浏览器,输入http://localhost:8080/login/ck,会发现报空指针异常的错误
原因是在于登录页面有两个:一个是请求登录页面PageServlet.java,另外一个是三天免登录的页面CookieServlet.java
故需要把这个登录页面的用户信息都应该放在session对象中。


将会自动跳转到如下图:

MainServlet.java
package com.dym.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.dym.pojo.User;
public class MainServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
//获取session中的数据
User u=(User)req.getSession().getAttribute("user");
//处理请求信息
//响应处理结果
resp.getWriter().write("<html>");
resp.getWriter().write("<head>");
resp.getWriter().write("</head>");
resp.getWriter().write("<body>");
resp.getWriter().write("<h3>欢迎"+u.getUname()+"访问dym管理系统</h3>");
resp.getWriter().write("<hr>");
resp.getWriter().write("<form action='show' method='get'>");
resp.getWriter().write("<input type='submit' value='查看个人信息'>");
resp.getWriter().write("</form>");
resp.getWriter().write("</body>");
resp.getWriter().write("</html>");
}
}
ShowServlet.java
package com.dym.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.dym.pojo.User;
public class ShowServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setContentType("text/html;charset=utf-8");
//获取请求信息
HttpSession hs=req.getSession();
if(hs.getAttribute("user")==null){
resp.sendRedirect("/login/ck");
return;
}
User u=(User)hs.getAttribute("user");
//处理请求信息
//响应处理结果
resp.getWriter().write("<html>");
resp.getWriter().write("<head>");
resp.getWriter().write("</head>");
resp.getWriter().write("<body>");
resp.getWriter().write("<table border='1px'>");
resp.getWriter().write("<tr>");
resp.getWriter().write("<td>用户名</td>");
resp.getWriter().write("<td>"+u.getUname()+"</td>");
resp.getWriter().write("</tr>");
resp.getWriter().write("<tr>");
resp.getWriter().write("<td>密码</td>");
resp.getWriter().write("<td>"+u.getPwd()+"</td>");
resp.getWriter().write("</tr>");
resp.getWriter().write("</table>");
resp.getWriter().write("</body>");
resp.getWriter().write("</html>");
//直接响应
//请求转发
//重定向
}
}




本文主要介绍了如何处理在登录系统中遇到的主页面用户名显示为null的问题,以及因关闭浏览器后再打开导致的空指针异常。问题根源在于两次请求间Session数据丢失。为了解决这个问题,建议将用户信息存放在Session对象中,确保请求间的会话数据完整,从而避免页面显示异常。

1万+

被折叠的 条评论
为什么被折叠?



