当有多个客户端浏览器去请求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. Python 的垃圾回收

    垃圾回收 首先介绍两个画图的工具:objgraph 包和在线绘图网站 draw.io.具体的使用以后再写. 1.引用计数 Python 中,每个对象都有存有指向该对象的引用总数,即:引用计数(refe ...

  2. weblogic补丁安装失败

    转至:https://www.cnblogs.com/lsdb/p/7234989.html weblogic补丁安装失败(Patch B25A is mutually exclusive and c ...

  3. @vue/cli的配置知道多少-publicPath,outputDir,assetsDir,indexPath,filenameHashing,configureWebpack,productionSourceMap

    vue.config.js的简单介绍 vue.config.js 是一个可选的配置文件, 在项目的 (和 package.json 同级的) 根目录中存在这个文件. 默认情况没有这个文件需要我们手动去 ...

  4. Qt:QJsonValue

    0.说明 QJsonValue类用于操作JSON中的各种数据. JSON是用于存储结构化数据的格式,JSON中的数据可以是六种类型: 基本类型 存储类型 bool QJsonValue::Bool d ...

  5. 自己创建bmp图像

    随便找一张图片,右键选择打开方式为画图,再在画图中保存为bmp即可 如果要保存为png文件,也可以这样

  6. pandas模块篇(终章)及初识mataplotlib

    今日内容概要 时间序列 针对表格数据的分组与聚合操作 其他函数补充(apply) 练习题(为了加深对DataFrame操作的印象) mataplotlib画图模块 今日内容详细 时间序列处理 时间序列 ...

  7. 微服务入门二:SpringCloud(版本Hoxton SR6)

    一.什么是SpringCloud 1.官方定义 1)官方定义:springcloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具(例如配置管理.服务发现.断路器.智能路由.微代理.控制总线 ...

  8. WordCount基于本地和java的使用

    直接使用hadoop中的wordcount中的jar包进行使用 JAVA实现WordCount import java.io.IOException; import org.apache.hadoop ...

  9. 从零开始Pytorch-YOLOv3【笔记】(一)配置文件解读

    前言 这是github上的一个项目YOLO_v3_tutorial_from_scratch,它还有相应的blog对其详细的解读.机器之心翻译了他的tutorial:从零开始PyTorch项目:YOL ...

  10. .NET6: 开发基于WPF的摩登三维工业软件 (8) - MVVM

    基于WPF开发界面的一个很大优势是可以方便地基于MVVM设计模式开发应用.本文从应用的角度基于MVVM实现参数化管材的创建界面. 1 MVVM MVVM是Model-View-ViewModel的简写 ...