java程序员第十课 javaweb之request&response
2015-11-17 16:57
597 查看
1、昨天内容回顾
2、servlet里面两个对象
3、response对象的介绍
* 名称:HttpServletResponse:作为客户端响应
* HttpServletResponse是一个接口,父接口是 ServletResponse
4、案例一:使用response实现登录的重定向
* 有一个登录页面
** 有表单,有输入项(用户名和密码)
** 提交按钮
* 有一个servlet来处理登录操作
** 输入正确的用户名和密码,直接在页面输出一个 登录成功
** 用户名或者密码错误,重定向到登录页面
5、案例二:使用response实现页面的定时跳转(控制秒数)
* 使用头 Refresh
* servlet写法:response.setHeader(“Refresh”, “5;url=/day10/response/login.html”);
* 在页面中写法:在头标签head标签里面,
* 想要实现控制秒数,使用js操作
- var m = 5;
function change1() {
//alert(‘1’);
//获取到span
var span1 = document.getElementById(“spanid”);
//使用innerHTML写入到span里面
span1.innerHTML = m;
m–;
}
//实现定时实现
setInterval(“change1();”,1000);
6、案例三:使用response实现禁用浏览器缓存
** 禁用浏览器缓存可以保证每次数据都是最新的(数据是不断变化)
- 比如 网银
** 使用三个头信息
Cache-Control : no-cache
Pragma : no-cache
Expires: -1
** 获取当前时间:
- Date date = new Date();
date.toLocaleString();
** 如果在一些版本(ie6)的浏览器中出现了数据不能变化,这个时候出现了缓存,可以禁用浏览器缓存
- //禁用浏览器缓存
//Cache-Control : no-cache
response.setHeader(“Cache-Control”, “no-cache”);
//Pragma : no-cache
response.setHeader(“Pragma”, “no-cache”);
//Expires: -1:固定写法
** Expires头时候,值是一个毫秒数,固定写法 -1
response.setDateHeader(“Expires”, -1);
7、response向页面输出中文的乱码问题
8、开发中一些细节问题(注意的问题)
* 重定向操作(有两种写法)
** //设置状态码 302
response.setStatus(302);
//重定向到登录页面 使用头 Location
response.setHeader(“Location”, “/day10/response/login.html”);
9、使用response实现文件的下载
*文件下载有两种方式:
第一种方式,直接使用超链接来实现
2、servlet里面两个对象
客户端每次发送http请求时候,服务器会为每次的请求创建一个对象request,同时也会创建一个resposne对象作为响应
3、response对象的介绍
* 名称:HttpServletResponse:作为客户端响应
* HttpServletResponse是一个接口,父接口是 ServletResponse
* 常用的方法 在http协议里面,分为三部分 1、响应行 ** 设置状态码 setStatus(int sc) 2、响应头 可以是一个key对应一个value,一个key对应多个value ** 设置头:setHeader(java.lang.String name, java.lang.String value) - 一个key对应一个value - 比如: setHeader("aa","100"); setHeader("aa","101"); 结果:101 ** 针对不同的类型提供了方法 - setIntHeader(java.lang.String name, int value) - setDateHeader(java.lang.String name, long date) :值是一个毫秒数 ** 设置头:addHeader(java.lang.String name, java.lang.String value) - 一个key对应多个value - 比如: addHeader("bb","200"); addHeader("bb","201"); 结果:bb:200,201 ** 针对不同的类型提供了方法 - addIntHeader(java.lang.String name, int value) - addDateHeader(java.lang.String name, long date) :值是一个毫秒数 3、响应体 ** 在页面显示的内容 getWriter(): 使用字符流 getOutputStream():使用字节流 ***案例 ** 从服务器上拿到的数据显示在页面上,这些操作都可以使用response实现
4、案例一:使用response实现登录的重定向
* 有一个登录页面
** 有表单,有输入项(用户名和密码)
** 提交按钮
* 有一个servlet来处理登录操作
** 输入正确的用户名和密码,直接在页面输出一个 登录成功
** 用户名或者密码错误,重定向到登录页面
1、接受到传递过来的用户名和密码 ** request.getParameter(); 2、判断用户名和密码是否正确(admin 123456) 3、如果正确,直接在页面输出 登录成功 4、如果错误,重定向到登录页面 * //设置状态码 302 response.setStatus(302); //重定向到登录页面 使用头 Location response.setHeader("Location", "/day10/response/login.html");
5、案例二:使用response实现页面的定时跳转(控制秒数)
* 使用头 Refresh
* servlet写法:response.setHeader(“Refresh”, “5;url=/day10/response/login.html”);
* 在页面中写法:在头标签head标签里面,
* 想要实现控制秒数,使用js操作
- var m = 5;
function change1() {
//alert(‘1’);
//获取到span
var span1 = document.getElementById(“spanid”);
//使用innerHTML写入到span里面
span1.innerHTML = m;
m–;
}
//实现定时实现
setInterval(“change1();”,1000);
6、案例三:使用response实现禁用浏览器缓存
** 禁用浏览器缓存可以保证每次数据都是最新的(数据是不断变化)
- 比如 网银
** 使用三个头信息
Cache-Control : no-cache
Pragma : no-cache
Expires: -1
** 获取当前时间:
- Date date = new Date();
date.toLocaleString();
** 如果在一些版本(ie6)的浏览器中出现了数据不能变化,这个时候出现了缓存,可以禁用浏览器缓存
- //禁用浏览器缓存
//Cache-Control : no-cache
response.setHeader(“Cache-Control”, “no-cache”);
//Pragma : no-cache
response.setHeader(“Pragma”, “no-cache”);
//Expires: -1:固定写法
** Expires头时候,值是一个毫秒数,固定写法 -1
response.setDateHeader(“Expires”, -1);
7、response向页面输出中文的乱码问题
* getOutputStream():使用字节流:处理中文乱码的方式 * 使用这种方式输出中文,不一定会有问题 * 设置浏览器的编码和字节数组的编码一致 * 设置浏览器的编码:response.setHeader("Content-Type", "text/html;charset=utf-8"); * 设置字节数组的编码:response.getOutputStream().write("字节流中文测试".getBytes("utf-8")); * getWriter(): 使用字符流:处理中文乱码的问题 * 使用这种方式,输出中文一定会有问题 ** 数据是放在response缓冲区里面,默认编码 iso8859-1,这种编码是不支持中文 * 如何解决: 1、设置response缓冲区编码 response.setCharacterEncoding("utf-8"); 2、设置浏览器的编码 response.setHeader("Content-Type", "text/html;charset=utf-8");
8、开发中一些细节问题(注意的问题)
* 重定向操作(有两种写法)
** //设置状态码 302
response.setStatus(302);
//重定向到登录页面 使用头 Location
response.setHeader(“Location”, “/day10/response/login.html”);
** //简写方式 response.sendRedirect("/day10/response/login.html"); * 字符流解决中文问题(两种写法) ** 1、设置response缓冲区编码 response.setCharacterEncoding("utf-8"); 2、设置浏览器的编码 response.setHeader("Content-Type", "text/html;charset=utf-8"); ** //简写方式 response.setContentType("text/html;charset=utf-8"); * text/html;charset=utf-8:中间必须使用分号;隔开 * 使用字符流方式,不能直接向页面输出数字 — 会去码表中取找数字对应的字符,把字符输出 - 想要输出一个数字,使用字符串形式;response.getWriter().write("111"); * 字节流和字符流是互斥的(不能同时一起使用) * 或者使用字节流,或者使用字符流,而不能一起使用
9、使用response实现文件的下载
*文件下载有两种方式:
第一种方式,直接使用超链接来实现
相关文章推荐
- 11 SMO优化算法(Sequential minimal optimization)
- UIButton的最基础用法
- SpriteBuilder实现2D精灵光影明暗反射效果(一)
- SpriteBuilder实现2D精灵光影明暗反射效果(一)
- SpriteBuilder实现2D精灵光影明暗反射效果(一)
- iOS8之UIPopoverPresentationController
- How should 50 red and 50 blue marbles be distributed between two jars so as to maximize the chance o
- 自定义UITableViewCell初始化代码
- WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-
- UI设计颜色风格
- easyui datagrid 编辑的时候只能编辑一行
- iOS无限轮播图片的实现-仅仅用了三个UIImageView实现多图的轮播效果
- TableView编辑中实现多行删除方法以及注意
- sicily 1028. Hanoi Tower Sequence
- UITableViewcell选中后去掉背景灰色
- IOS之UI--小实例项目--添加商品和商品名(使用xib文件终结版) + xib相关知识点总结
- Request类和Response类(转载)
- priority_queue 优先队列使用方法
- RAII(Resource Acquisition Is Initialization资源获取即初始化 )思想
- 向 mysql 插入insert时 汉字 Incorrect string value 解决办法