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

 

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

可以通过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行的代码就实现了跳转。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值