zoukankan      html  css  js  c++  java
  • Response响应对象

    1、HttpServletResponse

    HttpServletResponse是一个定义在Servlet API中的接口,继承自ServletReponse接口,用于封装HTTP响应消息。HTTP相应分为响应行、响应头和响应体三部分。在HttpServletResponse中定义了向客户端发送相应状态码、响应头、响应体的方法。

    2、发送状态码相关方法

    常见的相应状态码:

    200 OK,302 重定向,304 取本地缓存,404 找不到资源,500 服务器内部错误(内部java代码逻辑错误)

    1. setStatus(int status)方法:用于设置相应消息的状态码
    2. sendError(int sc):发送表示错误信息的状态码

    3、发送响应头的相关方法

    void addHeader(String name, String value):用于增加响应头

    void setHeader(String name, String value):用于设置响应头

    void addIntHeader(String name, int value):增加整数响应头

    void setIntHeader(String name, int value):设置整数响应头

    void setContentLength(int len):用于设置响应消息的实体大小,单位为字节

    void setContentType(String type):用于设置输出文件的MIME类型

    void setLocale(Locale loc):用于设置响应消息的本地化信息

    void setCharacterEncoding(String charset):用于设置输出内容使用的字符集编码

    4、发送响应体的相关方法

    1. getOutputStream():用于获取类型为ServletOutputStream类型的字节流输出对象
    2. getWriter():用于获取的字符输出流对象为PrintWriter类型

    5、文件下载实例

    文件下载要解决问题:文件名中文乱码问题,浏览器自动解析,读取服务器上文件,写到本地

     1 package com.alphajuns.content;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.IOException;
     5 import java.io.InputStream;
     6 import java.net.URLEncoder;
     7 
     8 import javax.servlet.ServletException;
     9 import javax.servlet.ServletOutputStream;
    10 import javax.servlet.http.HttpServlet;
    11 import javax.servlet.http.HttpServletRequest;
    12 import javax.servlet.http.HttpServletResponse;
    13 
    14 import sun.misc.BASE64Encoder;
    15 
    16 public class DownloadServlet2 extends HttpServlet {
    17 
    18     public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    19         /*
    20          * 文件名是中文的下载乱码问题解决
    21          */
    22         // 获取要下载的文件的名称
    23         String filename = request.getParameter("filename");
    24         // 解决中文乱码问题
    25         filename = new String(filename.getBytes("iso8859-1"), "UTF-8");
    26         // 获得请求头中的User-Agent
    27         String agent = request.getHeader("User-Agent");
    28         // 根据不同的浏览器进行不同的解码
    29         String filenameEncoder = "";
    30         if (agent.contains("MSIE")) {
    31             // IE浏览器
    32             filenameEncoder = URLEncoder.encode(filename, "utf-8");
    33             filenameEncoder = filenameEncoder.replace("+", " ");
    34         } else if (agent.contains("Firefox")) {
    35             // 火狐浏览器
    36             BASE64Encoder base64Encoder = new BASE64Encoder();
    37             filenameEncoder = "=?utf-8?B?"
    38                     + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
    39         } else {
    40             // 其它浏览器
    41             filenameEncoder = URLEncoder.encode(filename, "utf-8");                
    42         }
    43         // 告诉客户端不是直接解析,而是以附件形式下载
    44         response.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);
    45         // 获取文件的绝对路径
    46         String realPath = this.getServletContext().getRealPath("download/" + filename);
    47         // 获取的该文件的字节输入流
    48         InputStream in = new FileInputStream(realPath);
    49         // 获得文件的字节输出流
    50         ServletOutputStream out = response.getOutputStream();
    51         int len = 0;
    52         // 定义读写数据的字节数组缓冲区
    53         byte[] buffer = new byte[1024];
    54         // 读取数据到字节数组中
    55         while ((len = in.read(buffer)) != -1) {
    56             out.write(buffer, 0, len);
    57         }
    58         // 关闭资源
    59         out.close();
    60         in.close();
    61     }
    62 
    63     public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    64         doGet(request, response);
    65     }
    66 }
  • 相关阅读:
    团队作业9——测试与发布(Beta版本)
    团队作业8 ----第二次项目冲刺(Beta阶段)博客汇总
    【Beta】 第七次Daily Scrum Meeting
    【Beta】 第六次Daily Scrum Meeting
    【Beta】 第五次Daily Scrum Meeting
    【Beta】 第四次Daily Scrum Meeting
    【Beta】 第三次Daily Scrum Meeting
    Flask-论坛开发-5-memcached缓存系统
    Flask-论坛开发-4-知识点补充
    Flask-论坛开发-3-数据库
  • 原文地址:https://www.cnblogs.com/alphajuns/p/9949797.html
Copyright © 2011-2022 走看看