当有多个客户端浏览器去请求Tomcat时,Tomcat会为每一个客户端浏览器创建一对独立的HttpServletRequest与HttpServletResponse对象

HttpServletResponse对象代表服务器的响应,在该对象中封装了响应客户端浏览器的流对象,以及向客户端浏览器响应的响应头,响应数据,响应状态码等信息

设置响应类型

客户端浏览器根据给定的响应类型决定如何处理响应

setContentType("MIME"):通过MIME-Type设置响应类型。

设置字符型响应

  • resp.setContentType("text/html")

    响应类型为文本型,内容含有html字符串,是默认响应类型

    @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应类型为html型
resp.setContentType("text/html;utf-8"); //获取响应字符流
PrintWriter pw=resp.getWriter(); //向客户端响应数据
pw.println("<!DOCTYPE html>");
pw.println("<html lang=\"en\">");
pw.println("<head>");
pw.println("<meta charset=\"UTF-8\">");
pw.println("<title>Title</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<font color='#663399'>HelloWord</font>");
pw.println("</body>");
pw.println("</html>"); //刷新流
pw.flush();
//关闭流
pw.close();
}

  • resp.setContentType("text/plain")

    响应类型为文本型,内容是普通文本,不会解析html标签。

    @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应类型为普通文本型
resp.setContentType("text/plain;utf-8"); //获取响应字符流
PrintWriter pw=resp.getWriter(); //向客户端响应数据
pw.println("<!DOCTYPE html>");
pw.println("<html lang=\"en\">");
pw.println("<head>");
pw.println("<meta charset=\"UTF-8\">");
pw.println("<title>Title</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<font color='#663399'>HelloWord</font>");
pw.println("</body>");
pw.println("</html>"); //刷新流
pw.flush();
//关闭流
pw.close();
}

  • resp.setContentType("application/json")

    响应类型为JSON格式的字符串。

设置字节型响应

  • resp.setContentType("image/jpeg")

    响应类型为图片类型,图片类型为jpeg或jpg格式。

  • resp.setContentType("image/gif")

    响应类型为图片类型,图片类型为gif格式。

设置响应编码

  • response.setContentType("text/html;charset=utf-8");

    不仅发送到浏览器的内容会使用UTF-8编码,而且还通知浏览器使用UTF-8编码方式进行显示。所以总能正常显示中文

  • response.setCharacterEncoding("utf-8");

    仅仅是发送的浏览器的内容是UTF-8编码的,至于浏览器是用哪种编码方式显示不管。 所以当浏览器的显示编码方式不是              UTF-8的时候,就会看到乱码,需要手动指定浏览器编码。

重定向响应

  • response.sendRedirect(URL地址)

    重定向响应会在响应头中添加一个Location的key,对应的value是给定的URL。客户端浏览器在解析响应头后自动向Location中的URL 发送请求。

    @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//产生重定向响应
resp.sendRedirect("http://www.baidu.com");
}

重定向响应的特点:

1)产生两次请求和两次响应

2)重定向的URL由客户端浏览器发送

3)浏览器地址栏发生改变

案例:

创建一个搜索页面,通过百度搜索引擎完成内容搜索

1)完成搜索页面search.html的编写

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>search</title>
</head>
<body>
<form action="redirect">
<!-- 搜索框-->
<input type="text" name="text">
<!-- 搜索按钮-->
<input type="submit" value="search" name="search">
</form>
</body>
</html>

2)完成servlet的编写

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder; @WebServlet("/redirect")
public class redirect extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doPost(req,resp);
} @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取搜索框的值
String value=req.getParameter("text");
//产生重定向响应
resp.sendRedirect("https://www.baidu.com/s?wd="+ URLEncoder.encode(value,"utf-8"));//对浏览器进行URL编码
}
}

HttpServletResponse对象实现文件下载

在实现文件下载时,需要在响应头中添加附加信息。

 //Content-Disposition-----文件配置,attachment-----附件
response.addHeader("Content-Disposition","attachment; filename="+文件名);
  • Content-Disposition:attachment

    该附加信息表示作为对下载文件的一个标识字段,直接启动下载功能下载文件。不会在浏览器中 显示而是直接做下载处理。

  • filename=文件名

    浏览器使用该文件名作为下载文件的文件名。

    @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//读取要下载的文件
