Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。


我们要获取客户机提交过来的数据,只需要找request对象就行了。要向容器输出数据,只需要找response对象就行了。

下面我们介绍response的主要用法

中文文件名文件的下载

关于编码:

文件内容要用 response.setContextChest()

文件名用URLEncoder.encode()

//获取文件的路径
String path = getServletContext().getRealPath("/WEB-INF/classes/美女.jpg");//默认从工程路径开始 //创建输入流
InputStream is = new FileInputStream(path);
byte[] bs = new byte[1024];
int b = 0; //创建输出流对象
ServletOutputStream os = response.getOutputStream(); //对中文进行编码
//先拿到中文的文件名,"/"以"\\"替换(Windows平台特性)
String name = path.substring(path.lastIndexOf("\\") + 1, path.length()); //对中文文件名进行编码
name = URLEncoder.encode(name, "utf-8"); //通知浏览器以下载的方式打开文件
response.setHeader("Content-Disposition", "attachment;filename=美女.jpg"); while((b = is.read(bs)) != -1){
os.write(bs, 0, b);
}

输出随机图片

  • HTML页面上

    需要设置一个图片,然后图片地址设置为servlet。点击按钮重新让图片的url改变为访问servlet(url地址每次需要不一样,不然会有缓存,可以采用+一个当前时间)

  • servlet中

    //创建两个变量
    int width = 120;
    int height = 30;
    //创建内存图片
    BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
    //创建画笔
    Graphics g = image.getGraphics();
    //指定边框的颜色
    g.setColor(Color.RED);
    //画图像的边框
    g.drawRect(0, 0, width, height); //填充一下矩形的背景色
    //设定画笔的颜色
    g.setColor(Color.YELLOW);
    //填充矩形的背景
    g.fillRect(1, 1, width-2, height-2); //设置字体大小
    g.setFont(new Font("幼圆",Font.BOLD + Font.ITALIC,25)); //填充内容
    Random r = new Random(); //设置画笔颜色
    g.setColor(Color.GRAY);
    //花30条干扰线
    for(int i=0;i<30;i++){
    g.drawLine(r.nextInt(width),r.nextInt(height),r.nextInt(width),r.nextInt(height));
    } //画到图片中
    //设定画笔的颜色
    g.setColor(Color.RED); //随机产生4个汉子
    String s = "末日没有进行曲IhavenoMoney";
    //先将汉字转换成Unicode编码
    //可新建一个properties然后输入汉字,看源码
    s = "\u672B\u65E5\u6CA1\u6709\u8FDB\u884C\u66F2IhavenoMoney";
    for(int i = 0; i<4; i++){
    char c = s.charAt(r.nextInt(s.length()));
    int flag = r.nextBoolean()?1:-1;
    g.drawString(c+"",20 + 20*i + flag*r.nextInt(10),23 + flag*r.nextInt(5));
    } //随机产生4个数字输出到页面
    for(int i = 0; i<4; i++){
    int n = r.nextInt(10);
    //画到图片中
    g.drawString(n+"",20 + 20*i,20);
    } //告诉客户端不要缓存
    response.setHeader("Expires", -1+"");
    response.setHeader("Cache-control","no-cache");
    response.setHeader("Pragram","no-cache"); //将图片输出到客户端
    ImageIO.write(image, "jpg", response.getOutputStream());

定时刷新

//每隔2s刷新
response.setHeader("Refresh", "2");
response.getWriter().write("aa"+new Random.nextInt()); //每隔2s刷新到其他资源
response.setHeader("Refresh", "2;url=/a.html");
response.getWriter().write("aa"+new Random.nextInt());

控制客户端浏览器的缓存

response.setContentType("text/html;charset=UTF-8");
response.getWrite().write("圣诞快乐"); //控制缓存的时间
//时间是从1970年的1月1日0点0时0分0秒0毫秒开始计时
response.setDateHeader("Expires", System.currentTimeMills() + 10000);

