请求消息数据格式
1.请求行
格式:请求方式 请求URL 请求协议/版本 如:GET /login.html HTTP/1.1
请求方式(Http协议有7种请求方式,常用的有2种GET和POST):
- GET:
1.请求参数在请求行中,在URL后
2.请求的URL长度有限制
3.不太安全 - POST:
1.请求参数在请求体中
2.请求的URL长度没有限制的
3.相对安全
2.请求头:客户端浏览器告诉服务器一些信息
格式: 请求头名称:请求头值(中间以冒号隔开,若有多个值用逗号隔开)
常见请求头:
1.User-Agent:浏览器告诉服务器当前浏览器的版本信息
2.Referer:告诉服务器当前请求从哪里来;作用:1.防盗链,2.统计工作
3.请求空行:用于分隔请求头和请求体
4.请求体(请求正文):封装Post请求消息的请求参数的,Get请求消息没有请求体和请求空行
Request
request和response对象的原理:
1.request和response对象由tomcat创建,传递给service方法并调用service方法
2.request对象封装了请求消息数据,可用来获取请求消息;response对象用于设置响应消息
request对象的继承体系结构:
ServletRequset --接口
| 继承
HttpServletRequest --接口
| 实现
org.apache.catalina.connector.RequestFacad --实现类,由tomcat编写
request对象的功能:
一、获取请求消息数据:
1.获取请求行数据
方法:
①getMethod():获取请求方式
②getContextPath():获取虚拟目录
③getServletPath():获取Servlet路径
④getQueryString():获取Get方式的请求参数
⑤getRequestURI():获取请求URI
⑥getRequestURL():获取请求URL
URI(统一资源标识符),范围相对URL来说更大
URL(统一资源定位符),范围相对URI来说更小
⑦getProtocol():获取协议及版本信息
⑧getRemoteAttr():获取客户机的IP地址
2.获取请求头数据
方法:
①getHeader(Srting name):通过请求头的名称获取请求头的值
②Enumeration<String> getHeaderNames():获取所有请求头的名称
3.获取请求体数据
注意:只有请求方式为Post才有请求体,在请求体中封装了Post请求的请求参数
步骤:
①获取流对象
BufferedReader getReader():获取字符输入流
ServletInputStream getInputSteram():获取字节输入流
②从流对象中获取数据
二、其他功能:
1.获取请求参数(通用方式,无论是get请求还是post请求都能使用)
①String getParameter(String name) :根据参数名称获取参数值
②String[] getParameterValues(String name):根据参数名称获取参数值的数组
③Enumeration<String> getParameterNames():获取所有请求参数名称
④Map<String,String[]> getParameterMap():获取所有参数的Map集合
注意:获取中文参数乱码问题
1.在tomcat 8 以上版本已经解决了get方式的乱码问题
2.在获取参数之前设置request编码request.setCharacterEncoding(“utf-8”),就可以解决post方式乱码问题。
2.请求转发:一种在服务器内部的资源跳转方式
步骤:
1.通过request对象获取请求转发器对象:
RequestDispatcher getRequestDispatcher(String path)
2.使用RequestDispatcher对象进行转发:
forward(SrevletRequest request,ServletResponse response)
- 特点:
1.浏览器地址不发生变化
2.只能转发到当前服务器内部资源
3.转发是一次请求
3.共享数据
域对象:一个有作用的范围的对象,在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
void setAttribute(String name,Object obj):存储数据
Object getAttribute(String name):通过键获取数据
void removeAttribute(String name):通过键移除键值对
4.获取ServletContext
ServletContext getServletContext()