servlet的响应(一)

http协议:他是基于请求和响应模式

响应的组成

  1. 状态行

  2. 响应头

  3. 空行

  4. 响应体

状态行

状态行-> http版本+状态码/status+状态描述

状态码:告诉客户的请求状态,成功或者失败

100~199:请求已发出,但是没有得到响应 200~299:标识请求和响应成功 300~399:表示该资源已经被移走,需到别处请求 400~499:表示由客户端引起的问题 500~599:表示是服务器端的问题

状态描述:对状态码的描述

常见的状态码

常见状态码状态描述
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。。。),发回的类容的大小,服务器的版本,响应时间,该内容是否需要缓存。

总体来说就是告诉客户端服务端发回的信息。

常见的响应头
  1. 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();
            }
        }
    }

 

 

posted @ 2020-04-08 01:17  是非_大道克己  阅读(277)  评论(0编辑  收藏  举报