关于在js中跳转还是在servlet中跳转
很多朋友喜欢在js中进行逻辑判断,然后跳转
优势很多:判断方便简捷.比如一个session超时的判断.jsp中js源码如下:
<mce:script type="text/javascript"><!-- //session过期判断 function checkSession() { if(<%=(request.getSession().getAttribute("user") == null) %>){ alert("对不起,登录已超时,请您重新登录!"); top.location.href="/项目名"; } } // --></mce:script>
他们认为使用了struts的actionServlet就得配findforward,top.location.href="/项目名"; 语句就发挥不了作用了,以至于束手无策,只得又回到jsp用js进行判断
其实,在很多情况下,使用actionServlet进行判断跳转,比使用js判断跳转要好.为什么?抛却安全性等一系列原因,就多层架构分工来讲,就应该用actionServlet进行判断跳转.仍然拿那个判断session过期的问题,拿到一个继承了DispatchAction的actionServlet类中判断源码如下
public ActionForward checkSession(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { if(request.getSession().getAttribute("user") == null ) { try { PrintWriter out = response.getWriter(); out.write("<mce:script language=javascript><!-- alert('对不起,登录已超时,请您重新登录!');top.location.href='/项目名'; // --></mce:script>"); out.close(); } catch (IOException e) { e.printStackTrace(); request.setAttribute("Error", e.getMessage()); return mapping.findForward("error");//全局error处理页面 } } return null; }