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得配置信息,并 ...
随机推荐
- Linux网络优化踩坑net.ipv4.tcp_tw_recycle
一.背景 来源于埋点上报服务,埋点上报服务是用户打开APP后点击.浏览.曝光等数据都会上报到埋点服务,收集数据后用来公司运营. 本次踩坑来源于监控到上课高峰期net.sockets.tcp.timew ...
- Mac安装Zookeeper
软件版本:3.4.10 一.软件下载 下载链接:http://archive.apache.org/dist/zookeeper/ 解压缩:tar -zxf zookeeper-3.4.10.t ...
- Linux下Docker及Nvidia Container ToolKit安装教程
作者:SkyXZ CSDN:SkyXZ--CSDN博客 博客园:SkyXZ - 博客园 我们接下来在Ubuntu中安装Docker(安装详见:Get Docker | Docker Docs)及NVI ...
- RabbitMQ(五)——发布订阅模式
RabbitMQ系列 RabbitMQ(一)--简介 RabbitMQ(二)--模式类型 RabbitMQ(三)--简单模式 RabbitMQ(四)--工作队列模式 RabbitMQ(五)--发布订阅 ...
- 在 GitLab CI/CD 中使用内置的容器镜像库
配置 Docker-in-Docker Docker-in-Docker (dind) means: 你应该注册一个 Docker executor 或 Kubernetes executor 执行器 ...
- mysql常用优化
SQL优化是一个分析,优化,再分析,再优化的过程.站在执行计划的角度来说,我们这个过程,就是在不断的减少rows的数量. 1.建索引 2.减少表之间的关联 3.优化 sql,尽量让 sql 很快定位数 ...
- AGC002E题解
简要题意 桌上有 \(n\) 堆糖果,第 \(i\) 堆糖果有 \(a_i\) 个糖.两人在玩游戏,轮流进行,每次进行下列两个操作中的一个: 将当前最大的那堆糖果全部吃完: 将每堆糖果吃掉一个: 吃完 ...
- 基于自注意力机制的轻量级人体姿态估计(Lightweight Human Pose Estimation Based on Self-Attention Mechanism)
写在前面 本文是一篇于2023年3月21日发表在2023 International Conference on Big Data, Environmental Industry and Materi ...
- TypeError: 'NoneType' object is not iterable 一次错误场景
TypeError: 'NoneType' object is not iterable 源码 def get_url(lines): urls=[] for line in lines: if 'i ...
- composer 2 升级操作
update composer composer self-update // or sudo composer self-update 回滚到版本1 composer self-update --r ...