response提交原理

response是服务端对客户端请求的一个响应,其中封装了响应头、状态码、内容(也就是最终要在浏览器上显示的HTML代码或者其他数据格式)等,

服务端在把response提交到客户端之前,会使用一个缓冲区,并向该缓冲区内写入响应头和状态码,然后将所有内容flush(flush包含两个步骤:先将缓冲区内容发送至客户端,然后将缓冲区清空)。这就标志着该次响应已经committed(提交)。对于当前页面中已经committed(提交)的response,就不能再使用这个response向缓冲区写任何东西 (注:以为JSP中,response是一个JSP页面的内置对象,所以同一个页面中的response.XXX()是同一个response的不同方法,只要其中一个已经导致了committed,那么其它类似方式的调用都会导致 IllegalStateException异常)。

问题描述:

在执行一段代码后,最后执行request.getRequestDispatcher(跳转页面URL).forward(resquest,response)进行页面跳转时,报了此错

问题原因:

1.在forwar之前,response就已经commit到浏览器端了。

导致response commit的原因包括:forward, redirect, flushBuffer

2.前两个原因都是指在forward之前就已经进行了页面跳转动作(forward, redirect)。

至于flushBuffer,每一个JSP页面都有一个缓冲区,默认的缓冲区大小为8KB,如果缓冲区被占满的话,web服务器就会自动将response 进行commit,然后清空缓冲区(即flush),所以再进行页面跳转的时候就会报response已经被commit了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. Request的定义:Request是客户端向服务器发送的请求对象,包含了客户端发送的请求信息,如请求的URL、请求参数、请求头等。 2. Response的定义:Response服务器向客户端发送的响应对象,包含了服务器生成的响应信息,如响应状态码、响应头、响应体等。 3. Request和Response的生命周期:Request和Response的生命周期与Servlet的生命周期密切相关。在Servlet的service()方法中,容器会创建Request和Response对象,并在处理完请求后销毁这些对象。 4. Request和Response原理:当客户端发送请求时,服务器会创建一个Request对象,并将请求信息填充到该对象中。Servlet容器会根据URL、参数等信息将请求转发给相应的Servlet进行处理,Servlet在处理请求时可以通过Request对象获取请求参数、请求头等信息,并通过Response对象生成响应信息返回给客户端。 5. Request和Response的主要方法:Request和Response对象都是由Servlet容器创建的,因此它们的具体实现可能会因Servlet容器的不同而有所不同。一般来说,Request和Response对象都包含了一些常用的方法,如获取请求参数、设置响应状态码、设置响应头等。 6. Request和Response的应用方面:Request和Response对象是Web开发中非常重要的对象,可以用于实现各种复杂的Web应用程序,如电子商务网站、社交网络、博客等。在开发Web应用程序时,开发者可以通过Request对象获取客户端提交的数据,并通过Response对象将处理结果返回给客户端。同时,Request和Response对象还可以用于实现Web安全机制、Web缓存等功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值