使用Servlet处理http响应

主要作用:从前台获取到响应的信息,并完成后台操作,将前台的请求信息传递给前台;

一、使用服务器发送服务器响应信息:
第一步: WEB浏览器打开一个WEB服务器的 TCP Socket初始化一个http请求,Socket输入流包含httprequest数据;Socket输出流包含HttpResponse 数据;
第二步:A、WEB容器解析Socket输入流中的http请求流数据,创建一个请求对象;
B、WEB容器创建一个响应对象,用于产生socket输出流中的http响应流;
第三步:WEB容器调用所请求的service()方法,并将请求和响应对象作为参数传递给该方法,在service()内部HttpResponse调用各自的方法创建响应消息;
第四步:HttpResponse 对象给Servlet提供一个PrintWriter对象,使Servlet可以产生响应消息;
二、设置响应状态行:
2.1 设置状态行:
http版本
响应码
状态码分类:100-199:请求正在进行;
200-299:请求成功;
300-399:请求资源不存在,指示新的地址,常用302,307
400-499:客户端引发的错误;
500-599:服务器端引发的错误;
设置状态码: setstatus(404) ;
设置登录页面:setHeader("Location","index.jsp");
影响描述
response.sendError(404,"not_find") 该方法生成一个404应答,P47
生成一个302应答,
sendRedirect(String URL)生成一个302的自动应答,并在Location头中指示新文档的URL地址; 调用sendRedirect方法可以不设置状态码;设置响应头的方式必须设置状态码;
sendRedirect( "index.jsp" );
【类似方法】:
response.setStatus(302); //必须设置状态码;
response.setHeader("Loction","index.jsp");

2.2设置响应头
A/设置mime类型:告诉浏览器,服务器发送回去的数据类型是什么,客户端启动相应的信用程序来处理响应内容;
常见的mime类型
超文本标记语言文本 .htm,.html text/html
普通文本 .txt text/plain
RTF文本 .rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 .ipeg,.jpg image/jpeg
au声音文件 .au audio/basic
MIDI音乐文件 mid,.midi audio/midi,audio/x-midi
RealAudio音乐文件 .ra, .ram audio/x-pn-realaudio
MPEG文件 .mpg,.mpeg video/mpeg
AVI文件 .avi video/x-msvideo
GZIP文件 .gz application/x-gzip
TAR文件 .tar application/x-tar
实际操作:
//设置响应内容的类型,MIME类型
//什么的MIME类型
//告诉浏览器,服务器发送回去的数据类型是什么,客户端启动相应的应用程序来处理响应内容
/*response.setContentType("text/html");*/
//通过响应头设置MIME类型,charset=utf-8表示浏览器在解析内容,采用utf-8的格式,
//类似于 <meta charset=utf-8>
response.setHeader("Content-Type", "text/html;charset=utf-8");
B、自动刷新功能:
response.setHeader("refresh","2");按照秒为单位,2秒自动刷新一次;
response.setHeader("refresh","2;index.jsp"); 2秒刷新到新的页面;
C、控制数据无法缓存: 在快速刷新的数据中要进行这个设置来不进行缓存;
response.setHeader("Pragma","no-cache");
response.setHeader("Cache-Control","no-cache");
D、设置过期时间:缓存的内容,到什么时候内容消失;
response.setDateHeader("Expires",date+1000); 1000为毫秒数;

2.3设置响应消息体
手动设置回应的编码集
tomact默认响应客户端解析的时候编码集是ISO8859-1,Charset=utf-8
response.setHeader("Content-Type","text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
A、print和write方法的区别:
相同点:两者都不会刷新页面,只在原来的页面上写数据;两个方法都重写了Writer类里面的write方法;
不同点:print可以将不同的数据转换为字符串输出,write只能操作字符,字符数组,字符串;
out.print("ok");
out.write(2+"")
B、为了防止中文乱码,设置内容在传输过程中编码格式是utf-8;
response.setContentType("text/html;charset=UTF-8"); //设置网页解析格式utf-8
response.setCharacterEncoding("UTF-8"); //设置输出编码格式utf-8;
C、获取输出流对象:
OutputStream = response.getOutputStream();
需要将字符串转换成字节数字,才能传输字符串;
String str = “天气”;
byte [] s = str.getBytes("UTF-8");
D、上传下载图片:
1/设置响应编码集:
resp.setCharacterEncoding("UTF-8");
resp.setContentType( "image/jpeg");
2/获取文件要下载的路径, 通过上下文对象获取到文件的物理路径
String path = this. getServletContext().getRealPath("/image/1.jpg");
3/设置响应头控制浏览器打开下载框:
resp.setHeader("Content-disposition","attchment;filename="+"1.jpg");
4/获取到图片的二进制流
FileInputStream in = new FileInPutStream(path);
5、创建一个二进制流
OutputStream out = resp.getOutStream();
6、创建一个输出流
PrintWriter out = resp.getWriter();
int len = 0 ;
char[] c = new char[1024];
while( len= in.read(c) != -1){
out.write(c,0,len);
}

【解决问题:传输响应头的文件命名为中文时,消息体无法解析中文命名;】
String imgname = "高圆圆.jpg";
resp.setHeader("Content-disposition","attchment;filename="+new String(imgname.getBytes( "utf-8"),"ISO8859-1"));
设置响应头控制浏览器打开下载框,操作图片中文显示也要转成字节数组,保持服务器编码一致
用字符流操作二进制文件是可以的,但是容易出现内容丢失问题;我们可直接使用封装好的getWrite() getInPutStream();

E、设置请求重定向:客户端请求时通过重定向,重定向指定对应的显示文本;
1、重定向的状态码是302,表示资源被移走,重新请求新的资源;
2、重定向是客户端发起的两次请求;
3、调用sendRedirect方法可以不用设置状态码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值