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得配置信息,并 ...
随机推荐
- Frp内网穿透(一)
ftp简介 frp frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp, http, https协议. 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https ...
- HT-018 Div3 能量消耗 题解 [ 绿 ] [ 线性 dp ] [ 前缀和优化 ]
能量消耗:一个前缀和优化 dp 的大典题,要是数据水一点 \(O(n^3)\) 都能硬草过去. 思路 显然,定义 \(dp[i]\) 为考虑前 \(i\) 个塔,并且将第 \(i\) 个塔开启,将前面 ...
- window本地部署deepseek
window本地部署deepseek 学习自[[教程]DeepSeek本地免费部署教程,丝滑不卡顿!带你解锁隐藏功能!]https://www.bilibili.com/video/BV1viFaeB ...
- Git - 安装Git
下载>> 安装 >> 下载 登录Git官网:https://git-scm.com/ 点击想要安装的版本 安装 1. 点击下一步(Next) 2. 选择安装路径 3. Git相 ...
- Java字节码增强实际应用在哪些方面?
Java字节码增强由于与业务应用耦合性较低,且可任意修改程序代码,所以在许多方面都有应用.也是许多公司产品实现的基础.下面大概分类一下: 1.在可观测和监控方面的应用 如果一个应用的架构服务之间的依赖 ...
- Elasticsearch搜索引擎学习笔记(四)
分词器 内置分词器 standard:默认分词,单词会被拆分,大小会转换为小写. simple:按照非字母分词.大写转为小写. whitespace:按照空格分词.忽略大小写. stop:去除无意义单 ...
- 【前端解决方案】已有本地项目如何建立github仓库
步骤 1:在本地初始化 Git(如果还没初始化) 如果你的本地项目还没有 Git 仓库,先进入你的项目目录,并初始化 Git: cd /你的本地项目路径 git init 这样会在你的项目中创建一 ...
- AXUI前端框架v3版本已经发布,底层完全改写,基于原生技术标准,想走得更远!
AXUI的v3版本已经发布! AXUI框架已经经历了第一代和第二代的迭代,充分认识到纯CSS和HTML的局限性,也意识到过多手动编写代码会影响用户体验.因此,AXUI的目标是:既满足原生前端的标准,又 ...
- DNS+scapy学习
DNS前置知识 大部分介绍转自这篇文章. 官方解释: DNS ( Domain Name System ,域名系统) ,因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联 ...
- oracle清除日志
近日发现oracle占用的空间很大,经查,发现是 /u01/app/oracle/diag/rdbms/orcl/orcl/alert 警告日志 /u01/app/oracle/diag/rdbms/ ...