您的位置:首页 > 产品设计 > UI/UE

java程序员第十课 javaweb之request&response

2015-11-17 16:57 597 查看
1、昨天内容回顾

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实现文件的下载

*文件下载有两种方式:

第一种方式,直接使用超链接来实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: