(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类型
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(); //获得请求编码