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