zoukankan      html  css  js  c++  java
  • 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();
                }
            }
        }

     

  • 相关阅读:
    js 实现商品放大镜效果
    Angular.js数据绑定时自动转义html标签及内容
    Sublime 快捷键一览表
    这么牛的简历,你见过么?
    正向代理与反向代理
    负载均衡
    redis搭建与安装
    svn服务配置和日常维护命令
    Mysql导出导入
    linux搭建svn服务器
  • 原文地址:https://www.cnblogs.com/-Archenemy-/p/12657468.html
Copyright © 2011-2022 走看看