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