response(响应)request(请求)对象的作用, 重定向的特点, 请求转发和包含的特点与区别, 请求转发和重定向的区别

(1)response 响应对象


response是Servlet.service方法的一个参数,类型为HttpServletResponse


(1.1)response的生命周期

创建时机:客户端每访问一次,请求对象就会创建一个,响应对象就创建一个

                   当service方法执行完毕后 response对象和request对象销毁

(2)response的作用

1.设置响应头信息

2.发送状态码

3.设置响应正文

4.设置重定向(典型面试问题)


(3)response设置响应头信息 (作用一)

方法:setHeader("headName","headValue");

1.设置响应头信息

setHeader("content-type", "text/html;charset=utf-8");//设置浏览器文本类型为text/html utf-8编码解析

2.设置浏览器刷新相关的

setHeader("refresh","5");//浏览器5秒刷新一次

setHeader("refresh","5;http://www.baidu.com");//浏览器5秒后刷新到百度页面

3.设置浏览器不缓存

 response.setHeader("expires", "0");
 response.setHeader("pragma", "no-cache");
 response.setHeader("cache-control", "no-cache");

(4)response发送状态码(作用二)

方法:response.setStatus(200):设置状态码;

  response.sendError(404, “您要查找的资源不存在”):当发送错误状态码时,Tomcat会跳转到固定的错误页面去,但可以显示错误信息。

(5)response设置响应正文(作用三)

方法:response.getWriter();     //字符流

        response.getOutputStream();  //字节流

注意:(1)使用完成后 要注意关闭流

        (2)字符流和字节流不能同时使用 如果同时使用触发异常 

IllegalStateException (非法语句异常)

(6)response重定向(作用四)

原理:浏览器发送给客户端一个请求 客户端给浏览器响应一个状态码 设置一个重定向地址 浏览器再去访问新的地址 服务器再去响应浏览器的请求

a.发送一个状态码

b.设置一个重定向地址

代码实现:response.setStatus(302);//发送一个状态码

                 response.setHeader("location","/javaEE-05/servlet/FServlet");

实现重定向的便捷方法

response.sendRedirect("URL地址");

(6.1)response重定向特点

1.两次请求 两次响应

2.地址栏会发生变化

3.第一次访问可能是get 也可能是post 第二次访问一定是get

4.重定向可以重定向到站外资源

5.负责重定向的servlet不要设置响应体(响应正文)

6.重定向属于客户端行为

(7)request 请求对象

request是Servlet.servlet()方法的一个参数 类型为HttpServletRequest

(8)request生命周期

诞生:客户端访问

销毁:service方法执行完成后

(9)request作用

1.获得请求头(封装了请求头数据)

2.请求参数(封装了请求正文数据,如果是get请求,没有正文)

3.域对象功能(是一个域对象,可以把他当中Map来添加 获取数据)

4.请求转发和包含(提供了请求转发和包含功能)

(10)request获得请求头(作用一)

方法:getHeader(String name); //获取指定名称的请求头

          getHeaderNames(); //获得所有请求头名称 返回的是一个枚举类型

          getIntHeader(String name);  //获得值为int类型的请求头

(11)request获取请求参数(就是从客户端传递过来的参数)(作用二)


最常见的客户端传递参数方法有两种

get请求:form表单

                超链接

                地址栏追加参数

post请求:form表单

(11.1)get和post提交的区别

get提交:提交数据大小有限制 提交参数会以?号的形式追加到浏览器的地址栏中 多个参数以&做连接 数据不安全

post提交:提交数据大小没有限制 数据安全 效率低

方法:request.getParameter("attname"); //返回的是String类型

           request.getParameterNames();    //获得所有参数的名字

注意:(1)当指点名称不存在时 获得null

            (2)提交的参数相同,后边提交的参数将前边提交的参数覆盖

方法:request.getParameterValues("attname");  //获得请求中所有的参数值

提交表单

AServlet

方法 :request.getParameterMap();  //返回的是一个Map集合

           将从请求中获得参数内容封装到map集合当中




(12)request域对象功能(作用三)

request是域对象!在javaWeb中一共有四个域对象,其中ServletContext是域对象    他在整个web应用中只创建一个ServletContext

request是域对象 request可以在一个请求中共享数据

一个请求会创建一个request对象 如果一个请求经历了多个Servlet 那么多个Servlet就可以request来共享数据

在一个请求中经历多个Servlet 请求转发 请求包含(作用四)

方法:setAttribute(String name,Object value);//存储一个对象

           getAttribute(String name); //通过属性名获得属性值数据

            removeAttribute(String name);//通过属性名移除数据

            getAttributeNames();  //获得所有属性名 返回的是以枚举类型

(13)request请求转发 请求包含(作用四)

无论是请求转发 请求包含,都表示由多个servlet共同处理一个请求

请求转发方法:request.getRequestDispatcher(/servlet/BServlet).forward(request,response);

请求包含方法:request.getRequestDispatcher(/servlet/BServlet).include(request,response);

请求转发和包含的特点:

1.只有一次请求,一次响应

2.地址栏不会发生变化

3.属于服务器端行为

4.转发只能是站内资源

请求转发和请求包含的区别(面试问题):

转发:(留头不留体)

如果在AServlet中请求到BServlet,那么在AServlet中就不允许在输出响应体

即不能再使用response.getWriter()和response.getOutputStream()向客户端输出 这一工作应该由BServlet来完成

不能输出响应体但还是可以设置响应头 例如:response.setContentType("text/html;charset=utf-8");

包含:(留头又留体)

请求转发的限制 请求包含中没有


(14)请求转发与重定向的区别(面试问题)

1.请求转发是一次请求

重定向是两次请求

2.请求转发地址栏不会发生变化

重定向地址栏会发生变化

3.请求转发属于服务端行为

重定向属于客户端行为

4.请求转发要么都是get 要么都是post

重定向第二次请求一定是get

5.请求转发只能转发站内资源

重定向可以定向站外资源

(15)request获得请求相关的其他方法

与URL相关的方法



方法:getMethod(); //返回请求方法

            getLocale();  //返回当前客户端的locale,表示国家和语言

            getCharacterEncoding();  //获得请求编码

            


  




















  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值