登录/注册后跳回登录/注册前的页面实现方法

网站开发中经常会遇到这样的问题,登录后自动转到了首页或者用户管理首页,这样有时候会让用户觉得很不方便,特别是电子商务类的网站,当用于在浏览产品页面时,需要购买,但是只有登录后的用户才能进入购买页面,所以如果当用户登录后进入的不是他登录前的产品浏览页面,他得去重新找,这是非常不友好的。

可以通过request.getHeader("referer");方式来实现登录/注册后返回进入登录或注册页面前的页面

举例:

java 代码
  1. /**  
  2.  * 进入到登录页面  
  3.  * @param mapping  
  4.  * @param form  
  5.  * @param request  
  6.  * @param response  
  7.  * @return  
  8.  */  
  9. public ActionForward loginview(ActionMapping mapping, ActionForm form,   
  10.         HttpServletRequest request, HttpServletResponse response) {    
  11.   
  12.     //登录后跳转回进来的页面,如果进来之前的页面是登录和退出,则登录后跳转到首页   
  13.     String pagefrom = request.getHeader("referer");   
  14.     if(pagefrom.indexOf("method=login")>0 || pagefrom.indexOf("method=logout")>0)   
  15.     {   
  16.         pagefrom = pagefrom.substring(0,pagefrom.lastIndexOf("/")+1);   
  17.     }   
  18.     request.setAttribute("pagefrom", pagefrom);   
  19.        
  20.     saveToken(request);   
  21.        
  22.     User object = null;   
  23.     try {   
  24.         object = entityClass.newInstance();   
  25.     } catch (InstantiationException e) {   
  26.         log.error(e);   
  27.     } catch (IllegalAccessException e) {   
  28.         log.error(e);   
  29.     }   
  30.     initForm(form, request, object);   
  31.     return mapping.findForward(LOGINVIEW);   
  32. }  

 

在登录页面中设置hidden元素:

登录页面部分代码
  1. <html:form action="/userm.do" focus="loginname" styleClass="u_login_form" onsubmit="return validateUserForm(this)">  
  2.                 <input type="hidden" name="method" value="login"/>  
  3.                 <input type="hidden" name="pagefrom" value="${ pagefrom }"/>  
  4.                 <input type="hidden" name="name" value="name"/>  
  5.                 <input type="hidden" name="mail" value="yahaitt@163.com"/>  
  6.                 <div class="l"><img src="${css}/images/login_icon_01.gif" />div>  
  7.                 <div class="l">  
  8.                     <html:text property="loginname" styleClass="text"/><br />  
  9.                     <html:password property="password" styleClass="text"/><br />  
  10.                     <%@ include file="/commons/messages.jsp" %>  
  11.                 div>  
  12.                 <div class="l"><html:img src="${css}/images/login_icon_02.gif" onclick="if(validateUserForm(document.userForm)) document.userForm.submit();"/>div>  
  13.                 <div class="c">div>  
  14.             html:form>  
  15.             <html:javascript formName="userForm" staticJavascript="false" dynamicJavascript="true" cdata="false"/>  
  16.             <script type="text/javascript" src="${ctx}/scripts/validator.jsp">script>  

 

根据登录页面中的pagefrom元素的值,在登录成功后跳转到该值对应的页面

登录代码:

java 代码
  1.   
  2.     /**  
  3.      * 登录  
  4.      * @param mapping  
  5.      * @param form  
  6.      * @param request  
  7.      * @param response  
  8.      * @return  
  9.      */  
  10.     public ActionForward login(ActionMapping mapping, ActionForm form,   
  11.             HttpServletRequest request, HttpServletResponse response) {    
  12.         String pagefrom = request.getParameter("pagefrom");   
  13.         request.setAttribute("pagefrom", pagefrom);   
  14.            
  15.         if (isCancelled(request))   
  16.             return list(mapping, form, request, response);   
  17.         if (!isTokenValid(request)){   
  18.             saveDirectlyError(request, "重复提交");   
  19.             return mapping.findForward(LOGINVIEW);   
  20.         }   
  21. //      resetToken(request);   
  22.            
  23.         // run validation rules on this form   
  24.         ActionMessages errors = form.validate(mapping, request);   
  25.         if (!errors.isEmpty()) {   
  26.             saveErrors(request, errors);   
  27.             refrenceData(request);   
  28.             return mapping.findForward(LOGINVIEW);   
  29.         }   
  30.            
  31.            
  32.   
  33.         User object = doNewEntity(form, request);   
  34.         initEntity(form, request, object);   
  35.            
  36.         User user = userManagerCommon.checkPassword(object.getLoginname(), object.getPassword());   
  37.         if(null==user)   
  38.         {   
  39.             errors.add("password",new ActionMessage("user.missing",object.getPassword()));   
  40.             saveErrors(request, errors);   
  41.             return mapping.findForward(LOGINVIEW);   
  42.         }   
  43.            
  44.         SessionUser.saveSession(request,user);   
  45.            
  46.            
  47.         try {   
  48.             response.sendRedirect(pagefrom);   
  49.             return null;   
  50.         } catch (IOException e) {   
  51.             e.printStackTrace();   
  52.         }   
  53.            
  54.         return mapping.findForward(INDEX);   
  55.     }  

 

第48行的代码就实现了跳转。

 
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值