目录
Response对象
案例:
1、完成重定向
2、服务器输出字符输出流到浏览器
3、服务器输出字节输出流到浏览器
4、验证码
ServletContext对象
Response对象
功能:设置响应消息
1、设置响应行 格式:HTTP/1.1 200 ok
设置状态码 setStatus(int sc)
2、设置相应头: setHeader(String name, String value)
3、设置响应体:
使用步骤:1、获取输出流
* 字符输出流 PrintWriter getWriter()
* 字节输出流 ServletOutputStream getOutputStream()
2、使用输出流,将数据输出到客户端浏览器
案例:
1、完成重定向
*重定向:资源跳转方式
代码实现:
//1、设置状态码为302
response.setStatus(302);
//2、设置响应头lication
response.setHeader("location","/day15/responseDemo2")
//简单的重定向方法
response.sendRediect("/day15/responseDemo2");
重定向的特点:rediect
1、地址栏发生变化
2、重定向可以访问其他站点(服务器)的资源
3、重定向是两次请求。不能使用request对象来共享数据
转发的特点:forward
1、转发地址烂路径不变
2、转发只能访问当前服务器下的资源
3、转发是一次请求,可以使用request对象来共享数据
路径写法:
1、路径分类
1、相对路径:通过相对路径不可以确定唯一资源
如 ./index.html
规则:找到当前资源和目标资源之间的相对位置关系 ./ 当前目录 ../后退一级目录
2、绝对路径:通过绝对路径可以确定唯一资源
* 以/开头的路径
规则:判断定义的路径是给谁用的?判断请求将来从哪儿发出
*给客户浏览器使用:需要加虚拟目录(项目的访问路径)
*建议虚拟目录动态获取:request.getContextPath()
*<a> <form> 重定向
*给服务器使用:不需要加虚拟目录
*转发路径
2、服务器输出字符输出流到浏览器
//1、获取字符输出流
PrintWriter pw =response.getWriter();
//2、输出数据
pw.write("<h1>hello response </h1>");
乱码原因:编解码使用的字符集不一致
//简单的形式,设置编码,是在获取流对象之前设置
response.setContentType("text/html;chartset=utf-8");
3、服务器输出字节输出流到浏览器
response.setContentType("text/html;chartset=utf-8");
1、获取字节输出流
ServletOutputStream sos =response.getOutputStream();
2、输出数据
sos.write("你好".getBytes("utf-8"));
4、验证码
1、创建一对象,在内存中图片(验证码图片对象)
2、美化图片
3、将图片输出到页面展示
验证码的显示永不重复,以时间为单位,每毫秒可以换一次(欺骗服务器)
ServletContext对象
1、概念:代表整个web应用,可以和程序的容器(服务器)来通信
2、获取:
1、通过request对象获取
request.getServletContext();
2、通过HttpServlet获取:
this.getServletContext();
3、功能:
1、获取mime类型:
类型:在互联网通信过程中定义的一种文件数据类型
格式:大类型/小类型 text/html image/jpeg
获取:String getMimeType(String file)
2、域对象:共享数据
1、setAttribute(String name,object value)
2、getAttribute(String name)
3、removeAttribute(String name)
*ServletContext 对象范围:所有用户所有请求的数据
3、获取文件的真实(服务器)路径
String getRealPath(String path)
文件的上传下载
案例:
文件下载需求:
1、页面显示超链接
2、点击超链接后弹出下载提示框
3、完成图片文件下载
分析:
1、超链接指向的资源如果能够被浏览器解析,则在浏览器中展示,如果不能解析,则弹出下载提示框。不满足需求
2、任何资源都必须弹出下载提示框
3、使用响应头设置资源的打开方式:
content-disposition:attachment;filename=xxx
步骤:
1、定义页面,编辑超链接href属性,指向Servlet,传递资源名称filename
2、定义Servlet
1、获取文件名称
2、使用字节输入流加载文件进内存
3、指定response的响应头:content-disposition:attachment;filename=xxx
4、将数据写出到response输出流
3、中文文件名问题