session登录练习使用解决null显示问题

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


*解决主页面用户名显示为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>");
			//直接响应
			//请求转发
			//重定向
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值