servlet中的HttpServletResponse对象
当有多个客户端浏览器去请求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对象的更多相关文章
- 在Action类中获得HttpServletResponse对象的四种方法
在struts1.xAction类的execute方法中,有四个参数,其中两个就是response和request.而在Struts2中,并没有任何参数,因此,就不能简单地从execute方法获得Ht ...
- Servlet中的request对象、重定向和转发的差别(6)
1.这里所说的request对象指的是HttpServletRequest对象,它代表client的请求,当client通过HTTP协议訪问server时.HTTP请求头中的全部信息都封装在这个对象中 ...
- Servlet中的HttpServletResponse 类
HttpServletResponse 类的作用: 理解:顾名思义 就是响应客户端的内容, HttpServletResponse 类和 HttpServletRequest ...
- servlet中的ServletConfig对象
ServletConfig对象对应web.xml文件中的<servlet>节点.当Tomcat初始化一个Servlet时,会创建ServletConfig对象,并将该Servlet的配置信 ...
- servlet中的ServletContext对象
ServletContext官方叫Servlet上下文.服务器会为每一个Web应用创建一个ServletContext对象.这个对象全局唯一,而且Web应用 中的所有Servlet都共享这个对象(在整 ...
- servlet中的HttpServletRequest对象
HttpServletRequest对象表示客户端浏览器发起的请求,当客户端浏览器通过HTTP协议访问服务器时,Tomcat会将HTTP请求中的所有信息解析并封装在HttpServletRequest ...
- [原创]java WEB学习笔记05:Servlet中的ServletConfig对象
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- Servlet中获取JSP内置对象
方便自己查询,嫌低级的勿喷.... 1.request 在servlet的doGet和doPost的参数中就有HttpServletRequest req参数,而JSP内置request对象就是Htt ...
- Java 中的 HttpServletRequest 和 HttpServletResponse 对象
HttpServletRequest对象详解 javax.servlet.http.HttpServletRequest是SUN制定的Servlet规范,是一个接口.表示请求,“HTTP请求协议”的完 ...
随机推荐
- Linux系统最重要的工具——Shell学习笔记
一.为什么学习Shell脚本语言 1.Shell脚本语言是实现Linux/UNIX系统管理及自动化运维必备的重要工具,Linux/UNIX系统底层及 基础应用软件的核心大都涉及Shell脚本的内容. ...
- maven通用镜像设置
<mirrors> <mirror> <id>nexus-aliyun</id> <mirrorOf>central</mirrorO ...
- python os.system 和popen
1.python os.system 和popen 其中第一个只会返回0或者1,另外一个会返回执行结果 每天生成一个文件,并把磁盘的使用情况写到到这个文件中,文件名为日期格式(yyyy-mm-dd ...
- python中max使用key参数
arr = [1,2,2,2,2,3,3,3] arr = collections.Counter(arr) b = max(arr.keys(),key = arr.get) 这个时候b为arr中元 ...
- petite-vue源码剖析-事件绑定`v-on`的工作原理
在书写petite-vue和Vue最舒服的莫过于通过@click绑定事件,而且在移除元素时框架会帮我们自动解除绑定.省去了过去通过jQuery的累赘.而事件绑定在petite-vue中就是一个指令(d ...
- linux 中 /dev/null和/dev/zero的作用以及区别
在类Unix操作系统中,设备节点并不一定要对应物理设备.没有这种对应关系的设备被称之为伪设备.操作系统运用了它们实现多种多样的功能,/dev/null和/dev/zero就是这样的设备,类似的还有/d ...
- 【NLP】
- 基于Spring Boot的线程池监控方案
前言 这篇是推动大家异步编程的思想的线程池的准备篇,要做好监控,让大家使用无后顾之忧,敬畏生产. 为什么需要对线程池进行监控 Java线程池作为最常使用到的并发工具,相信大家都不陌生,但是你真的确定使 ...
- tensorflow源码解析之framework-allocator
目录 什么是allocator 内存分配器的管理 内存分配追踪 其它结构 关系图 涉及的文件 迭代记录 1. 什么是allocator Allocator是所有内存分配器的基类,它定义了内存分配器需要 ...
- pandas常用操作详解——pd.concat()
concat函数基本介绍: 功能:基于同一轴将多个数据集合并 pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=Fa ...