目录
1. HttpServletRequest:
是客户端发送给服务器端的数据,在创建Servlet时会覆盖 service/doPost/doGet
生命周期:一次请求创建一次,等待GC销毁,只能在一次请求期间使用。
2. 通过request获得请求行:
获得客户端的请求方式:String getMethod()
获得请求的资源:
- String getRequestURI() -- 获取请求URI
- String getContextPath() -- 获取虚拟目录
- String getServletPath() -- 获取Servlet路径
- String getQueryString() -- 获取get方式请求参数
- String getRemoteAddr0 -- 获取客户机的IP地址
3. 通过request获得请求头:
- long getDateHeader(String name)
- String getHeader(String name)
- int getIntHeader(String name)
- Enumeration<String> getHeaderNames()-- 获取所有的请求头名称常见的请求头:
- User-Agent:浏览器告诉服务器,使用的浏览器版本信息。可以在服务器端获取该头的信息,解决浏览器的兼容性问题。
- Referer:告诉服务器,当前请求从哪里来,防止盗链。
4. 通过request获得请求体:
请求体:只有POST请求方式才有请求体,在请求体中封装了POST请求的请求参数。
4.1 步骤
- 1.获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
- 2.从流对象中拿数据 readLine()
4.2 获取请求参数通用方式:
-
String getParameter(String name):根据参数名称获取参数值
-
String[] getParameterValues(String name):根据参数名称获取参数值的数组
-
Enumeration<String> getParameterNames():获取所有请求的参数名称
-
Map<String,String[]> getParameterMap():获取所有参数的map集合
4.3 乱码问题
get请求默认编码:
跟tomcat编码一致 UTF-8,改Tomcat编码, 配置文件 server.xml:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000" URIEncoding="ISO8859-1"
redirectPort="8443"/>
post请求编码: ISO8859-1:
request.setCharacterEncoding();
4.4 get和post的区别:
- get参数在请求行, post参数在请求体(流)
- get参数有大小限制, post参数没有大小限制
5. 共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据,通常配合请求转发。
5.1 request域:
代表一次请求的范围,一般用于请求转发的多个资源中共享数据。
创建:访问时创建request; 销毁:响应结束request销毁; 域的作用范围:一次请求中
方法有:
- void setAttribute(String name,Object obj):存储数据
- Object getAttitude(String name):通过键获取值
- void removeAttribute(String name):通过键移除键值对
5.2 ServletContext:
创建:服务器启动; 销毁:服务器关闭; 域的作用范围:整个web应用