JSP response.sendRedirect 不跳转的原因分析及解决
首先我们要明白用 response.sendRedirect 做转向的原理,它其实是向浏览器发送一个特殊的 Header,然后由浏览器来做转向,
转到指定的页面,所以用 sendRedirect 时,浏览器的地址栏上可以看到地址的变化。
用<jsp:forward page=""/>则不同,它是直接在 server 做的,浏览器并不知道,也不和浏览器打交道,这从浏览器的地址并不变化
可以看出。
所以使用 response.sendRedirect 时就需要注意以下两点:
1、在使用 response.sendRedirect 时,前面不能有 HTML 输出。
这并不是绝对的,不能有 HTML 输出其实是指不能有 HTML 被送到了浏览器。事实上现在的 server 都有 cache 机制,
一般在 8K(我是说JSP SERVER),这就意味着,除非你关闭了 cache,或者你使用了 out.flush()强制刷新,
那么在使用 sendRedirect 之前,有少量的 HTML 输出也是允许的。
如果报错说,“一些信息已经被 submitted”(原文忘了),那么,你就要注意看了,前面是不是有过多的 HTML 输出了。
2、在 response.sendRedirect 之后,应该紧跟一句 return;
我们已经知道 response.sendRedirect 是通过浏览器来做转向的,所以只有在页面处理完成后,才会有实际的动作。
既然你已经要做转向了,那么后的输出还有什么意义呢?而且有可能会因为后面的输出导致转向失败。
<%@ include file="/page/checkLogin.jsp" %>这个放在要验证的页面的第一句。
checkLogin.jsp 内容是通过看 session 里面有没登陆用户的内容来判断是否登录, 如果没有,那么跳转到登陆页面:
<% String username = (String) session.getAttribute("username"); if (username == null) { response.sendRedirect("notlogin.jsp"); return; } %>