HTTP
* 概念:Hyper Text Transfer Protocol 超文本传输协议
* 传输协议:定义了,客户端和服务器端通信时,发送数据的格式
* 特点:
1.基于TCP/IP的高级协议
2.默认端口号:80
3.基于请求响应模型的,一次请求对应一次响应
4.无状态的:每次请求之间相互独立,不能交互数据
* 请求消息数据格式
* 请求行
* 请求方式 请求url 请求协议/版本
* GET / login.html HTTP/1.1
* 请求头
* 请求头名称:请求头值
* 常见的请求头:
1. User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息(可以在服务器端获取该头的信息,解决浏览器的兼容性问题
2. Referer:http://localhost/login.html(告诉服务器我从哪里来;作用:防盗链、统计工作
* 请求空行
* 请求体(正文)
* username:zhangsan
* 响应消息数据格式
request
* request对象和response对象的原理
1.request和response对象是由服务器创建的
2.request对象是来获取请求消息,response对象来设置响应消息
* request功能:
1.获取请求消息数据
获取请求方式:String getMethod()
获取虚拟目录:String getContextPath()
获取Servlet路径:String getServletPath()
获取get方式请求参数:String getQueryString()
获取请求URI:String getRequestURI() / StringBuffer getRequestRUL()
获取协议及版本:String getProtocol()
获取客户机ip地址:String getRemoteAddr()
2. 获取亲求头的数据
通过请求头的名称获取请求头的值:String getHeader(String name)
获取所有的请求头名称:Enumeration<String> getHeaderNames()
3. 获取请求体数据
获取字符输入流,只能操作字符数据:BufferedReader getReader()
获取字节输入流,可以操作所有类型数据:ServletInputStream getInputStream()
2.其他功能
1.获取请求参数通用方式
* Strng getParameter(String name) 根据参数名称获取参数值
* Strng[] getparametervalues(String name) 根据参数名称获取参数数组
* Enumeration<String> getParameterNames():获取所有请求的参数名称
* Map<String,String[]>getParameterMap:获取所有参数的map集合
2.请求转发
* 一种在服务器内部的资源跳转方式
* 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
* 使用RequestDispatcher对象来进行转发:forward(servlerRequest request,ServletResponse response)
2.共享数据
* 域对象:一个有作用范围的对象,可以在范围内共享数据
* request域:代表一次请求的范围,一般用于请求转发的多个资源种共享数据
* 方法
* 存储数据:setAttribute(String name,Object obj)
* 通过键获取值:Object geAttitude(String name)
* 通过键移除键值对:removeAttribute(String name)
4.获取ServletContext
* ServletContext getServletContext()
5.中文乱码问题
* request.setCharacterEncoding("utf-8")
* request对象继承体系结构
ServletRequest -- 接口 继承
HttpServletRequest -- 接口 实现
org.apache.catalina.connector.RequestFacade 类(tomcat)