JavaWeb基础—HttpServletResponse
HttpServletResponse对象代表服务器的响应。
这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。
几个方法:
向客户端发送数据:
两个流(getWriter()与getOutputStream())不能同时使用。
字符流 字节流
一个原则:在使用getWrite()之前,先调用setContentType("text/html;charset=utf-8")
发送状态码:
setStatus() 发送成功状态等,也可以302
当然,接口里定义了相关的相应的常量,无需直接写数字
常见的应用:
1.生成图片验证码:
主要用到的是封装好的生成类:VerifyCode 以及 BufferedImage (详细代码另一篇博客附上)
public class VerifyCodeServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/**
* 生成图片
* 保存图片上验证码文本到session域中
* 将图片响应给客户端
*/
VerifyCode vc = new VerifyCode();
BufferedImage image = vc.getImage();
request.getSession().setAttribute("vcode", vc.getText());
VerifyCode.output(image, response.getOutputStream());
}
}
2.设置相应头控制浏览器的行为:
例如:
response.setHeader("Cache-Control", "no-cache");//禁止缓存
response.setHeader("refresh", "5");//设置refresh响应头控制浏览器每隔5秒钟刷新一次
完成重定向,必须要带Location响应头!快捷重定向:sendRedirect(Location)
完成定时刷新,使用Refresh(有点类似于过会儿再重定向),注意格式5;URL
禁用浏览器缓存:(从index.jsp借着看)
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
/**
* 是每个请求进来的话就发送给每个请求的客户端
**/
response.geWriter().print(msg);
与write()方法的区别:
- response.getWriter()返回的是PrintWriter,这是一个打印输出流。
- response.getWriter().print(),不仅可以打印输出文本格式的(包括html标签),还可以将一个对象以默认的编码方式转换为二进制字节输出
- response.getWriter().writer(),只能打印输出文本格式的(包括html标签),不可以打印对象。
可参见:http://blog.csdn.net/sjl6666666666/article/details/53239820
【更新】:实现文件下载:
String path = this.getServletContext().getRealPath("/Download/定南中学.jpg");//获取文件的相对路径
String filename = path.substring(path.lastIndexOf("\\")+1);//获取文件名称,在转化为子串
//response.setHeader告诉浏览器以什么方式打开
//假如文件名称是中文则要使用 URLEncoder.encode()编码
//否则直接使用response.setHeader("content-disposition", "attachment;filename=" + filename);即可
response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(filename, "UTF-8"));
使用 输入流下载:
InputStream in = null ;
OutputStream out = null ;
try
{
in = new FileInputStream(path); //获取文件的流
int len = 0;
byte buf[] = new byte[1024];//缓存作用
out = response.getOutputStream();//输出流
while( (len = in.read(buf)) > 0 ) //切忌这后面不能加 分号 ”;“
{
out.write(buf, 0, len);//向客户端输出,实际是把数据存放在response中,然后web服务器再去response中读取
}
excel下载实例:
response.setHeader("Content-Disposition", "attachment;filename="+new String(fileName.getBytes("utf-8"),"iso8859-1"));
response.setContentType("application/ynd.ms-excel;charset=UTF-8");
OutputStream out=response.getOutputStream();
wb.write(out);
out.flush();
out.close();
下载实例:(基于jxls1.0)
@RequestMapping("/export")
public String testExport(HttpServletResponse response) throws Exception{
String tplPath = "F:/tamp.xlsx";
String destPath = "F:/export.xlsx";
List<receiver> reclist = reSe.findall();
Map<String, List<receiver>> beanParams = new HashMap<String, List<receiver>>();
beanParams.put("reclist", reclist);
XLSTransformer former = new XLSTransformer();
former.transformXLS(tplPath, beanParams, destPath);
InputStream in = null ;
OutputStream out = null ;
in = new FileInputStream(destPath); //获取文件的流
int len = 0;
byte buf[] = new byte[1024];//缓存作用
response.setContentType("application/vnd..ms-excel");
response.setHeader("content-Disposition","attachment;filename="+URLEncoder.encode("export.xlsx","utf-8"));
out = response.getOutputStream();//输出流
while( (len = in.read(buf)) > 0 ) //切忌这后面不能加 分号 ”;“
{
out.write(buf, 0, len);//向客户端输出,实际是把数据存放在response中,然后web服务器再去response中读取
}
return null;
}
JavaWeb基础—HttpServletResponse的更多相关文章
- JavaWeb基础: ServletContext
基本概念 Web容器在启动时,会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用. ServletContext(javax.servlet.http.Ser ...
- JavaWeb基础知识总结
JavaWeb基础知识总结. 1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...
- 超详细的Java面试题总结(四 )之JavaWeb基础知识总结
系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...
- JavaWeb基础: 学习大纲
JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...
- 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总
作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...
- [Java面试三]JavaWeb基础知识总结.
1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...
- [JavaWeb基础] 002.JSP和SERVLET初级入门
上一篇中,我介绍了javaweb项目的创建和Tomcat的搭建和部署,接下来我们要在上一篇的基础上去讲解一下简单的jsp和servlet交互,做出一个简单的登陆功能页面.该例子主要讲解了从页面请求道后 ...
- JavaWeb基础: 获取资源文件
Web工程在编译构建完毕以后,需要部署到Tomcat上运行,资源的硬盘路径也会随着改变.要想对资源文件进行读写操作需要获取其硬盘地址,在Web工程中通常通过ServletContext/ClassLo ...
- JavaWeb基础:Servlet Response
ServletResponse简介 ServletResponse代表浏览器输出,它提供所有HttpResponse的设置接口,可以设置HttpResponse的响应状态,响应头和响应内容. 生命周期 ...
随机推荐
- Android组件系列----Activity的生命周期
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
- Python 执行主程序
主程序里的代码包含的东西比较多, 如果在程序的.py文件里执行还要再调一遍方法, 但通常这个调用在测试完结后是要删掉的. 那么问题来了, 如果把这个代码直接发给别人, 执行时要再加上调用, 这个就很烦 ...
- Oracle EBS AR 收款API收款方法标识无效
1.确认是不是没有收款方法 methods那个表的问题2.查看收款方法那个LOV的问题3.界面录入 是否会有问题 碰到的问题是 收款日期比较早时 找不到对应的收款方法 银行账户需要重新设置
- C++ 入门随手笔记及联系
一.第一个C++程序 1.文件扩展名 C++源代码的文件扩展名.cpp.C.cxx.c(需要指定编译语言) 自定义的头文件依然保留.h 2.头文件 C++标准库的头文件不带.h,最常用的是ios ...
- 3. 跟踪标记 (Trace Flag) 1204, 1222 抓取死锁信息
跟踪标记:1204/1222 功能及用途: 捕获SQL Server死锁信息,并自动存放到错误日志(ERRORLOG)中. 举例: USE tempdb GO CREATE TABLE t1(id i ...
- CATransform3D的m34使用
CATransform3D的m34使用 效果图 源码 // // ViewController.m // StarWars // // Created by YouXianMing on 15/11/ ...
- 获取INET4与INET6的信息
获取INET4与INET6的信息 参考书籍: 本人封装的源码: // // IPAddressInfo.h // YXNETWORK // // http://www.cnblogs.com/YouX ...
- zabbix的日常监控-自动发现端口并监测(服务器开启的所有端口或监控指定端口)(十三)
动批量检查agent开放的端口 注:此方法给监控磁盘IO(即十二)篇过程一样: 注释:如果服务器上的应用都是固定的,不会随机产生的都可以使用自动发现端口来监控: 如果服务器会随机出现端口且每次启动程 ...
- 微信小程序初始化 operateWXData:fail invalid scope
初学者开发微信小程序,可以使用云开发来进行微信小程序的开发. 第一次使用开发工具遇到的问题 解决方案:1.找到云开发 2.点击开通,选择合适自己的开发环境: 3.完成后,返回开发工具界面点击项目第一个 ...
- mode="r" 和 函数末尾调用 regist()!!!!
def regist(): f = open(r"G:\课件\day09 初始函数\code\day009 初始函数\account", mode="r", e ...