搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
你好赵伟
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
如何在pycharm中配置pytorch环境_pycharm配置pytorch
2
7-33 统计素数并求和(详解个人思路)_本题要求统计给定整数m和n区间内素数的个数并对它们求和。
3
现在java工程师薪资是多少,使用/教程/实例_java编程工程师薪资多少
4
jdbc连接mysql集群_使用JDBC连接数据库_数据仓库服务 GaussDB(DWS)_管理指南_连接集群_使用JDBC和ODBC连接集群_华为云...
5
基于WiFi的CSI数据做呼吸频率检测-python版(含代码和数据)_wifi 11n csi
6
添加作者_投稿后,你要临时加“作者”?别逗了……
7
Spingboot集成Redis之踩坑(二)序列化问题_at org.springframework.data.redis.serializer.strin
8
Mac安装docker教程安装后docker:commandnotfound解决办法_mac docker command not found
9
7.6:Python如何在文件中查找指定的内容?_python在文件中查找指定数据
10
vue3正确关闭eslint的步骤_vue3关闭eslint
当前位置:
article
> 正文
Servlet中请求转发时forward()和include()的区别_forword和include
作者:你好赵伟 | 2024-04-04 21:18:49
赞
踩
forword和include
1 定义
forward()和include()都是RequestDispatcher类中的方法。一般通过ServletRequest的getRequestDispatcher(String var1)获取RequestDispatcher。
forward():表示在服务器端从一个Servlet中将请求转发到另一个资源(Servlet、Jsp或Html等),本意是让第一个组件对请求做些预处理(或者什么都不做),而让另一组件处理并返回响应。
include():表示在响应中包含另一个资源(Servlet、Jsp或Html等)的响应内容,最终被包含的页面产生的任何响应都将并入原来的response对象,然后一起输出到客户端。
2 关于状态码和响应头
forward():调用者和被调用者设置的状态码和响应头都不会被忽略。
include():被调用者(如被包含的Servlet)不能改变响应消息的状态码和响应头,即会忽略被调用者设置的状态码和响应头。
3 谁负责发回响应
forward():表示转发,则控制权也同时交给了另一个组件,所以最终由另一组件返回响应。
include():表示包含,则控制权还在自己身上,所以最终还是由自己返回响应。
4 请求转发后的代码是否执行?
forward():转发后还会返回主页面继续执行,但不可以继续输出响应信息。
include():转发后还会返回主页面继续执行,仍然可以继续输出响应信息。
5 关于forward(),引用JavaEE文档中的说明:
必须在响应被提交到客户端(刷新响应正文输出到流中)前调用forward(即在调用forward之前必须清空响应缓冲区),否则会抛出IllegalStateException异常。
在forward之前,响应缓冲区中未提交的数据会被自动清除。所以容器将忽略原Servlet所有其他输出。
6 补充说明:关于
Servlet
中的输出缓冲区
在Servlet中使用ServletOutputStream和PrintWriter输出响应正文时,数据首先被写入到Servlet引擎提供的一个输出缓冲区中。直到满足以下条件之一时,Servlet引擎才会吧缓冲区中的内容真正发送到客户端。
输出缓冲区被填满。
Servlet已经写入了所有的响应内容。
Servlet调用响应对象的flushBuffer()方法,强制地将缓冲区内的响应正文数据发送到客户端。
Servlet调用ServletOutputStream或PrintWriter对象的flush()方法或close()方法。
为了确保ServletOutputStream或PrintWriter输出的所有数据都能被提交给客户端,建议在所有数据都输出完毕后,调用ServletOutputStream或PrintWriter的close()方法。
使用输出缓冲区后,Servlet引擎就可以将响应状态行、各响应头和响应正文严格按照HTTP消息的位置顺序进行调整后再输出到客户端。
如果在提交响应到客户端时,输出缓冲区中已经装入了所有的响应内容,Servlet引擎将计算响应正文部分的大小并自动设置Content-Length头字段。
缓冲区自动刷新(清出)功能。(注意是刷新(flush),而不是清除(flushBuffer))
如果设置为自动刷新,则在缓冲区满或者使用flush()方法显式清出时,都会向客户端输出信息。
如果设置为不自动刷新,则必须明确使用flush()方法清出数据,否则如果缓冲区满了的话,将会产生IOException异常。
使用缓冲区能够减少数据传输的次数,提高程序的运行效率。但也有可能产生响应延迟的问题,因为在缓冲区满或使用flush()显示清出之前,数据并不会真正发送到客户端。
作者:九尾喵的薛定谔
链接:https://www.jianshu.com/p/300e0327eac0
来源:简书
声明:
本文内容由网友自发贡献,转载请注明出处:
【wpsshop】
推荐阅读
article
Spring
Boot
注册Web原生组件(
Servlet
、
Filter
、Listener)_spri...
由于
Spring
Boot
默认以 Jar 包方式部署的,默认没有 web.xml,因此无法再像以前一样通过 web....
赞
踩
article
Transformer
入门解析_
feed
forward
network
...
参考:深入理解transformer源码_了不起的赵队的博客-CSDN博客_transformer源码图解Transfo...
赞
踩
article
nn.Multi
head
Attention详解 --
forward
()中维度、计算方式
_
multi
...
nn.Multi
head
Attention详解 --
forward
()中维度、计算方式
_
multi
_
head
_
atte...
赞
踩
article
2
0
2
1
年4月
2
6日考试试题(
2
)从
m>键盘输入
m>
8
得到结果0.66
2
8
7
2
,辗转相除法求
m>最大公约数
m>
,
计算...
第一题:从
m>键盘输入
m>
8
得到结果0.66
2
8
7
2
公式如下,从
1
到
n
1
.0/(
2
i-
1
)-
1
.0/(
2
i)#
m>i
n
clude
m> <...
赞
踩
article
T5模型中
teacher
forcing
和·
auto
regressive
_t5
generate
...
T5模型里,怎么不使用
teacher
forcing
换成
auto
regressive
?_t5
generate
for...
赞
踩
article
数据结构
--二叉树_#
include
二叉树...
希望这篇文章能对各位有所帮助_#
include
二叉树#
include
二叉树 前言  ...
赞
踩
相关标签
spring boot
前端
java
spring
架构
transformer
自然语言处理
深度学习
pytorch
python
人工智能
数据结构
c语言