会话:重定向不可以用request绑定数据,request又叫一次请求,重定向之前会将request中的数据全部清空,所以如果想要在重定向之后使用数据,则需要用到session对象来进行数据绑定。什么是session?session又叫会话,我们所打开的一个页面,即一个会话,而会话的范围要大于request,因为只要会话存在,那么session对象就一直存在,绑定在其之上的数据就会一直存在,不会当页面跳转时被清空数据。并且在本实例中,主页面引用了框架集,如果使用request绑定数据的话,绑定的数据只能在main.jsp页面接收到,而其中包含的index.jsp和top.jsp页面则无法使用,也就无法实现页面上显示用户名的功能。所以在此处使用重定向及session对象进行数据绑定更为适合。Session使用方法如代码所示。从数据库获取数据等方法实现即entity、dao、daoImpl、DBUtil包及类略,此处仅列举关键代码
login1.jsp部分代码
<form action="UserServlet" method="post">
<ul>
<li><input name="uname" type="text" class="loginuser" value="admin" onclick="JavaScript:this.value=''"/></li>
<li><input name="upwd" type="text" class="loginpwd" value="密码" onclick="JavaScript:this.value=''"/></li>
<li><input name="" type="submit" class="loginbtn" value="登录" /><label>
<input name="" type="checkbox" value="" checked="checked" />记住密码</label><label><a href="#">忘记密码?</a></label></li>
<li><span style="color:red">${login_error}</span></li>
</ul>
</form>
UserServlet doPost方法代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
String uname=request.getParameter("uname");
String upwd=request.getParameter("upwd");
IUserDAO dao=new UserDAOImpl();
User user=dao.findUserBySnameAndSpwd(uname, upwd);
if(user==null){
request.setAttribute("login_error","用户名或密码错误");
request.getRequestDispatcher("login1.jsp").forward(request,response);
}else{
//1.获取session
HttpSession session=request.getSession();
//2.将数据绑定到session上
session.setAttribute("user",user);
response.sendRedirect("main.jsp");
}
}
index.jsp部分代码
<b>${user.uname}早上好,欢迎使用信息管理系统</b>(${user.uname}@uimaker.com)
top.jsp部分代码
<span>${user.uname}</span>
效果图:
移除会话:在该页面有退出功能,现在需要对退出功能进行编程。退出一定是在已经登录的情况下才能点击退出,但是此时会话已经绑定了一个值,点击退出的话需要重新会到login1.jsp页面,返回该页面又要重新登录,那么session则又保存了另外一个信息。这种情况不是不可以,但是不建议在session上绑定重名的值,所以我们为了解决该问题,可以在点击退出时先不直接跳转至login1.jsp,先跳转至LogoutServlet,在该servlet中将会话上绑定的数据清空,清空后再进行跳转。
top.jsp部分代码
<li><a href="LogoutServlet" target="_parent">退出</a></li>
LogoutServlet doPost方法代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1.获取会话
HttpSession session=request.getSession();
//2.移除session绑定名为user的对象
session.removeAttribute("user");
//3.使session失效
session.invalidate();
//4.重新跳转到登录页面
response.sendRedirect("login.jsp");
}