00:00
说完了请求对象,我们也解决了请求中的中文乱码问题,那么下面我们就来看响应。以及响应中乱码问题的解决方案。当一个itp请求到达以后,到达服务器以后。那么服务器会给我们创建出一个itb subject request对象和一个itb response对象。并且会将。响应给客户端的内容。封装到IP response中。那么封装到它里边,具体封装到什么地方呢?其实它是以流的形式发送给客户端的。
01:00
在response这个接口里边有一个方法叫get writer。那么它可以获取到一个输出流对象print writer。这个输出流对象是专门用于向客户端浏览器输出字符数据的。我们称为标准输出流。也就是说,我们想。发送网。客户端的数据只要写到这个标准输出流里边。那么浏览器就能够接收到。并且给你显示出来好。关于这个呢,我们下面就来写个程序。咱们这样,我们。重新。新建一个,我们新建一个工程啊,这个。
02:05
我们叫19。Printer,我们就叫printer writer。这样啊,咱们这里边儿就不要页面了,为了简单。我们直接来看它。呃。直接来一个so。Com点北京power no点。Solid some solid。
03:07
这个呢,我们就叫。Some。我们通过。这样吧。啊,我们通过地址栏访问的,所以是get请求。大家看记不记得我们一直删掉的这句话,他在这就get writer。就获取到一个标准输出流,然后向输出流中添加数据。通过append给他添加数据的。我们可以先看一下它的输入内容。跑一下。这个用七用九都行,那我们就用九了啊。
04:12
大家看。Served at。这是我们的,是不是项目的根呢?Request get contexttest pass,我们讲过吧,这不是项目的根吗?哎,Append的方法可以添加,向流里边添加数据,好,这你知道end啊,其实除了append还有什么,还有比较多的,我们详细给大家来说,这我叫out,咱们先来看这out。Printwriter对吧。这是个。IO java.io下边的print。
05:01
打开看看。继承字write,我们看一下它的继承关系。寄生writer。这是个抽象类是吧?那么它就是一个输出流。好,这个输出流有了,加个注释啊,这是获取标准输出流。下面我要向流里边写入数据,Out点我们刚才看到了end,是不是可以啊?啊不追加呀,它可以往往流里边追加数据。这个我们就不掩饰了。那么还有谁可以呀?Print。烂都行。都可以。咱们print,比如说print。
06:03
啊,什么。这个ABC。DF。GH这个写成print来。这个写成print了啊,OK了。写完了,他又重新发布了。那么我们看一下。我直接刷新。你看。ABC这用的print是吧,所以这没换行直接DEF,而这个是不是用的print烂呐,所以它和它之间是不是换行了。对吧,哎,这是我们用的print print。还能用什么?out.right。
07:01
也可以。Right ABC。当了,叫你DEF。好,他重新重新发布了啊。刷新ABCDEFF是不是也可以?所以向流中这样吧,我们既然写到这儿,我就给大家写上这个吧。out.append ABC。ABC。DF。把这个注释掉。好。
08:00
没问题吧?所以呢,从这可以知道啊,我们向标准输出流中写入数据。可以使用append。Line都行都可以啊。好,这是向流里边写数据,然后这里面我有个疑问呢。什么疑问呢?向。标准输出流中写入数据。你注意你只要写到标准输入流里面数据了,那么。啊,客户端浏览器就会在,就会直接是不是看到这些数据对吧,你写到这儿,那么它浏览器就直接看到了,我这有个什么问题呢?我们大家在学习。
09:15
Java基础的时候,在学习L流的时候。老师给大家说过。对于。输入输出流。我们一定要记着什么是不是关闭啊,用完以后关闭。那么这个流有没有关闭呢?out.close诶,还真有,对不对,还真有。好,他重新发布过了。看一下。是不是没问题?但大家需要注意,对这个流的啊,对print writer这个流的关闭,你一定要小心,不是说你写完它就可以马上关闭的。
10:12
标准。输出流的关闭。如果。我们。如果我们什么呢,因为到后边啊,我们到后边才会学习。这个过滤器filter,当然对于过滤器我们是另外一个专题。对于filter,如果你的这里边将来你的代码中用到了filter,并且这个要对这个标准输出流由进行一些处理。也就是说,在你发往。将数据发往客户端。
11:00
之前那么这个过滤器。他要对这个标准输入流进行一些处理,那么如果你需要对它进行处理,这就不能关闭。或者说。在这个将这个标准输入流里边的数据发送往。客户端之前另外一个。要对这个流里边数据进行处理,向其中进一步添加数据,那么你在这也不能关。所以对于这个流的关闭,你一定要小心。有时候你手工写上关闭了代码会出错。那不关闭怎么办呢?不关闭它是不是一直占哦。资源呢,也不是。
12:01
当我们的这个请求和响应结束了,这个响应结束了,那么这个。响,你注意啊,响应结束了,这意味着什么?这个对象没了。就意味着这个流。会有我们的服务器自动将其关闭。也就是说我们程序员不手工的关闭这个标准输入流。服务器也会替我们关,什么时候关这个对象被销毁的时候。我们请求,我们知道请求对象的生命周期很短暂,是吧,响应的更短暂。响应的更短暂。那创建了请求对象,然后创建响应对象,当这个请求和响应的程度出现的呀。当这一次请求想要结束的时候,那么这两个对象都会被销毁。
13:04
那么在销毁响应对象时,会自动将这个标准输入流关闭,所以我们不关的话也是可以的。OK了。啊,这就是我们说的什么。Print writer标准输出流。那对于他。我们可以这样看一下啊。嗯。你看着咱们以他为例。这个18。18也行,17也行是吧,随便啊,哪一个都可以,我们可以把它的代码稍微改一下。怎么改改法呢?你看着这儿是不是获取到了用户提交的请求参数啊,我可以把这个请求参数,你看在这是显示到了,是不是控制台呀,我现在可以让它显示到哪显示到我们的。
14:07
浏览器。你看着我这怎么写response点?Get writer。Out out.print。谁呀?嗯,我就直接拷贝它了。就是这个东西。就他。还有他。好。这是我们17。哪儿都行,那么就久了重启。历史。走没问题吧,是不是这不就显示了,所以这就和我们前面那个请求参数的那个是不是就结合一块儿了。
15:08
诶,显示到浏览器,你填的什么东西,让你看一下。OK啊,这是我们讲到后边啊。回过头改了这个程序啊,我给你注释掉好。这是我们说的print。
我来说两句