http&requst
HTTP: Hyper Text Transfer Protocol (超文本传输协议)
*传输协议: 定义客户端和服务器端通信时发送数据的格式.
*特点:
1.基于TCP/IP的高级协议
2.默认端口:80
3.基于请求/响应模型 请求响应一一对应.
4.无状态:每次请求之间相互独立,无法交互数据.
----------------------------
*请求消息数据格式:
1.请求行
**请求方式 请求url 请求协议/版本
get/x.html/1.1
*http有7种请求方式,常用的GET/POST
GET: 请求参数在请求行中(在url后),请求的url长度有限制,安全性较低
POST:请求参数在请求体中,请求的url长度没有限制的,安全性相对较高
2.请求头 //User-Agent:浏览器告诉服务器自身的版本信息,可以在服务器端获取该头信息,解决浏览器兼容性问题.
//Referer: 告诉服务器当前请求从哪里来,作用:防盗链,统计.
**请求头名称:请求头值
3.请求空行
空行 //分隔请求头与请求体
4.请求体(正文) // 封装post请求消息的请求参数.
*响应消息数据格式:
----------------------------
Request:
1.request对象和response对象的原理:
1.request和response对象由服务器创建,由开发人员使用.
2.request对象是来获取请求消息,response对象是来设置响应消息.
2.request对象的继承体系结构:
servletRequest --接口
|继承
HttpServletRequest --接口
|实现
org.apache.catalina.connector.RequestFacade 类(tomcat)
3.request功能
1.获取请求消息数据
1.获取请求行数据
*获取请求方式:GET //getMethod();
√ *获取虚拟目录:/path //getContextPath();
*获取servlet路径: //getServletPath();
*获取get方式请求的参数: name=xx; //getQueryString();/
√ *获取请求URI:/path/demo ; //getRequestURI();
getRequestURL();/http://localhost/path/demo
*url:统一资源定位符
*uri:统一资源标识符
*获取协议及版本:HTTP/version //getProtocol();
*获取客户机ip地址: getRemoteAddr();
2.获取请求头数据
√ * String getHeader("name"); // 通过请求头的名称获取请求头的值
* Enumeration<String> getHeaderNames();//获取请求头的所有名称
/*
1.获取请求头所有名称
Enumeration<String> names =request.getHeaderNames();
2.遍历
while(names.hasMoreElements()){
String name=namse.nextElement();
String value=request.getHeader(name);
sout(name+"----"+value);
}
*/
3.获取请求体数据
*请求体:只有post请求方式才有请求体,请求体中风装了post请求的请求参数.
*步骤:
1.获取流对象
*BufferedReader getReader() //获取字符输入流,只能操作字符数据.
*ServletInputStream getInputStream()//获取字节输入流,可以才做所有类型数据.
2.从流对象拿数据
2.其他功能:
1.获取请求参数的通用方式 //无论get/post都可以使用
√ *String getParameter(String name) //根据参数名称获取参数值
*String[] getParameterValues(String name)//根据参数名称获取参数值的数组
*Enumeration<String> getParameterNames()//获取所有请求的参数名称
√ *Map<String,String[]> getParameterMap()//获取所有请求参数的map集合
*// 中文乱码 ; post需设置流的编码 /request.setCharacterEncoding("utf-8");
2.请求转发:服务器内部资源跳转方式 //request.getRequestDispatcher(path).forward(request,response);
1.步骤:
1.通过request对象获取请求转发对象:RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher对象来进行转发:forward(ServletRequest request,ServletResponse response)
2.特点:
1.浏览器地址栏路径没有发生变化
2.只能转发到当前服务器内部资源中
3.转发是一次请求
3.共享数据
*域对象:一个有作用范围的对象,可以在范围内共享数据
*request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
*方法:
1.void setAttribute(String name,Object obj);存储数据
2.object getAttribute(String name);通过键获取值
3.void removeAttribute(String name);通过键移出键值对
4.获取ServletContext
*ServletContext getServletContext();
浙公网安备 33010602011771号