JavaWeb基础:Servlet Response
ServletResponse简介
- ServletResponse代表浏览器输出,它提供所有HttpResponse的设置接口,可以设置HttpResponse的响应状态,响应头和响应内容。
- 生命周期:当用户发起对一个Servlet请求的时候,Tomcat自动传输一个空Response对象给Servlet进行内容填充,Servlet处理完以后将响应的Response通过Tomcat返回给客户端浏览器,显示响应结果。
- ServletResponse常用如下功能:
- 输出字符流,字节流(图片,视频...)
- 设置浏览器解析的方式:编码解析,文件下载,浏览器刷新,资源缓存方式
- 实现请求重定向
- 生成Cookie 回写给客户端
Http请求常用响应头
- Content-Encoding:gzip
- Content-Length:80
- Content-Language:zh-cn
- Content-Type:text/html;charset=GB2312
- Last-Modified: Tue, Oct 1 2016
- Refresh:1
- Content-Disposition: attachment; filename=xxx.jpg
- Set-Cookie: XXname=XXvalue;path=/cookieScopePath
- Expires:-1
- Cache-Control: no-cache
- Pragma: no-cache
- Connection: close/Keep-Alive
- Date: Tue,Oct 1 2016
- Location: http://localhost:8080/test
- Server: apache-tomcat
设置ServletResponse编码
乱码核心原因:浏览器默认的解析格式和服务器响应流的编码格式不一致
Eclipse中设置了字符编码格式为utf-8, 而浏览器的解码格式默认和OS(中文操作系统)保持一致为GB2312,编码和解码格式不一致就会造成中文输出乱码。
|
1
2
3
4
5
6
7
|
public class ResponseCharacterEncoding extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().write("你好,让我们来看一看JavaWeb编码"); }} |

可以通过以下几种方式来决定输出流编码,告知浏览器以什么码表打开服务器发送的数据,核心原理是输入输出编码一致并且涵盖了你的编码内容。如果不确定工程写入的编码格式,可以通过设置response.setCharacterEncoding("UTF-8"); 来确保编码和解码格式一致。
- 通过response.setHeader("Content-type","text/html;charset=UTF-8");
- 通过response.setContentType("UTF-8") 来设置输出的编码格式,作用同1 一样
- 通过response.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>") 模拟html头标签来设置输出编码格式。
添加如上内容以后,中文编码可以正常输出。
ServletResponse 实现文件下载
文件下载的本质是把服务器端的文件拷贝到客户端浏览器,和普通拷贝的流传输过程一样,不同的是Response需要单独设置浏览器的解析方式为下载:
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));
/**
* Response响应文件下载,下载的本质是把文件从本地拷贝给远程客户端,下载和普通文件拷贝的区别在于要设置浏览器输出选项,如下是一个文件下载的实现过程:
* 1. 读取本地文件,转化为输出流
* 2. 通过response传送流给浏览器,并且设置浏览器接受方式为下载
* 3. 如果文件名是中文,则下载的名字也需要进行输出编码的转换
*
*/
public class ResponseDownloadFiles extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException{
//获取文件流,设置文件的中文名字
InputStream in=this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/vivian/demo/response/fatcat.jpg");
String filename="胖猫";
response.setContentType("text/html;charset=UTF-8");
//设置输出文件流被浏览器解析的方式, 如果不设置文件名属性,默认取Servlet的名字
response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));
byte[] buffer=new byte[1024];
while(in.read(buffer)>0){
response.getOutputStream().write(buffer);
}
in.close();
}
}
ServletResponse 控制浏览器定时刷新网页
ServletResponse 管理浏览器缓存文档内容
ServletResponse 实现重定向
JavaWeb基础:Servlet Response的更多相关文章
- JavaWeb基础-servlet
Servlet简介 Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤: 1.编写一个Java类,实现s ...
- JavaWeb基础—Servlet
一.Servlet是什么 是服务器上运行的Java小应用程序,并被称为JavaWeb三大组件之一 通常我们把实现了Servlet的类,称之为Servlet Servlet作用主要是 1.接收请求数据 ...
- Javaweb基础--->Servlet(转载)
今天看到这篇博客,感觉还不错,拿来借鉴学习一下. 一.Servlet 是什么? Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客 ...
- JavaWeb基础—Servlet重要对象
一.ServletConfig对象 当servlet配置了初始化参数后(<init-param> <param-name> <param-value>),web容器 ...
- JavaWeb基础总结:Servlet专题
最近工作中有部分整改老接口的任务,大部分与Spring的拦截器,Tomcat相关,改到一些底层的代码发现,对基础J2EE的知识有些遗忘,需要频繁查阅,索性从头系统的整理一下Servlet和Filter ...
- JavaWeb基础: ServletContext
基本概念 Web容器在启动时,会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用. ServletContext(javax.servlet.http.Ser ...
- JavaWeb基础: 学习大纲
JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...
- JavaWeb基础知识总结
JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...
- 超详细的Java面试题总结(四 )之JavaWeb基础知识总结
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...
- 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总
作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...
随机推荐
- (1)创建一个叫做机动车的类: 属性:车牌号(String),车速(int),载重量(double) 功能:加速(车速自增)、减速(车速自减)、修改车牌号,查询车的载重量。 编写两个构造方法:一个没有形参,在方法中将车牌号设置“XX1234”,速 度设置为100,载重量设置为100;另一个能为对象的所有属性赋值; (2)创建主类: 在主类中创建两个机动车对象。
package a; public class Jidongche { private String chepaihao; private int chesu; private double zaiz ...
- HDU 5013 City Tour
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5013 题意: 思路: 这里有错,是Hi(x)=sigama(Hji)(j属于x) const int ...
- iOS—最全的真机测试教程
准备 开发者账号 自从Xcode7 出来之后,一般的真机测试不需要开发者账号,也就不需要看这篇教程,只有app具有“推送”等功能的时候,要真机测试就必须要开发者账号和设置证书.苹果只是让你体验一下它的 ...
- Burpsuite之Http Basic认证爆破
有的时候经常遇到401.今天正好朋友问怎么爆破,也顺便记录一下 怕忘记了 referer:http://www.2cto.com/Article/201303/194449.html 看到Burpsu ...
- 06_在web项目中集成Spring
在web项目中集成Spring 一.使用Servlet进行集成测试 1.直接在Servlet 加载Spring 配置文件 ApplicationContext applicationContext = ...
- poj 1654 Area (多边形求面积)
链接:http://poj.org/problem?id=1654 Area Time Limit: 1000MS Memory Limit: 10000K Total Submissions: ...
- Sublime Text 2 快捷键用法大全(转)
Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑)Ctrl+G 跳转到相应的行Ctrl+J 合并行(已选择需要合并的多行时)Ctrl+L 选择整行(按住-继续选择下 ...
- 工程源码github地址
APP APP历史版本地址:https://github.com/Myskety/aps APP最终版地址:https://github.com/dycaly/YHAPP 服务器 历史服务器版本地址: ...
- iOS - AVPlayer 音视频播放
前言 NS_CLASS_AVAILABLE(10_7, 4_0) @interface AVPlayer : NSObject @available(iOS 4.0, *) public class ...
- redis问题
phalcon 在读取数据的时候如果说reids数据库没有连接成功的话,则会显示一下错误: