HTTP请求提交的方法主要有GET和POST
Get请求方式
浏览器向Web服务器发送HTTP请求
用户在网页上点击一个超连接
用户提交在网页上填写好的表单
用户在浏览器地址栏中输入URL地址并回车
默认情况下都是使用HTTP协议的GET方法提交请求
POST请求方式
<FORM name='loginForm' method='POST' action='/loginServlet'>
GET方式和POST方式区别:
流的格式:
GET方式请求参数放在URL后面,没有消息体。
POST方式请求参数放在消息体中。
用途:
GET方式主要用于资源查找,表示客户端需要查找服务器上的某个资源
POST方式主要用做数据传输,主要用于服务器接收客户端传递过来的信息。
传输性能:
特征 | GET方法 | POST方法 |
提交数据类型 | 文本 | 文本、二进制文本 |
提交数据长度 | 不超过255个字符 | 没有限制 |
提交数据可见性 | 作为URL地址的一部分显示在浏览器地址栏 | 作为请求的消息体,不可见, |
提交数据缓存 | 缓存在浏览器URL历史状态中 | 不会被浏览器缓存 |
u 获取HTTP请求行
getMethod():获取HTTP的请求方法,例如GET、POST等
getQueryString():获取请求URL后面的查询字符串。只对GET有效
getServletPath():获取Servlet的映射路径
u 获取请求头(只对HTTP协议有效)
getHeader(name) :返回指定的请求头的值
getHeaders(name):返回一个Enumeration(枚举)包含请求头中的所有值
u 获得表单数据
getParameter()方法:获取指定名称的参数值,返回字符串类型。如果有多个同名的键,则返回第一个键对应的值。
getParameterValues()方法:获取指定名称的参数的多个值,以字符串数组的方式返回结果。
u 获得消息体
POST请求不但可以通过getParameter()方法获得表单数据,而且可以通过getInputStream()以字节方式获得表单数据,所以可以获得上传文件的二进制流
u 上传文件
表单必须以POST提交,在form标签中,加入enctype=”multipart/form-data”
如果使用servlet3上传文件,在servlet中加入@MultipartConfig,提供上传文件支持
u 请求派发
RequestDispatcher dis = request.getRequestDispatcher(path)
dis.forward(request,response);
客户端的请求可以发送给多个Servlet以及Web应用程序中的其它资源。整个过程只在服务器端完成,不需要客户端的参与,即客户端的只用发送一次原始的请求就可以实现转发的功能。所以通过请求转发,目标资源可以获得在request中封装的属性信息
不能在请求转发和重定向之后,再进行请求转发和重定向
u 请求范围
变量可以保存在请求范围中
在请求范围之外就不能进行访问了
内部转发和重定向的区别:
1、内部转发由requestDispatcher发出,重定向由response发出。
2、内部转发一次请求,重定向二次请求。
3、内部转发可以取出request中封装的数据,重定向不能。
4、内部转发只能在服务器内部进行,重定向可以请求别的服务器。