响应的组成
-
状态行
-
响应头
-
空行
-
响应体
状态行
状态行-> http版本+状态码/status+状态描述
状态码:告诉客户的请求状态,成功或者失败
100~199:请求已发出,但是没有得到响应 200~299:标识请求和响应成功
状态描述:对状态码的描述
常见的状态码
常见状态码 | 状态描述 |
---|---|
200 | 表示请求成功,响应成功 |
302 | 表示资源已经被移走,需要到别的地方请求 |
304 | 表示获得资源是从缓存中获取 |
400 | 客户端发送的参数有问题 |
404 | 资源找不到/一般为url书写错误 |
405 | 请求方式不正确 |
500 | 服务器端异常 |
502 | 服务器宕机 |
配置状态码文件
作用:防止暴露代码信息
<!--写在web.xml文件中--> <!--配置错误页面--> <error-page> <!--状态码--> <error-code>500</error-code> <!--定位到制定的错误页面--> <location>/html/fuwei.html</location> </error-page>
状态码的设置
//设置状态码(知道一下) resp.setStatus(208); resp.setStatus(HttpServletResponse.SC_NOT_FOUND); //自定义描述信息(知道就可以了) resp.sendError(404,"url异常,请检查url地址是否正确");
设置响应头的类型(比如发送了TXT,MP4。。。),发回的类容的大小,服务器的版本,响应时间,该内容是否需要缓存。
总体来说就是告诉客户端服务端发回的信息。
常见的响应头
-
Content-Disposition:告诉客户端已下载文件的形式打开
应用-下载文件
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //第一步:获得下载文件的名字 String fileName = req.getParameter("fileName"); //第二步:获得文件的后缀名 String ext = fileName.substring(fileName.lastIndexOf(".")); //第三步:获得一个uuid(给下载的文件一个新的名字) String newFileName = UUID.randomUUID().toString(); //第四步:设置响应头 Content-Disposition: 告诉客户端以下载文件的形式打开 resp.setHeader("Content-Disposition","attachment; filename="+newFileName+ext); //第五步: 获得下载文件的物理路径 String downPath = this.getServletContext().getRealPath("downLoadImage/"+fileName); // 第六步:完成下载 //创建一个文件 File file = new File(downPath); //输入流 InputStream in= null; //获得输出流 ServletOutputStream out = resp.getOutputStream(); try { in = new FileInputStream(file); //缓冲流 byte[] buf = new byte[1024]; //读取字节的长度 int length=0; //读取文件 while( (length= in.read(buf,0,buf.length))!=-1 ){ out.write(buf,0,buf.length); } out.flush(); }catch(Exception e){ e.printStackTrace(); }finally{ if(in!=null){ in.close(); } if(out!=null){ out.close(); } } }