HTTPServletRespose
1.当用户在浏览器中输入访问的地址,按下回车时,此时浏览器把此次的请求封装为http请求,然后将它发送给服务端;
2.服务端的web应用服务器(Tomcat)的tomcat内核解析该请求,将请求的信息封装成一个请求对象,和产生一个响应对象(此时的响应对象没有存储数据)。
3.根据请求的地址,创建servlet对象。调用servlet对象的service方法,将前面创建的请求和响应对象作为参数递进进servie方法里。
4.等到service方法结束之后,tomcat内核将会到Respose缓冲区去获取设置的内容,并且根据获取的内容组装成一个http响应(包括响应行,响应头,响应体)。
5.服务端将http响应发送给浏览器,浏览器接收到http响应之后就会解析该响应,然后呈现给用户浏览。
一.HttpServletRespose的概述
在创建一个servlet时,会覆盖service方法,或者doGet/doPost方法,这些方法都有两个参数,一个代表请求的request和代表着响应的respose
service方法中的respose的类型是ServletRespose,而doGet/doPost方法的Respose的类型是HttpServletRespose,HttpServletRespose是ServletRespose的子接口,功能和方法都更加的强大。
http响应与HttpServletRespose之间的联系
http的响应是包括了响应行,响应头,响应体
因为HttpServletRespose对象代表的是响应对象,所以对他的学习主要也是分别对应http响应的响应行,响应头,响应体。
通过Respose设置响应行
在http响应中响应行中有:http的版本号 响应状态码 响应的描述信息. 在这三者中http的版本号是不用设置的,而响应的描述信息是根据响应状态码发生改变的。因此,主要关注响应状态码。
设置响应行的状态码的方法
setStatus(int sc)
通过Respose来设置响应头
http响应中,响应头主要是由键值对组成的。
有以下方法可以设置响应头
addHeader(String name,String value)
addIntHeader(String name, int value)
addDateHeader(String name, long date)
setHeader(String name, String value)
setDateHeader(String name, long date)
setIntHeader(String name, int value)
其中,add表示添加,而set表示设置
通过Respose设置响应体
浏览器主要是解析响应体的内容,然后呈现给用户看。
1.响应体设置文本
PrintWrite getWrite()
获得字符流,通过字符流的 write(String s)方法可以将字符串设置到Respose的缓冲区中,在service()方法执行完毕后,Tomcat内核会将Respose缓冲区的内容组装成http响应返回给浏览器。
2.设置体设置字节
ServletOutputStream getOutputStream()
获得字节流对象,通过字节流对象的write()方法可以向Respose缓冲区中写入字节,在service()方法执行完毕后,Tomcat内核会将Respose缓冲区的内容组装成http响应返回给浏览器。
注:关于中文乱码
原因:Respose缓冲区的默认编码是iso8859-1,这个码表中没有中文,可以通过Respose的setCharacterEncoding(String charset)设置Respose缓冲区的编码。
此时,因为浏览器的编码是本地默认编码gbk,而Respose的编码被设置为utf-8,所以需要手动设置浏览器的编码与Respose缓冲区的编码保持一致。
通过respose.setContentType("text/html;charset=utf-8")