jsp response.sendRedirect不跳转的原因分析及解决_JSP教程

编辑Tag赚U币
教程Tag:暂无Tag,欢迎添加,赚取U币!

推荐:JSP指令元素(page指令/include指令/taglib指令)复习整理
今天复习了JSP指令元素部分,整理了下,跟大家一起分享: 一、page指令: 设定JSP页面的全局属性,该配置作用于整个JSP页面,设置包括静态包含的文件。 %@ page 属性1=属性值1 属性2=属性值2 % 1、language属性:申明所使用的脚本语言种类,目前只有java一种,不排斥以

最近做项目时遇到一个问题,明明加了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 里面有没登陆用户的内容来判断是否登录, 如果没有,那么跳转到登陆页面:

复制代码 代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
if (session.getAttribute("userinfo") == null) {

response.sendRedirect(url);

return;
}
%>  

分享:JSP脚本元素和注释复习总结示例
今天复习了JSP脚本元素和注释部分,案例写出来,大家自己调试下,整体总结如下, 1、JSP申明语句: %! 申明语句 % 使用申明语句的变量为全局变量,多个用户执行此JSP页面,将共享该变量。 如: 复制代码 代码如下: html head titleJSP Demo/title /head body %! int a

来源:模板无忧//所属分类:JSP教程/更新时间:2013-07-09
相关JSP教程