Response响应对象
1、HttpServletResponse
HttpServletResponse是一个定义在Servlet API中的接口,继承自ServletReponse接口,用于封装HTTP响应消息。HTTP相应分为响应行、响应头和响应体三部分。在HttpServletResponse中定义了向客户端发送相应状态码、响应头、响应体的方法。
2、发送状态码相关方法
常见的相应状态码:
200 OK,302 重定向,304 取本地缓存,404 找不到资源,500 服务器内部错误(内部java代码逻辑错误)
- setStatus(int status)方法:用于设置相应消息的状态码
- 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、发送响应体的相关方法
- getOutputStream():用于获取类型为ServletOutputStream类型的字节流输出对象
- 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响应对象的更多相关文章
- Servlet的学习之Response响应对象(3)
本篇来说明响应对象HttpServletResponse对象的最后一点内容. 首先来看响应对象控制浏览器定时刷新,在我的web应用[myservlet]中创建Servlet,在该Servlet中设置响 ...
- Servlet的学习之Response响应对象(2)
本篇接上一篇<Servlet的学习之Response响应对象(1)>,继续从HttpServletResponse响应对象来介绍其方法和功能. 使用setHeader方法结合HTTP协议的 ...
- Django视图函数之request请求与response响应对象
官方文档: https://docs.djangoproject.com/en/1.11/ref/request-response/ 视图中的request请求对象: 当请求页面时,Django创建一 ...
- Servlet的学习之Response响应对象(1)
在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...
- flask基础之Response响应对象(九)
前言 Response对象负责对客户端的响应,每一个请求都会有一个Response对象,那么它在一个请求的声明周期内是怎么发挥作用的呢? Response对象 响应发生的位置 先回顾一下http请求的 ...
- django 获取request请求对象及response响应对象中的各种属性值
django request对象和HttpResponse对象 HttpRequest对象(除非特殊说明,所有属性都是只读,session属性是个例外) HttpRequest.scheme 请求方案 ...
- response (响应对象)
一.response响应过程 在去发送一个请求时, 会找到tomcat引擎 引擎会找到对应的web应用,并且会创建request对象和response对象 找到应用后, 会执行应用的web.xml再去 ...
- 上下文对象-请求对象-响应对象(ServletContext - response - request)
目录 上下文对象-请求对象-响应对象 ServletContext response request 上下文对象-请求对象-响应对象 ServletContext 什么是ServletContext ...
- request和response——请求响应对象
请求对象--request 获取get请求的值 一次请求,返回一个响应. 地址栏:http://127.0.0.1:8000/day3/get_request?lan=python 问号:代表请求参数 ...
随机推荐
- maven的profile 目录、变量打包
<project> <build> <finalName>maven-project</finalName> <resources> < ...
- java文件读取与写入
package com.myjava; import java.io.*; import java.util.ArrayList; import java.util.Collections; impo ...
- Annotation:系统内建Annotation
1,掌握系统内建的三个Annotation. Annotation被称为元数据特效,也被称为注释,即:使用注释方式,加入一些程序信息. Java.lang.annotation接口是所有Annotai ...
- IT痴汉的工作现状36-做好准备再上路
软件开发流程管理是採用瀑布式好还是敏捷好? 如今非常多人会选择敏捷.由于眼下的现状是需求的变化是一天一个样,这是当前(移动)互联网的飞速发展所带来的.当我们仍採用原始的先做全盘的计划.然后在按部就班的 ...
- Android webView 支持缩放及自适应屏幕
//支持javascript web.getSettings().setJavaScriptEnabled(true); // 设置可以支持缩放 web.getSettings().setSupp ...
- jetty maven插件端口设置
在jetty的maven插件中有两种方式设置jetty的端口(默认为:8080). 第一种,通过命令行,在启动jetty的时候设置:mvn -Djetty.port=8081 jetty:run 第二 ...
- Android实现换肤功能(二)
前两天写的上章关于换肤的功能获得了很好的反响,今天为大家介绍另一种方式.今天实现的策略也是网友建议的,然后我自己去写了个demo,大家自己评估下相比第一种方式的优势和劣势在哪里. 简单介绍下关于第一种 ...
- HTML5学习笔记 视频
许多时髦的网站都提供视频.html5提供了展示视频的标准 检测您的浏览器是否支持html5视频 Web上的视频 直到现在,仍然不存在一项旨在网页上显示视频的标准. 今天,大多数视频是通过插件(比如Fl ...
- 解决——CSS :before、:after ,当content使用中文时有时候会出现乱码
问题: 在进行页面开发时,经常会使用:before, :after伪元素创建一些小tips,但是在:before或:after的content属性使用中文的话,会导致某些浏览器上出现乱码. 例如我遇到 ...
- 从构建分布式秒杀系统聊聊验证码 给大家推荐8个SpringBoot精选项目
前言 为了拦截大部分请求,秒杀案例前端引入了验证码.淘宝上很多人吐槽,等输入完秒杀活动结束了,对,结束了...... 当然了,验证码的真正作用是,有效拦截刷单操作,让羊毛党空手而归. 验证码 那么到底 ...