HttpServletResponse相关
目录
返回给客户端数据:字节流和字符流
package com.zhujunwei.httpServletResponse;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpServletResponse01 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/**
* 返回给客户端数据两种方式:字节流和字符流方式
* 一次只能执行其中的一个
*/
// byWriter(resp);
byOutputStream(resp);
//设置当前这个请求的处理状态码
// resp.setStatus(sc);
//设置一个头
// resp.setHeader(name, value);
//设置相应的类型,以及编码
// resp.setContentType(type);
}
/**
* 以字节流的方式写数据
* @param resp
* @throws IOException
*/
private void byOutputStream(HttpServletResponse resp) throws IOException {
resp.getOutputStream().write("getOutputStream().write()".getBytes());
}
/**
* 以字符流的方式写数据
* @param resp
* @throws IOException
*/
@SuppressWarnings("unused")
private void byWriter(HttpServletResponse resp) throws IOException {
resp.getWriter().write("<h1>getWriter().write()</h1><br>");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
结果:
getOutputStream().write()
解决返回字节流和字符流乱码问题
package com.zhujunwei.httpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpServletResponse02 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//字符流输出
// writerEncoding(resp);
//字节流输出
outPutStreamEncoding(resp);
}
/**
* 解决字节流输出乱码
* @param resp
* @throws IOException
* @throws UnsupportedEncodingException
*/
private void outPutStreamEncoding(HttpServletResponse resp) throws IOException, UnsupportedEncodingException {
//1、指定浏览器看这份数据使用的码表
resp.setHeader("Content-Type", "text/html; charset=UTF-8");
//2、指定输出的中文用的码表
resp.getOutputStream().write("我是最帅的。。".getBytes());
}
/**
* 解决字符流输出乱码
* @param resp
* @throws IOException
*/
@SuppressWarnings("unused")
private void writerEncoding(HttpServletResponse resp) throws IOException {
//这里写出去的文字,默认使用的是ISO-8859-1,我们可以指定写出去的时候,使用什么编码写
//1、指定输出到客户端的时候,这些文字使用UTF-8
resp.setCharacterEncoding("UTF-8");
//2、直接规定浏览器看这份数据的时候,使用什么编码看
resp.setHeader("Content-Type", "text/html; charset=UTF-8");
resp.getWriter().write("我是最帅的。。。");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
结果:
我是最帅的。。
万能解决乱码
package com.zhujunwei.httpServletResponse;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HttpServletResponse03 extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//只需要设置这一行就可以不管是字节或者字符流都不会乱码
resp.setContentType("text/html; charset=UTF-8");
//字符流输出
writerEncoding(resp);
//字节流输出
// outPutStreamEncoding(resp);
}
/**
* 解决字节流输出乱码
* @param resp
* @throws IOException
* @throws UnsupportedEncodingException
*/
@SuppressWarnings("unused")
private void outPutStreamEncoding(HttpServletResponse resp) throws IOException, UnsupportedEncodingException {
resp.getOutputStream().write("我真的是最帅的。。".getBytes());
}
/**
* 解决字符流输出乱码
* @param resp
* @throws IOException
*/
private void writerEncoding(HttpServletResponse resp) throws IOException {
resp.getWriter().write("我真的是最帅的。。。");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
结果
我真的是最帅的。。。
文件下载
tomcat提供的默认下载方式
Tomcat提供的有文件下在的默认Servlet,如果浏览器能打开这种文件的话会自动打开,不会弹出下载框。
我们在项目里面放置几个文件供测试使用

download.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h2>tomcat提供的默认下载方式</h2>
<a href="download/test.txt">test.txt</a><br>
<a href="download/m1.jpg">m1.jpg</a><br>
<a href="download/download.rar">download.rar</a><br>
<hr>
<h2>手动写下载方法</h2>
<a href="DownloadServlet?fileName=test.txt">test.txt</a><br>
<a href="DownloadServlet?fileName=m1.jpg">m1.jpg</a><br>
<a href="DownloadServlet?fileName=download.rar">download.rar</a><br>
</body>
</html>
手动编写的DownloadServlet
package com.zhujunwei.download;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DownloadServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1、获取要下载的文件名字
String fileName = req.getParameter("fileName");
//2、获取这个文件在tomcat里面的绝对路径地址
String path = getServletContext().getRealPath("download/"+fileName);
//让浏览器收到这份资源的时候,以下载的方式提醒用户,而不是直接展示
resp.setHeader("Content-Disposition", "attachment; filename="+fileName);
//3、转换成输入流
InputStream is = new FileInputStream(path);
OutputStream os = resp.getOutputStream();
int len = 0 ;
byte[] buffer = new byte[1024];
while((len = is.read(buffer))!=-1) {
os.write(buffer,0,len);
}
os.close();
is.close();
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
结果:

HttpServletResponse相关的更多相关文章
- servlet实现文件下载所需步骤及说明
servlet实现文件下载所需步骤及说明 CreateTime--2017年9月1日15:46:22 Author:Marydon 参考链接:http://blog.sina.com.cn/s/b ...
- POI生成Excel工具类
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayInp ...
- 嵌入式单片机STM32应用技术(课本)
目录SAIU R20 1 6 第1页第1 章. 初识STM32..................................................................... ...
- java web学习总结(七) -------------------HttpServletResponse对象(一)
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...
- Struts2相关面试题
Struts2面试题 1.struts2工作流程 Struts 2框架本身大致可以分为3个部分: 核心控制器FilterDispatcher.业务控制器Action和用户实现的企业业务逻辑组件. 核心 ...
- spring相关jar包的含义
spring.jar是包含有完整发布的单个jar 包,spring.jar中包含除了spring-mock.jar里所包含的内容外其它所有jar包的内容,因为只有在开发环境下才会用到 spring-m ...
- Spring 相关jar包详细介绍
文章转自:http://blog.csdn.net/farawayhome/article/details/6623946 aspectj目录下是在Spring框架下使用aspectj的源代码和测试程 ...
- JAVAWEB学习总结 HttpServletResponse对象(一)
Web服务器收到客户端(浏览器)的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象,和代表响应的response对象. request和response对象既然代表请求和响 ...
- HttpServletResponse对象 学习
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.request和response对象即然代表请求和响应,那我们要 ...
- Servlet/JSP-02 Servlet相关类
ServletConfig / ServletContext / ServletRequest / ServletResponse 一. ServletConfig:封装了Servlet得配置信息,并 ...
随机推荐
- Yarn角色
一.ResourceManager ResourceManager中的调度器负责资源的分配 二.NodeManager NodeManager则负责资源的供给和隔离 ResourceManager将某 ...
- 7. Docker 容器数据卷的使用(超详细的讲解说明)
7. Docker 容器数据卷的使用(超详细的讲解说明) @ 目录 7. Docker 容器数据卷的使用(超详细的讲解说明) 1. Docker容器数据卷概述 2. Docker 容器数据卷的使用演示 ...
- TypeScript 中的 type 和 interface:你真的了解它们的不同吗?
如果你有写过 Vue3 的项目,那么对 TypeScript 肯定不会陌生.不管是公司新项目技术选型还是个人学习开发新的前端项目,Vue3 + TypeScript 已经成为首选技术方案之一 在 Ty ...
- 泰山派linux(Ubuntu 20.04)安装GCC编译环境
linux(Ubuntu 20.04)安装gcc编译环境 1.查看可安装的编译链版本(在用户apt软件源中检索) apt-cache search aarch64 交给AI翻译 后面验证得知本版本Ub ...
- MybatisPlus - [01] 概述
MybatisPlus可以节省我们大量工作时间,所有的CURD代码它都可以自动化完成! 一.是什么 MyBatis-Plus(简称MP)是一个基于MyBatis的增强工具,其设计目的是在不改变My ...
- 洛谷P1191 矩形 题解
笛卡尔树的介绍 笛卡尔树,是一种二叉搜索树,它满足如下条件: 每个节点的编号满足二叉搜索树的性质. 每个节点的权值满足小根堆或大根堆的性质. 大概是这个样子: 笛卡尔树的建树 请看这里. 笛卡尔树的用 ...
- 【markdown】各种markdown的骚操作
目录 1.给图片居中.加题注 2. 文字添加下划线 3. 文字高亮.自定义高亮的颜色 4. 博客文章生成目录 5. markdown 实现页内跳转 6. 数学公式调大尺寸.右编号 7. 折叠内容 8. ...
- SuiGo智能博客系统
一款由Golang+Vue开发的博客类网站,支持大模型对话编写智能博客,同时适配PC和移动端. 功能点说明 系统主要包括 1.博客功能:博客编写也可对话AI模型协助编写.查询.编辑页面.详情页面.分享 ...
- JMeter 性能优化
Jmeter 性能优化:(3优化 + 1补充) 1.在 jmx 文件中 Disable 所有的结果输出,如: View Results Tree / Graph Results / Aggrega ...
- 编写你的第一个 Django 应用程序,第7部分
本教程从教程 6 停止的地方开始.我们将继续使用网络投票应用程序,并将专注于自定义 Django 自动生成的管理站点,这是我们在教程 2 中首次探索的. 一.自定义管理表单 通过用 admin.sit ...