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();
                }
            }
        }

     

  • 相关阅读:
    JavaScript HTML DOM
    Java数组声明、初始化
    如何破解MyEclipse 10.x
    SpringBoot框架中解决日期展示问题
    spring boot集成mybatis-plus插件进行自定义sql方法开发时报nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
    Spring boot启动时报 java.sql.SQLException: java.lang.ClassCastException: java.math.BigInteger cannot be cast to java.lang.Long错误
    springboot 配置mybatis打印sql
    解决使用Navicat等工具进行连接登录mysql的1130错误,无法使用Ip远程连接的问题(mysql为8.0版本)
    解决使用Navicat等工具进行连接登录mysql的1521错误,(mysql为8.0版本)
    【转载】VUE的背景图引入
  • 原文地址:https://www.cnblogs.com/-Archenemy-/p/12657468.html
Copyright © 2011-2022 走看看