网站开发中经常会遇到这样的问题,登录后自动转到了首页或者用户管理首页,这样有时候会让用户觉得很不方便,特别是电子商务类的网站,当用于在浏览产品页面时,需要购买,但是只有登录后的用户才能进入购买页面,所以如果当用户登录后进入的不是他登录前的产品浏览页面,他得去重新找,这是非常不友好的。
可以通过request.getHeader("referer");方式来实现登录/注册后返回进入登录或注册页面前的页面
举例:
java 代码 /** * 进入到登录页面 * @param mapping * @param form * @param request * @param response * @return */ public ActionForward loginview(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { //登录后跳转回进来的页面,如果进来之前的页面是登录和退出,则登录后跳转到首页 String pagefrom = request.getHeader( "referer" ); if (pagefrom.indexOf( "method=login" )> 0 || pagefrom.indexOf( "method=logout" )> 0 ) { pagefrom = pagefrom.substring( 0 ,pagefrom.lastIndexOf( "/" )+ 1 ); } request.setAttribute( "pagefrom" , pagefrom); saveToken(request); User object = null ; try { object = entityClass.newInstance(); } catch (InstantiationException e) { log.error(e); } catch (IllegalAccessException e) { log.error(e); } initForm(form, request, object); return mapping.findForward(LOGINVIEW); }
在登录页面中设置hidden元素:
登录页面部分代码 < html:form action = "/userm.do" focus = "loginname" styleClass = "u_login_form" onsubmit = "return validateUserForm(this)" > < input type = "hidden" name = "method" value = "login" /> < input type = "hidden" name = "pagefrom" value = "${ pagefrom }" /> < input type = "hidden" name = "name" value = "name" /> < input type = "hidden" name = "mail" value = "yahaitt@163.com" /> < div class = "l" > < img src = "${css}/images/login_icon_01.gif" /> div > < div class = "l" > < html:text property = "loginname" styleClass = "text" /> < br /> < html:password property = "password" styleClass = "text" /> < br /> < %@ include file = "/commons/messages.jsp" % > div > < div class = "l" > < html:img src = "${css}/images/login_icon_02.gif" onclick = "if(validateUserForm(document.userForm)) document.userForm.submit();" /> div > < div class = "c" > div > html:form > < html:javascript formName = "userForm" staticJavascript = "false" dynamicJavascript = "true" cdata = "false" /> < script type = "text/javascript" src = "${ctx}/scripts/validator.jsp" > script >
根据登录页面中的pagefrom元素的值,在登录成功后跳转到该值对应的页面
登录代码:
java 代码 /** * 登录 * @param mapping * @param form * @param request * @param response * @return */ public ActionForward login(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { String pagefrom = request.getParameter( "pagefrom" ); request.setAttribute( "pagefrom" , pagefrom); if (isCancelled(request)) return list(mapping, form, request, response); if (!isTokenValid(request)){ saveDirectlyError(request, "重复提交" ); return mapping.findForward(LOGINVIEW); } // resetToken(request); // run validation rules on this form ActionMessages errors = form.validate(mapping, request); if (!errors.isEmpty()) { saveErrors(request, errors); refrenceData(request); return mapping.findForward(LOGINVIEW); } User object = doNewEntity(form, request); initEntity(form, request, object); User user = userManagerCommon.checkPassword(object.getLoginname(), object.getPassword()); if ( null ==user) { errors.add( "password" , new ActionMessage( "user.missing" ,object.getPassword())); saveErrors(request, errors); return mapping.findForward(LOGINVIEW); } SessionUser.saveSession(request,user); try { response.sendRedirect(pagefrom); return null ; } catch (IOException e) { e.printStackTrace(); } return mapping.findForward(INDEX); }
第48行的代码就实现了跳转。