Respones&Request原理及使用分析

本文深入探讨了HTTP协议中的Request和Response机制,详细解释了请求与响应的工作流程,包括请求头、响应头、主体内容等关键部分,同时阐述了它们在Web开发中的实际运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

* request&response的原理:


1.服务器接受到请求,发现请求的是Servlet,那么就会创建 request  和 response。
2.request对象中封装请求消息数据。
3.将request和response对象传递给service方法做参数
4.在服务器响应之前,会获取response对象中设置的响应消息数据。

* 结论:request对象和response对象都是由服务器创建的

* 继承关系

ServletRequest  <----继承----  HttpServletRequest <--实现--- RequestFacade




* response:响应对象
* 功能:设置响应消息

* 设置响应行:  HTTP/1.1  200 ok

* 设置响应状态码:setStatus(int st);
* 重定向功能实现:
//设置响应状态码  302
response.setStatus(302);
//设置头  location
response.setHeader("location", "http://www.baidu.com");


//简化版重定向
response.sendRedirect("http://www.sina.com");

* 重定向特点:
* 2次请求 2次响应。2个request对象
* 地址栏发生变化
* 可以重定向到外部站点

* 设置响应头:Content-Type: text/html;charset=utf-8;
* 设置响应头:
setHeader(String name,String value);
setDateHeader(String name,Date date);
setIntHeader(String name ,int value);

//设置content-type头.解决乱码问题
//response.setHeader("content-type", "text/html;charset=utf-8");
//简化形式
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("<h1>训练</h1>");


* 设置响应体:
* 发送字符数据
PrintWriter  getWriter():
* 设置输出流的编码:setCharacterEncoding("utf-8");
* 设置content-type类型,告诉浏览器服务器使用的编码方式,并且建议浏览器使用这种方式解码
setContentType("text/html;charset=utf-8");
* 该方法不紧可以设置响应头,还可以设置流的编码

* 注意:设置编码的操作,必须位于获取流对象之前。


* 发送字节数据:
ServletOutputStream  getOutputStream():





* request:请求对象
* 封装了请求消息数据

* 功能:
* 获取请求消息:
消息行:
getMethod():获取请求方式  如:GET、POST...
getContextPath():获取虚拟目录。 如:/day08
虚拟目录:项目访问的URI(路径)

getRequestURI():获取URI:统一资源标识符
getRequestURL():获取URL:统一资源定位符
URL:http://localhost:8080/day08/index.jsp
URI:/day08/index.jsp

getQueryString():获取get请求的请求参数
getRemoteAddr():获取客户端的IP地址


消息头:
getHeader(String name):根据名称获取值
Enumeration getHeaderNames() :获取所有请求头的名称

消息体:封装了post请求的参数
* getReader():获取字符数据
* getInputStream():获取字节数据


* 统一的方式获取请求参数:
* String getParameter(String name): 根据请求参数的名称 获取值
* String[] getParameterValues(String name):根据请求参数名称 获取值 (数组),用于checkbox
* Map<String,String[]>   getParameterMap():获取请求参数的键值对集合
* getParameterNames():获取所有参数的名称


* 她是一个域对象
* 代表请求域
setAttribute():
getAttribute():
removeAttribute():

* 请求转发:
request.getRequestDispatcher("/req6").forward(request, response);

* 特点:
* 一次请求,一次响应,只有一个request对象,可以在request域中共享数据
* 地址栏不发生变化
* 只能转发到当前项目中

* 结论:如果在访问多个资源中,如果要共享数据,就使用请求转发,反之,使用重定向
















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值