request与response

request:代表请求,在浏览器的地址栏输入地址,点击回车,这个过程称为一次请求

response:代表响应,服务器端根据的请求,返回数据到浏览器中进行显示,这个过程称为一次响应

 

1response的简介

1.1 HttpServletResponse,是一个接口,父接口是ServletResponse,代表响应对象

1.2 http的响应包含三部分组成

第一部分:响应行

1)状态码

2)主要的方法

= setStatus(int sc) :设置状态码的方法

== response.setStatus(302)

 

''

第二部分:响应头

1)是key-value结构,一个key可以有一个value,一个key也可以有多个value

2)方法

= 'setHeader(java.lang.String name, java.lang.String value) :设置响应头

== 两个参数:第一个参数是响应名称;第二个参数值

== 针对一个key和一个value情况

== setHeader("aa","11");

   setHeader("aa","22");

   结果:名称 aa ,值 22

= 针对特殊的类型,设置头的方法

= setIntHeader(java.lang.String name, int value) :针对int类型值的方法

= setDateHeader(java.lang.String name, long date) :值long类型,是毫秒数(1970 1 1至今的毫秒数)

 

= addHeader(java.lang.String name, java.lang.String value) :设置响应头

== 两个参数:第一个参数是响应名称;第二个参数值

== 针对一个key和多个value的情况

== addHeader("bb","55");

   addHeader("bb","66");

   结果:名称 bb ,值 55,66

= 针对特殊的类型,设置头的方法

= addIntHeader(java.lang.String name, int value) :针对int类型值的方法

= addDateHeader(java.lang.String name, long date) :值long类型,是毫秒数

 

第三部分:响应体

1)向页面显示的内容

2)方法

= getWriter():使用字符流向页面输出内容

'= getOutputStream():使用字节流向页面输出内容

 

2、重定向的案例

2.1 使用重定向实现登录的操作

1)需求的描述:

在登录页面中,输入用户名和密码,判断输入的用户名和密码是否正确;

如果用户名和密码都正确,登录成功,向页面输出内容;

如果用户名或者密码有一个是错误的,重定向到登录页面。

 

2)实现的步骤:

第一步:创建登录页面,写表单,在表单里面写两个输入项,一个输入用户名,一个输入密码,提交到一个servlet里面

第二步:创建servlet,在这个servlet里面首先获取到输入的用户名和密码,根据用户名和密码进行判断(用户名如果是

admin,密码如果是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");

} else { //重定向到登录页面

//设置状态码

response.setStatus(302);

//使用头Location完成重定向

response.setHeader("Location", "/day08-1/login.html");

}

4'重定向的代码简写的方式

response.sendRedirect("要重定向到的页面的路径");\

3、定时跳转的案例

3.1 当注册一个网站,注册完成之后,5秒之后跳转到登录页面

3.2 实现方式

1)使用头信息Refresh实现

2)写法: response.setHeader("Refresh","在几秒值后跳转;url=要跳转到页面的路径");

3.3 创建servlet,在servlet实现,在五秒之后跳转到一个页面

response.setHeader("Refresh", "5;url=/day08-1/login.html");

3.4 倒计时的效果

1)直接在html页面中实现操作

html中使用meta标签实现页面的定时跳转

<meta http-equiv="Refresh" content="3;url=/day08-1/login.html">

<body>

    <h1>页面将在<span id="spanid"> </span>秒之后跳转</h1>

  </body>

2)倒计时

//每一秒向span标签里面写内容

   //bom里面widow对象里面 setInterval方法

<script type="text/javascript">

   //每一秒向span标签里面写内容

   //bom里面widow对象里面 setInterval方法

   var m = 5;

   function loadTime() {

   //得到span标签

   var span1 = document.getElementById("spanid");

   //span里面写内容

   span1.innerHTML = m;

   m--;

   }

   setInterval("loadTime();",1000);

</script>

 

4、设置响应体(向页面输出内容)

4.1 使用字节流向页面输出内容

1getOutputStream()

2)代码

response.getOutputStream().write("输出的内容".getBytes());

3)如果向页面输出中文,根据'不同的浏览器'的编码设置''产生乱码问题

* 解决方法:

/*

 * 1、设置浏览器的编码

 * 2、设置字节数组的编码

 * 让浏览器的编码和字节数组的编码一致

 * */

//设置浏览器的编码 使用头信息 Content-Type

response.setHeader("Content-Type", "text/html;charset=utf-8");

//设置字节数组的编码

response.getOutputStream().write("字节流中文".getBytes("utf-8"));

4.2 使用字符流向页面输出内容

1getWriter()

2)代码

response.getWriter().write("response");

3)如果使用字符流向页面输出中文,一定会有乱码

/*

 * 使用字符流向页面输出内容;首先会把内容放到response缓冲区里面,

 * response缓冲区默认的编码是 iso8859-1,这个编码不支持中文,一定会有乱码

 *

 * 解决方法:

 * 1、设置response缓冲区的编码

 * 2、设置浏览器的编码

 * response缓冲区的编码和浏览器的编码一致

 * */

//设置response缓冲区的编码

response.setCharacterEncoding("utf-8");

//设置浏览器的编码

response.setHeader("Content-Type", "text/html;charset=utf-8");

response.getWriter().write("字符流中文");

5、使用response的流的注意事项

5.1 使用字符流向页面输出中文乱码问题解决,简写方式

response.setContentType("text/html;charset=utf-8");

 

5.2 字节流和字符流是互斥的

//使用字符流输出

response.getWriter().write("aaa");

//字节流和字符流是互斥的

response.getOutputStream().write("hello".getBytes());

5.3 使用字符流不能直接向页面输出数字

//根据数字到码表中查询数字对应的字符,把字符输出

response.setCharacterEncoding("utf-8");

response.getWriter().write(111);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值