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