请求和常用对象
get和post请求的区别
参数提交的方式:
get把请求数据放在url上,即http协议头上以?参数1(k=v)&参数2的形式拼接
post将数据放在http的请求体中。
get参数在url中可见,post在url中不可见
安全性:
get很不安全。
post比get稍微安全,但是也不安全,可以通过报文获取。
数据传输:
get只能传输ascll字符的参数的数据类型,post没有限制
传输数据的大小:
get一般数据大小不超过2k-4k,
post理论上不限制大小。实际跟服务器有关。
后退页面:
get请求页面后退时,不会产生影响
post请求页面后退时,会重新提交请求。
HttpServletRequest对象
HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息。
常用的方法
常用方法 | 描述 |
---|---|
getRequestURL() | 获取客户端发出的请求时的完整的URL |
getRequestURI() | 获取请求行中的资源名称部分(项目名称开始) |
getQueryString() | 获取请求行中的参数部分 |
getMethod() | 获取客户端请求方式 |
getProtocol() | 获取 HTTP 版本号 |
getContextPath() | 获取 webapp 名字 |
获取请求头
方法 | 描述 |
---|---|
getHeader(String) | 获取单个请求头内容 |
Enumeration getHeaderNames() | 获取所有的请求头名称集合 |
获取客户端请求参数(客户端提交的数据)
方法 | 描述 |
---|---|
getParameter(name) | 获取指定名称的参数 |
getParameterValues(Stringname) | 获取指定名称参数的所有值 |
getParameterNames() | 获取一个包含请求消息中的所有参数名的 Enumeration 对象 |
getParameterMap() | 返回一个保存了请求消息中的所有参数名称和值的 Map 对象 |
乱码问题
Get:参数在请求行里 默认使用ISO-8859-1
Tomcat8及以上版本 中文可能不会乱码
Tomcat7及以下版本 中文可能乱码 XXX → GBK进行编码 → YYY → 服务器默认通过ISO-8859-1进行解码 → ZZZ
解决方法:new String(uname.getBytes(“ISO-8859-1”),“UTF-8”);
Post:参数在请求体里,使用页面编码
Tomcat8及以上版本 中文乱码 ZZZ 前台 使用页面编码UTF-8 后台 ISO-8859-1
Tomcat7及以下版本 中文乱码 ZZZ 前台 使用页面编码UTF-8 后台 ISO-8859-1
解决方法 设置服务器默认解码字符集 针对请求体 放在使用request对象之前 req.setCharacterEncoding(“UTF-8”); 或者
new String(uname.getBytes(“ISO-8859-1”),“UTF-8”);—这种方法不论是get还是post都可以使用
请求转发
请求转发,是一种服务器的行为,当客户端请求到达后,服务器进行转发,此时会将请求对象进行
保存,地址栏中的 URL 地址不会改变,得到响应后,服务器端再将响应发送给客户端,从始至终只有
一个请求发出。实现方式如下,达到多个资源协同响应的效果
req.getRequestDispatcher("转发的路径").forward(req,resp);
域对象(request)
通过该对象可以在一个请求中传递数据,作用范围:在一次请求中有效,即服务器跳转有效。
request 域对象中的数据在一次请求中有效,经过请求转发,request 域中的数据依然存在,则在
请求转发的过程中可以通过 request 来传输/共享数据。
request.setAttribute(String name, Object o); // 设置域对象内容
request.getAttribute(String name); // 获取域对象内容
request.removeAttribute(String name); //删除域对象内容