HttpServletResponse对象代表服务器的响应。

这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

几个方法:

  向客户端发送数据:

    getOutputStream()

    getWriter()

  

  两个流(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的更多相关文章

  1. JavaWeb基础: ServletContext

    基本概念 Web容器在启动时,会为每个Web应用程序都创建一个对应的ServletContext对象,它代表当前Web应用. ServletContext(javax.servlet.http.Ser ...

  2. JavaWeb基础知识总结

    JavaWeb基础知识总结.   1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供 ...

  3. 超详细的Java面试题总结(四 )之JavaWeb基础知识总结

    系列文章请查看: 超详细的Java面试题总结(一)之Java基础知识篇 超详细的Java面试题总结(二)之Java基础知识篇 超详细的Java面试题总结(三)之Java集合篇常见问题 超详细的Java ...

  4. JavaWeb基础: 学习大纲

    JavaWeb基础: Web应用和Web服务器 JavaWeb基础: Tomcat JavaWeb基础:HTTP协议和基于Restful的架构 JavaWeb基础: Web工程配置文件 JavaWeb ...

  5. 关于java基础、多线程、JavaWeb基础、数据库、SSM、Springboot技术汇总

    作者 : Stanley 罗昊 本人自行总结,纯手打,有疑问请在评论区留言 [转载请注明出处和署名,谢谢!] 一.java基础 1.多态有哪些体现形式? 重写.重载 2. Overriding的是什么 ...

  6. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...

  7. [JavaWeb基础] 002.JSP和SERVLET初级入门

    上一篇中,我介绍了javaweb项目的创建和Tomcat的搭建和部署,接下来我们要在上一篇的基础上去讲解一下简单的jsp和servlet交互,做出一个简单的登陆功能页面.该例子主要讲解了从页面请求道后 ...

  8. JavaWeb基础: 获取资源文件

    Web工程在编译构建完毕以后,需要部署到Tomcat上运行,资源的硬盘路径也会随着改变.要想对资源文件进行读写操作需要获取其硬盘地址,在Web工程中通常通过ServletContext/ClassLo ...

  9. JavaWeb基础:Servlet Response

    ServletResponse简介 ServletResponse代表浏览器输出,它提供所有HttpResponse的设置接口,可以设置HttpResponse的响应状态,响应头和响应内容. 生命周期 ...

随机推荐

  1. Vue2学习笔记:v-for指令

    1.使用 <!DOCTYPE html> <html> <head> <title></title> <meta charset=&q ...

  2. linux下postgresql的安装与卸载

    安装: sudo apt-get update sudo apt-get install postgresql 启动: sudo /etc/init.d/postgresql start 查看是否启动 ...

  3. 关于使用Entity Framework时遇到的问题 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。请确保在应用程序配置文件的“entityFramework”节中注册了该提供程序

    问题描述: 使用Entity Framework获取数据时报以下错误: 未找到具有固定名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序.请确保在应用程序 ...

  4. qt的共享内存

    https://blog.csdn.net/gdutlyp/article/details/50468677

  5. C# HttpWebRequest 笔记

    目录: 1,HttpWebRequest 实例化 2,GetResponse 获取请求结果 3,获取结果 4,获取流信息 HttpWebRequest 是一个Http 请求类,继承于 WebReque ...

  6. September 21st 2017 Week 38th Thursday

    What fire does not destroy, it hardens. 烈火摧毁不了的东西,只会变得更坚固. The true gold can stand the test of fire, ...

  7. 【0】如何在电脑中使用多个python版本【python虚拟环境配置】

    问题: 该篇解决如何在同一个操作系统中可以便捷诶的使用多个python版本.有时候我们在开发的时候会同时需要python2 和python3环境,或者是需要不同的版本,都可以尽心如下配置. (1)在c ...

  8. Hello World ! 第一篇随笔

    Hello World ! 第一篇随笔 /* * Language: C++ * Code Name: Hello World ! * @author Metak */ #include <io ...

  9. PHP Redis 全部操作方法 转载

    PHP Redis 全部操作方法   Classes and methods Usage Class Redis Class RedisException Predefined constants C ...

  10. vue 校验插件 veeValidate使用

    1.内置的校验规则 after{target} - 比target要大的一个合法日期,格式(DD/MM/YYYY) alpha - 只包含英文字符 alpha_dash - 可以包含英文.数字.下 ...