请求对象和响应对象的生命周期
- 在Http服务器收到浏览器发送的Http请求协议包之后,自动为当前的Http请求协议包创建一个请求对象和一个响应对象。
- 在Http服务器调用doPost/doGet方法的时候,负责将请求对象和响应对象作为实参传递到方法,确保doPost/doGet正确执行。
- 在Http服务器准备推送Http响应协议包之前,销毁本次关联的请求对象和响应对象
HttpServletResponse接口
-
介绍:
1、HttpServletResponse接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar
2、HttpServletResponse接口实现类由Http服务器负责提供
3、HttpServletResponse接口负责将doGet/doPost方法执行写入到“响应体”交给浏览器
开发人员习惯将HttpServletResponse接口修饰的对象称为响应对象 -
主要功能:
1、将执行结果以二进制的形式写入到响应体中
2、设置响应头[content-type]属性值,控制浏览器使用对应编译器,
将响应体二进制数据编译为“文字,图片,视频,命令”
3、设置响应头中[location]属性,将一个请求地址赋给location,
从而控制浏览器想指定服务器发送请求
实例1
write
public class OneServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String result="helloworld";//执行的结果
//通过响应对象将结果写入响应体
//1.通过响应对象,想Tomcat索要输出流
PrintWriter out=response.getWriter();
//2.通过输出流,将执行结果以二进制形式写入响应体
out.write(result);
}
//Tomcat将响应包推送给浏览器
}
实例2
public class TwoServlet extends HttpServlet {
/*
浏览器接受到的数据不是50,是2
原因:
out.writer可以将字符、字符串、ASCII码写入到响应体
2对应的ASCII码就是50
解决:
实际开发中,都是通过out.print()将真实数据写入响应体中的
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int money=50;//执行结果
PrintWriter out=response.getWriter();
//out.write(money);
out.print(money);
}
}
实例3
问题://Java< br/>Mysql< br/>HTM
浏览器在接收到响应结果时,将< br/>作为文字内容在窗口中展示出来了
原因:
浏览器在接收响应包之后,根据响应头中的content-type属性的值,来采用对应“编译器”对响应体中的二进内容进行编译处理。
在默认情况下,content-type属性的值是“text”,此时浏览器将会采用“文本编译器”对响应体二进制数进行解析。
解决:
一定要在得到输出流之前,通过响应对象对响应头中的content-type属性进行重新赋值,指定浏览器采用正确的编译器
修改content-type属性
response.setContentType();
public class ThreeServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response