每次服务端获取来自客户端的请求后,解析http请求部分,将http请求部分封装到HttpServletRequest对象中,同时创建HttpServletResponse对象,之后在服务端完成本次响应后,服务端回收出刚刚创建的Request,Response对象,下次请求到达服务端后,会分配新的HttpServletRequest/HttpServletResponse对象
既然HttpServletResponse代表从服务端到客户端响应这个过程,而且结合协议我们知道
HTTP协议响应包含三大块内容,分别是响应行,响应头,响应体.
HttpServletResponse可以控制响应部分的三个部分
测试重定向
可以用一句话搞定: response.sendRedrect(”路径”),效果等同于上面
此处主要讲通过response获取的两种流
2.字节输出流
(1)在webContent根目录下,新增config文件夹,并将事先准备的图片放入
(2)通过输入流读取图片文件,并通过输出流输出到客户端
局限性:
通过这种方式向客户端发送文件是存在局限性的,因为很多文件类型客户端是打不开的(例如:.doc,.zip…)
怎么判断客户端能打开哪些文件呢?___很简单直接将文件拉进浏览器中
所以我们更多的是通过下载的方式,来将文件传送到客户端(后面有讲)
注意点:
1.String realPath = getServletContext().getRealPath(“config/lufei.png”);实质上是通过getRealPath方法获取根目录路径,之后再拼接上config/lufei.png,并不关注文件是否存在
2.getRealPath获取的根目录是指webcontent,而非src
3.在初始化FileInputStream时,如果找不到这个文件,会报异常,所以一般有两种解决方法
1.建立WEB项目
2.在WebContent___>WEB-INF___>建立download目录
3.将准备好的”1.doc,1.rar,1.txt,哈哈.txt”等文件放入目录download下
ps:WEB-INF目录下的资源是受保护的
例如:WebContent__config目录下,放入png文件,此资源可直接访问(除图片外的其他类型文件,比如.txt,.doc直接访问报404错误)
而在WEB-INF目录下的资源是无法直接访问的
所以我们通过servlet来实现下载功能
4.新增index.html
男士穿搭.docx
lufei.png
ss.rar
statement的批量导入.txt
用户输入网址http://localhost:8081/web_day03/
请求项目下的页面index.html,为什么不输入index.html也可以获取到?
原因:在web.xml中中会顺序寻找文件,全都找不到报404
原理分析
实现步骤
此处我们使用了IOUtils工具类,这个类是commons-io-1.4.jar包中的,apache提供了commons包,这个包有非常多实用的工具类
问题1:中文乱码问题
为什么lufei.png和ss.rar弹出另存为框,但是男士穿搭.docx和statment的批量导入.txt却报500错误
原因很简单,我们将从request中获取的fileName打印出来,发现当我们请求的中文名资源是,输出的是乱码
产生原因:
Post,Get请求乱码的原因和解决方案
eclipse软件设置好UTF-8
Mysql安装时选择UTF8
保证页面部分采用UTF8编码
2.通过表单向服务端提交数据
问题:请求时中文乱码问题解决了,这会又出现了一个问题
当我们点击“男士穿搭.docx”和“statement的批量导入.txt”进行下载时,发现弹出框文件有乱码情况
3.如果是下载文件时,另存为弹出文件有乱码,利用工具类设置
因为从服务器向浏览器发送中文时,需要对内容进行URL编码。
DownLoadUtils.setConentType(request, fName, response,getServletContext());
希望另存为文件的名称fName传递到函数中
对fName进行转码,转码之后是乱码没有关系,此时的乱码是让浏览器识别的
设置了本次响应内容类型
4_服务端向客户端响应中文乱码
response.setContentType(“text/html;charset=utf-8”);
总结:
上述代码的目的:
1_通过利用response的字节输出流向客户端输出字节数据来实现下载的原理
2_明确程序的执行流程
3_利用response控制消息头content-disposition实现浏览器弹出另存为对话框
4_利用response控制本次响应内容类型.验证了ServletContext的作用4
5_解决WEB中遇到的常见的乱码问题