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