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. Redis源代码解析:13Redis中的事件驱动机制

    Redis中.处理网络IO时,採用的是事件驱动机制.但它没有使用libevent或者libev这种库,而是自己实现了一个很easy明了的事件驱动库ae_event,主要代码只400行左右. 没有选择l ...

  2. struts2中 JFreeChart使用

    添加3个包 struts2-jfreechart-plugin-2.3.16.3.jar jcommon-1.0.16.jar jfreechart-1.0.13.jar struts.xml中配置 ...

  3. RabbitMQ的应用场景以及基本原理介绍(转载)

    1.背景 RabbitMQ是一个由erlang开发的AMQP(Advanved Message Queue)的开源实现. 2.应用场景 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信, ...

  4. JiaThis™“分享到”侧栏代码

    风格:迷你: 猜你喜欢: 开启 使用说明: 复制并粘贴下面的JS代码,放到您的网页,可以在<body>和</body>的之间网页的任意位置放置.如果您的网站使用的模板,     ...

  5. GCC手册学习(序)

    已经是2014年的年末了,又快过了一年.今年,一定要认真把GCC再学习一遍,做好笔记. 总览 gcc [option|filename] ... g++ [option|filename] ...   ...

  6. LNMP架构三

    Nginx代理(正向代理) 正向代理:让局域网内的用户 访问外网,外网不能访问局域网, 场景:如果要从国内访问美国的服务器会很慢,这时候就可以找个香港服务器做代理,香港访问美国是很快的. 代理服务器作 ...

  7. centos(7.0) 上 crontab 计划任务

    yum install vixie-cron yum install crontabs /bin/systemctl restart crond.service  #启动服务 /bin/systemc ...

  8. 理解x64代码模型

    原作者:Eli Bendersky http://eli.thegreenplace.net/2012/01/03/understanding-the-x64-code-models 在编写x64架构 ...

  9. Atitit.二维码功能的设计实践 attilax 总结

    Atitit.二维码功能的设计实践 attilax 总结 1.1. 二维码要实现的功能1 1.2. 现有二维码功能设计不足的地方(待改进)1 1.3. 二维码组件1 1.4. Java版  zxing ...

  10. springmvc配置AOP的两种方式

    spingmvc配置AOP有两种方式,一种是利用注解的方式配置,另一种是XML配置实现. 应用注解的方式配置: 先在maven中引入AOP用到的依赖 <dependency> <gr ...