在servlet中out.flush() 和 response.sendRedirect() 互相影响

问题描述

我的代码为:publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{response.setCharacterEncoding("GBK");PrintWriterout=response.getWriter();if(!validator.equals(in_validateCode)){out.println("<scripttype="text/javascript">");out.println("alert('验证码填写错误!')");out.println("</script>");out.flush();out.close();response.sendRedirect("../index.jsp");}}其中:out.flush();out.close();和response.sendRedirect("../index.jsp");好像不能同时使用,有java.lang.IllegalStateException:Responsealreadycommitted异常抛出但我在帮助文档中没有找到那里出的问题.请大家帮我指出问题所在,谢谢!!!!!

解决方案

解决方案二:
试下看可不可以帮助你。request.getRequestDispatcher("/index.jsp").forward(request,response);
解决方案三:
试下看可不可以帮助你。request.getRequestDispatcher("/index.jsp").forward(request,response);
解决方案四:
你把位置换一下,先重定向,然后再清空,关闭
解决方案五:
建议楼主先试试3楼的,然后再试试2楼的
解决方案六:
还是不行,3楼,在我这里测试显示:可以完成跳转,但alert('验证码填写错误')没有看到!2楼,在我这里测试显示如果在out.flush();out.close();后面使用,就会有异常java.lang.IllegalStateException:Cannotforwardaresponsethatisalreadycommitted抛出如果在out.flush();out.close();前面使用,和3楼的问题一样,没有看到alert('验证码填写错误')辛苦大家了,谢谢!!!!!!!
解决方案七:
xuexi
解决方案八:
用了flush,就不要用close
解决方案九:
out.flush();时服务器会把请求头部分以及现成的其他response体刷到客户端,这里response置为commited,不能再改变其请求头,而response.sendRedirect("../index.jsp");要改变location请求头,当然不行了.
解决方案十:
out.print("<scriptlanguage='javascript'>");out.print("alert('提交成功');");out.print("window.location.href='/XXX/yyy.jsp?aaa=78';");out.print("</script>");
解决方案十一:
应该不是这个地方的事吧,这两天不会影响吧?
解决方案十二:
引用9楼coolbamboo2008的回复:

out.print("<scriptlanguage='javascript'>");out.print("alert('提交成功');");out.print("window.location.href='/XXX/yyy.jsp?aaa=78';");out.print("</script>");

先试试这个或者直接用ajax吧不用打印js代码了
解决方案十三:
他们不能在一起用的,你想想看,你的serlvet,用的printwriter,它就不能再用sendredirect了,你想实现什么样的功能?
解决方案十四:
out.close();加response.reset();试试response.sendRedirect("../index.jsp");
解决方案十五:
out都关了response.sendRedirect("../index.jsp");是要往客户端头信息写东西的关掉了就写不过去了

时间: 2024-07-29 03:08:32

在servlet中out.flush() 和 response.sendRedirect() 互相影响的相关文章

J2EE中RequestDispatcher.forward()和response.sendRedirect()的区别详谈

一.RequestDispatcher.forward() 在服务器端运行.采用采用请求转发,request对象始终存在,不会重新创建,前后页面共享同一个request.重定向后浏览器地址栏URL不变. public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { response.setContentType("text/html

浅谈servlet中的request与response_java

在b/s架构中,有request浏览器的请求,也有response的服务器反馈.底层是tcp/ip协议,应用层是http协议.在tomcat服务器中,版本6使用的http1.1版本协议.服务器发出request请求,在请求中有可能加载get和post请求(doget请求,是放在URL中可以使用getparmeter进行解析,因为tomcat把每一个网页请求看做一个对象,所以是面向对象(HttpServletRequest)进行封装,并有doget和dopost进行 对应的解析.主要的API如下:

jsp/servlet 中sendRedirect、include和forward区别

sendRedirect response.sendRedirect(); 服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求新的地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取.注意:使用request.setAttribute的内容,不能读取了.因为不是同一个请求了.如图所示 2  forward (1) 在servlet里面 request.getRequestDispatcher("jsp2.jsp").forward(re

Servlet中的response实现换行

问题描述 Servlet中的response实现换行 response.getWriter().print(""+i);//只有这个能实现换行 response.getWriter().print(i+"");//这个并不能实现换行 response.getWriter().print("");//这个也不能实现换行 请问这是为什么呢? 解决方案 换行符在页面上又不是换行的意思,,response.getWriter().print("

在Jsp Servlet中页面重新定向总汇_JSP编程

1. RequestDispatcher.forward() 是在服务器端起作用, 当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Servlet,JSP 或普通HTML文件,也即你的form提交至a.jsp,在a.jsp用到了forward()重定向至b.jsp,此时form提交的所有信息在 b.jsp都可以获得,参数自动传递. 但forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件

JSP、Servlet中的相对路径和绝对路径

js|servlet JSP.Servlet中的相对路径和绝对路径 JSP和Servlet中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享. 前提:假设你的Http地址为http://192.168.0.1/你的web应用为webapp,那么你的web应用URL为http://192.168.0.1/webapp/ web应用的目录结构: webapp/ web-inf/ classes/ lib/ web.xml <servlet-mapping> <ser

关于jsp和servlet中实现页面跳转的几种方式总结

 关于jsp和servlet中实现页面跳转的几种方式: 假设要求从test1.jsp 跳转到test2.jsp 一. jsp中跳转: 1. 使用RequestDispatcher.forward方法转发 <%  RequestDispatcher rd = getServletContext().getRequestDispatcher("/test/test2.jsp");  rd.forward(request, response); %> 2. response.se

在servlet中怎么传集合显示在jsp页面

问题描述 在servlet中怎么传集合显示在jsp页面 jsp页面: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServ

求问,我在servlet中首先转发到一个jsp页面进行输出,然后怎么才能重定向跳转到另一个jsp呢?

问题描述 求问,我在servlet中首先转发到一个jsp页面进行输出,然后怎么才能重定向跳转到另一个jsp呢? User user = (User) request.getSession().getAttribute("user"); if(user==null){ request.setAttribute("message", "请先登陆!!,3秒后自动跳转!"); request.getRequestDispatcher("/mes