请求重定向

System.out.println("servletresponse");

//第一种方式
response.setStatus(302);
response.setHeader("Location","ServletResponse/servlet/ServletRespon2"); //第二种方式(底层和第一种方式实现一样)
response.sendRedirect("Location","ServletResponse/servlet/ServletRespon2");

response对象的一些细节

//不要在一个servlet中同时使用字节流和字符流
//以下会引发500错误
response.getOutputStream().write("圣诞快乐".getBytes());
response.getWriter().write("末日没有进行曲");
  1. getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
  2. Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
  3. Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。 所以这个流自己可以不关,但是自己开的其他流应该关掉。

Web开发之response的更多相关文章

  1. Vim下的Web开发之html,CSS,javascript插件

    Vim下的Web开发之html,CSS,javascript插件   HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...

  2. Web开发之Tomcat&Servlet

    <!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...

  3. 移动web开发之rem适配布局

    移动web开发之rem适配布局 方案: 页面布局文字能否随着屏幕大小变化而变化 流式布局和flex布局主要针对于宽度布局,那高度如何布局? 怎样让屏幕发生变化的时候元素高度和宽度等比例缩放? 1. r ...

  4. Web开发之Cookie and Session

    会话 什么是会话? 简单说:用户开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称之为一个会话. 会话过程要解决什么问题 每个用户在使用浏览器与服务器进行会话的过程 ...

  5. vert.x学习(三),Web开发之Thymeleaf模板的使用

    在vert.x中使用Thymeleaf模板,需要引入vertx-web-templ-thymeleaf依赖.pom.xml文件如下 <?xml version="1.0" e ...

  6. Web开发之tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)

    Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 tomcat解压到的D盘 (路径为: D:\tomcat), 配置环境变量: 启动tomcat需要两 ...

  7. Java Web开发之Servlet、JSP基础

    有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...

  8. Web开发之RSET API

    REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web),具体的我就 ...

  9. .NET Web开发之.NET MVC框架

    摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...

随机推荐

  1. 教会你彻底解决android studio c/c++ jni代码无法跳转

    时不时总会遇到原来c c++ jni代码跳转很欢乐,突然也不知道咋滴了build也能build成功,运行也能正常运行,就是代码不能跳转了,首先来科普下一些背景知识. 如果让代码跳转起来,大概需要做哪些 ...

  2. CF749B Parallelogram is Back 题解

    Content 给出平行四边形的三个顶点 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),求出所有可能的第四个顶点. 数据范围:\(\forall i\in[1,3],-1000\ ...

  3. CF19A World Football Cup 题解

    Content 有 \(n\) 个球队参加一场足球比赛,比赛排名前 \(\dfrac{n}{2}\) 的队伍将会进入下一轮的淘汰赛.比赛将会打 \(\dfrac{n(n-1)}{2}\) 场,胜者得 ...

  4. CF701A Cards 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试在其中找到 \(\dfrac{n}{2}\) 对数,使得每个数对的元素的和都相等. 数据范围:\(2 ...

  5. 四、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-会话好友列表的实现

    会话好友列表的实现 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展 ...

  6. 【LeetCode】405. Convert a Number to Hexadecimal 解题报告(Java & Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...

  7. 【LeetCode】1007. Minimum Domino Rotations For Equal Row 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历一遍 日期 题目地址:https://leetc ...

  8. 【LeetCode】398. Random Pick Index 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 每次遍历索引 字典保存索引 蓄水池抽样 日期 题目地 ...

  9. 1248 - Dice (III)

    1248 - Dice (III)   PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB Given ...

  10. JVM 内存布局

    JVM 内存布局规定了 Java 在运行过程中内存申请.分配.管理的策略,保证了 JVM 的高效稳定运行. 线程是否共享 Heap (堆区) 堆是 OOM 故障最主要的发生区域.它是内存区域中最大的一 ...