request:代表请求,在浏览器的地址栏输入地址,点击回车,这个过程称为一次请求
response:代表响应,服务器端根据的请求,返回数据到浏览器中进行显示,这个过程称为一次响应
1、response的简介
,是一个接口,父接口是ServletResponse,代表响应对象
的响应包含三部分组成
第一部分:响应行
(1)状态码
(2)主要的方法
:设置状态码的方法
== response.setStatus(302)
''
第二部分:响应头
(1)是key-value结构,一个key可以有一个value,一个key也可以有多个value
(2)方法
:设置响应头
两个参数:第一个参数是响应名称;第二个参数值
针对一个key和一个value情况
== setHeader("aa","11");
setHeader("aa","22");
结果:名称 aa ,值 22
针对特殊的类型,设置头的方法
:针对int类型值的方法
:值long类型,是毫秒数(1970 1 1至今的毫秒数)
:设置响应头
两个参数:第一个参数是响应名称;第二个参数值
针对一个key和多个value的情况
== addHeader("bb","55");
addHeader("bb","66");
结果:名称 bb ,值 55,66
针对特殊的类型,设置头的方法
:针对int类型值的方法
:值long类型,是毫秒数
第三部分:响应体
(1)向页面显示的内容
(2)方法
:使用字符流向页面输出内容
:使用字节流向页面输出内容
2、重定向的案例
使用重定向实现登录的操作
(1)需求的描述:
在登录页面中,输入用户名和密码,判断输入的用户名和密码是否正确;
如果用户名和密码都正确,登录成功,向页面输出内容;
如果用户名或者密码有一个是错误的,重定向到登录页面。
(2)实现的步骤:
第一步:创建登录页面,写表单,在表单里面写两个输入项,一个输入用户名,一个输入密码,提交到一个servlet里面
第二步:创建servlet,在这个servlet里面首先获取到输入的用户名和密码,根据用户名和密码进行判断(用户名如果是
,密码如果是123456表示正确的)
如果用户名和密码都正确,登录成功,向页面输出内容;
response.getWriter().write("login success");
否则重定向到登录页面
设置状态码
response.setStatus(302);
使用头Location完成重定向
response.setHeader("Location", "/day08-1/login.html");
(3)代码实现
得到输入的用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
根据用户名和密码判断,(用户名admin、密码123456)
if("admin".equals(username) && "123456".equals(password)) {
向页面输出内容
response.getWriter().write("login success");
重定向到登录页面
设置状态码
response.setStatus(302);
使用头Location完成重定向
response.setHeader("Location", "/day08-1/login.html");
}
(4)'重定向的代码简写的方式
要重定向到的页面的路径");\
3、定时跳转的案例
当注册一个网站,注册完成之后,5秒之后跳转到登录页面
实现方式
(1)使用头信息Refresh实现
(2)写法: response.setHeader("Refresh","在几秒值后跳转;url=要跳转到页面的路径");
创建servlet,在servlet实现,在五秒之后跳转到一个页面
response.setHeader("Refresh", "5;url=/day08-1/login.html");
倒计时的效果
(1)直接在html页面中实现操作
在html中使用meta标签实现页面的定时跳转
<meta http-equiv="Refresh" content="3;url=/day08-1/login.html">
<body>
页面将在<span id="spanid"> </span>秒之后跳转</h1>
</body>
(2)倒计时
每一秒向span标签里面写内容
里面widow对象里面 setInterval方法
<script type="text/javascript">
每一秒向span标签里面写内容
里面widow对象里面 setInterval方法
var m = 5;
function loadTime() {
得到span标签
var span1 = document.getElementById("spanid");
向span里面写内容
span1.innerHTML = m;
m--;
}
setInterval("loadTime();",1000);
</script>
4、设置响应体(向页面输出内容)
使用字节流向页面输出内容
(1)getOutputStream()
(2)代码
输出的内容".getBytes());
(3)如果向页面输出中文,根据'不同的浏览器'的编码设置'会'产生乱码问题
解决方法:
/*
、设置浏览器的编码
、设置字节数组的编码
让浏览器的编码和字节数组的编码一致
* */
设置浏览器的编码 使用头信息 Content-Type
response.setHeader("Content-Type", "text/html;charset=utf-8");
设置字节数组的编码
字节流中文".getBytes("utf-8"));
4.2 使用字符流向页面输出内容
(1)getWriter()
(2)代码
response.getWriter().write("response");
(3)如果使用字符流向页面输出中文,一定会有乱码
/*
使用字符流向页面输出内容;首先会把内容放到response缓冲区里面,
缓冲区默认的编码是 iso8859-1,这个编码不支持中文,一定会有乱码
*
解决方法:
、设置response缓冲区的编码
、设置浏览器的编码
缓冲区的编码和浏览器的编码一致
* */
设置response缓冲区的编码
response.setCharacterEncoding("utf-8");
设置浏览器的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
字符流中文");
5、使用response的流的注意事项
使用字符流向页面输出中文乱码问题解决,简写方式
response.setContentType("text/html;charset=utf-8");
字节流和字符流是互斥的
使用字符流输出
response.getWriter().write("aaa");
字节流和字符流是互斥的
response.getOutputStream().write("hello".getBytes());
使用字符流不能直接向页面输出数字
根据数字到码表中查询数字对应的字符,把字符输出
response.setCharacterEncoding("utf-8");
response.getWriter().write(111);