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、文件下载实例

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

 package com.alphajuns.content;

 import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder; import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import sun.misc.BASE64Encoder; public class DownloadServlet2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* 文件名是中文的下载乱码问题解决
*/
// 获取要下载的文件的名称
String filename = request.getParameter("filename");
// 解决中文乱码问题
filename = new String(filename.getBytes("iso8859-1"), "UTF-8");
// 获得请求头中的User-Agent
String agent = request.getHeader("User-Agent");
// 根据不同的浏览器进行不同的解码
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE浏览器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
filenameEncoder = filenameEncoder.replace("+", " ");
} else if (agent.contains("Firefox")) {
// 火狐浏览器
BASE64Encoder base64Encoder = new BASE64Encoder();
filenameEncoder = "=?utf-8?B?"
+ base64Encoder.encode(filename.getBytes("utf-8")) + "?=";
} else {
// 其它浏览器
filenameEncoder = URLEncoder.encode(filename, "utf-8");
}
// 告诉客户端不是直接解析,而是以附件形式下载
response.setHeader("Content-Disposition", "attachment;filename=" + filenameEncoder);
// 获取文件的绝对路径
String realPath = this.getServletContext().getRealPath("download/" + filename);
// 获取的该文件的字节输入流
InputStream in = new FileInputStream(realPath);
// 获得文件的字节输出流
ServletOutputStream out = response.getOutputStream();
int len = 0;
// 定义读写数据的字节数组缓冲区
byte[] buffer = new byte[1024];
// 读取数据到字节数组中
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
// 关闭资源
out.close();
in.close();
} public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

Response响应对象的更多相关文章

  1. Servlet的学习之Response响应对象(3)

    本篇来说明响应对象HttpServletResponse对象的最后一点内容. 首先来看响应对象控制浏览器定时刷新,在我的web应用[myservlet]中创建Servlet,在该Servlet中设置响 ...

  2. Servlet的学习之Response响应对象(2)

    本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...

  3. Django视图函数之request请求与response响应对象

    官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一 ...

  4. Servlet的学习之Response响应对象(1)

    在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...

  5. flask基础之Response响应对象(九)

    前言 Response对象负责对客户端的响应,每一个请求都会有一个Response对象,那么它在一个请求的声明周期内是怎么发挥作用的呢? Response对象 响应发生的位置 先回顾一下http请求的 ...

  6. django 获取request请求对象及response响应对象中的各种属性值

    django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...

  7. response (响应对象)

    一.response响应过程 在去发送一个请求时, 会找到tomcat引擎 引擎会找到对应的web应用,并且会创建request对象和response对象 找到应用后, 会执行应用的web.xml再去 ...

  8. 上下文对象-请求对象-响应对象(ServletContext - response - request)

    目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...

  9. request和response——请求响应对象

    请求对象--request 获取get请求的值 一次请求,返回一个响应. 地址栏:http://127.0.0.1:8000/day3/get_request?lan=python 问号:代表请求参数 ...

随机推荐

  1. 文本域textarea

      文本域 CreateTime--2017年5月23日15:12:08Author:Marydon 二.文本域 (一)语法 <textarea></textarea> (二) ...

  2. 关于 yii2 cron运行 console的脚本不运行,可是手动运行成功的原因

    在yii2中运行脚本出现了一个问题 手动运行没有问题. 在cron中不运行.最后找出来了原因 打开yii文件(在根文件夹以下) #!/usr/bin/env php <?php /** * Yi ...

  3. Win7 + vs2012 + cocos2d-x2.2 配置开发环境

    昨天開始打算学习Cocos2d-x,首先肯定是要在自己的电脑上配置开发环境.昨天折腾了一天,以下将自己在当中遇到的问题与解决方法跟大家分享一下.大多数会遇到的问题,我都遇到了....     1.安装 ...

  4. input-form-select-a-img-ul-dl标签

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  5. swift向方法传数组参数的语法

    总是记不住向方法中传数组参数的语法,所以记录一下. func calculateStatistics(scores:[Int]) -> (min:Int,max:Int,sum:Int) { v ...

  6. emqtt-benchmark发送指令

  7. 浏览器 UserAgent

    IE Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.2; WOW64; Trident/6.0; .NET4.0E; .NET4.0C; .NET C ...

  8. 打败 IE 的葵花宝典:CSS Bug Table

    博主说:本博客文章来源包括转载,翻译,原创,且在文章内均有标明.鼓励原创,支持创作共享,请勿用于商业用途,转载请注明文章链接.本文链接:http://www.kein.pw/?p=35 原文发表于:A ...

  9. poj 1806 Frequent values(RMQ 统计次数) 详细讲解

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1806 题目大意:给你一个非降序排列的整数数组,你的任务是对于一系列的询问,(i,j),回答序列中出现次 ...

  10. git patch生成方法

    先把改动commit掉,然后生产改动patch给提交代码的同事,详细操作过程例如以下: 改动代码的同事: git format-patch al821_xxx origin/al821_xxx 会生成 ...