File file=new File("D:\\flower.jpg");
//用字节输入存储文件
InputStream is= new FileInputStream(file);
//创建字节数组
byte[] buff=new byte[is.available()];
is.read(buff); //在响应添加附加信息
resp.addHeader("Content-Disposition", "attachment; filename="+file.getName());
//产生响应
//创建字节输出流
OutputStream os=resp.getOutputStream();
//响应到客户端
os.write(buff);
//刷新流
os.flush();
//关闭流
os.close();
}

解决文件名是中文名所出现的乱码问题

//将原来的文件名按照gbk的方式变成字节,再按iso-8859-1编码方式变成新的字符串
resp.addHeader("Content-Disposition","attachment;filename="+
new String(file.getName().getBytes("gbk"),"iso-8859-1"));

servlet中的HttpServletResponse对象的更多相关文章

  1. 在Action类中获得HttpServletResponse对象的四种方法

    在struts1.xAction类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得Ht ...

  2. Servlet中的request对象、重定向和转发的差别(6)

    1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中 ...

  3. Servlet中的HttpServletResponse 类

    HttpServletResponse 类的作用:              理解:顾名思义 就是响应客户端的内容, HttpServletResponse 类和 HttpServletRequest ...

  4. servlet中的ServletConfig对象

    ServletConfig对象对应web.xml文件中的<servlet>节点.当Tomcat初始化一个Servlet时,会创建ServletConfig对象,并将该Servlet的配置信 ...

  5. servlet中的ServletContext对象

    ServletContext官方叫Servlet上下文.服务器会为每一个Web应用创建一个ServletContext对象.这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整 ...

  6. servlet中的HttpServletRequest对象

    HttpServletRequest对象表示客户端浏览器发起的请求,当客户端浏览器通过HTTP协议访问服务器时,Tomcat会将HTTP请求中的所有信息解析并封装在HttpServletRequest ...

  7. [原创]java WEB学习笔记05:Servlet中的ServletConfig对象

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  8. Servlet中获取JSP内置对象

    方便自己查询,嫌低级的勿喷.... 1.request 在servlet的doGet和doPost的参数中就有HttpServletRequest req参数,而JSP内置request对象就是Htt ...

  9. Java 中的 HttpServletRequest 和 HttpServletResponse 对象

    HttpServletRequest对象详解 javax.servlet.http.HttpServletRequest是SUN制定的Servlet规范,是一个接口.表示请求,“HTTP请求协议”的完 ...

随机推荐

  1. Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南

    Vue2/3 项目中的 ESLint + Prettier 代码检测格式化风格指南 因为平时都是使用 VSCode ESLint + Prettier 检测格式化不规范代码,但是随着接手的项目越来越多 ...

  2. 远程连接DB2

    今天需要和别的公司业务系统进行对接,刚好他们使用的数据库是DB2,需求场景是这样的:我们需要往DB2里面写数据.查看数据,修改数据,统计数据.我们的源库是SQL SEVER,目标库是DB2;需求已经告 ...

  3. ORACLE 12c RAC日常维护命令

    转至:https://blog.51cto.com/ixdba/901545 CRS提供了很多命令可以管理和查看集群服务状态,常用的有crs_stat.crs_start.crs_stop.crsct ...

  4. 释放linux内存中的cache缓存

    echo 3 > /proc/sys/vm/drop_caches 记一次 经常用  exp 导出oracle全量数据库,发现linux内存一直在减小没有释放,即使 oracle重启也不行,只有 ...

  5. Python:Scrapy(四) 命令行相关

    学习自Scrapy 2.4.1 documentation 这一部分是对官方文档的学习,主要是理解翻译,来对之前的应用部分进行详细的理论补充. 1.保存爬取到的要素的方式: ①运行scrapy指令时, ...

  6. MySQL — DCL语言

    全称 Data Control Language.数据控制语言,用来创建数据库用户.控制数据库的访问权限. 1.用户管理 1.1.查询用户 select * from user; 1.2.创建用户 - ...

  7. LeetCode-009-回文数

    回文数 题目描述:给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数.例如,121 是回文,而 1 ...

  8. 微服务从代码到k8s部署应有尽有系列(十二、链路追踪)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  9. 矩池云里查看cuda版本

    可以用下面的命令查看 cat /usr/local/cuda/version.txt 如果想用nvcc来查看可以用下面的命令 nvcc -V 如果环境内没有nvcc可以安装一下,教程是矩池云上如何安装 ...

  10. 矩池云 | Tony老师解读Kaggle Twitter情感分析案例

    今天Tony老师给大家带来的案例是Kaggle上的Twitter的情感分析竞赛.在这个案例中,将使用预训练的模型BERT来完成对整个竞赛的数据分析. 导入需要的库 import numpy as np ...