Web开发之response
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("末日没有进行曲");
- getOutputStream和getWriter方法分别用于得到输出二进制数据、输出文本数据的ServletOuputStream、Printwriter对象。
- Servlet程序向ServletOutputStream或PrintWriter对象中写入的数据将被Servlet引擎从response里面获取,Servlet引擎将这些数据当作响应消息的正文,然后再与响应状态行和各响应头组合后输出到客户端。
- Serlvet的service方法结束后,Servlet引擎将检查getWriter或getOutputStream方法返回的输出流对象是否已经调用过close方法,如果没有,Servlet引擎将调用close方法关闭该输出流对象。 所以这个流自己可以不关,但是自己开的其他流应该关掉。
Web开发之response的更多相关文章
- Vim下的Web开发之html,CSS,javascript插件
Vim下的Web开发之html,CSS,javascript插件 HTML 下载HTML.zip 解压HTML.zip,然后将里面的所有文件copy到C:\Program Files\Vim\vi ...
- Web开发之Tomcat&Servlet
<!doctype html>01 - JavaEE - Tomcat&Servlet figure:first-child { margin-top: -20px; } #wri ...
- 移动web开发之rem适配布局
移动web开发之rem适配布局 方案: 页面布局文字能否随着屏幕大小变化而变化 流式布局和flex布局主要针对于宽度布局,那高度如何布局? 怎样让屏幕发生变化的时候元素高度和宽度等比例缩放? 1. r ...
- Web开发之Cookie and Session
会话 什么是会话? 简单说:用户开一个浏览器,点击多个超链接,访问服务器的多个web资源,然后关闭浏览器,整个过程就称之为一个会话. 会话过程要解决什么问题 每个用户在使用浏览器与服务器进行会话的过程 ...
- vert.x学习(三),Web开发之Thymeleaf模板的使用
在vert.x中使用Thymeleaf模板,需要引入vertx-web-templ-thymeleaf依赖.pom.xml文件如下 <?xml version="1.0" e ...
- Web开发之tomcat配置及使用(环境变量设置及测试,一个简单的web应用实例)
Tomcat的配置及测试: 第一步:下载tomcat,然后解压到任意盘符 第二步:配置系统环境变量 tomcat解压到的D盘 (路径为: D:\tomcat), 配置环境变量: 启动tomcat需要两 ...
- Java Web开发之Servlet、JSP基础
有好多年不搞Java Web开发了,这几天正好国庆放假,放松之余也有兴趣回头看看Java Web开发技术的基础. 我们都知道,Servlet是Java Web开发的重要基础,但是由于Servlet开发 ...
- Web开发之RSET API
REST介绍 如果要说什么是REST的话,那最好先从Web(万维网)说起. 什么是Web呢?读者可以查看维基百科的词条(http://zh.wikipedia.org/zh-cn/Web),具体的我就 ...
- .NET Web开发之.NET MVC框架
摘要:MVC是一种架构设计模式,该模式主要应用于图形化用户界面(GUI)应用程序.那么什么是MVC?MVC由三部分组成:Model(模型).View(视图)及Controller(控制器). MVC概 ...
随机推荐
- 教会你彻底解决android studio c/c++ jni代码无法跳转
时不时总会遇到原来c c++ jni代码跳转很欢乐,突然也不知道咋滴了build也能build成功,运行也能正常运行,就是代码不能跳转了,首先来科普下一些背景知识. 如果让代码跳转起来,大概需要做哪些 ...
- CF749B Parallelogram is Back 题解
Content 给出平行四边形的三个顶点 \((x_1,y_1),(x_2,y_2),(x_3,y_3)\),求出所有可能的第四个顶点. 数据范围:\(\forall i\in[1,3],-1000\ ...
- CF19A World Football Cup 题解
Content 有 \(n\) 个球队参加一场足球比赛,比赛排名前 \(\dfrac{n}{2}\) 的队伍将会进入下一轮的淘汰赛.比赛将会打 \(\dfrac{n(n-1)}{2}\) 场,胜者得 ...
- CF701A Cards 题解
Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\),试在其中找到 \(\dfrac{n}{2}\) 对数,使得每个数对的元素的和都相等. 数据范围:\(2 ...
- 四、Uniapp+vue+腾讯IM+腾讯音视频开发仿微信的IM聊天APP,支持各类消息收发,音视频通话,附vue实现源码(已开源)-会话好友列表的实现
会话好友列表的实现 1.项目引言 2.腾讯云后台配置TXIM 3.配置项目并实现IM登录 4.会话好友列表的实现 5.聊天输入框的实现 6.聊天界面容器的实现 7.聊天消息项的实现 8.聊天输入框扩展 ...
- 【LeetCode】405. Convert a Number to Hexadecimal 解题报告(Java & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 Java解法 Python解法 日期 题目地址:ht ...
- 【LeetCode】1007. Minimum Domino Rotations For Equal Row 解题报告(Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 遍历一遍 日期 题目地址:https://leetc ...
- 【LeetCode】398. Random Pick Index 解题报告(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 每次遍历索引 字典保存索引 蓄水池抽样 日期 题目地 ...
- 1248 - Dice (III)
1248 - Dice (III) PDF (English) Statistics Forum Time Limit: 1 second(s) Memory Limit: 32 MB Given ...
- JVM 内存布局
JVM 内存布局规定了 Java 在运行过程中内存申请.分配.管理的策略,保证了 JVM 的高效稳定运行. 线程是否共享 Heap (堆区) 堆是 OOM 故障最主要的发生区域.它是内存区域中最大的一 ...