目录
一、HttpServletRequest定义:
- HttpServletRequest 是一个接口,全限定名称:jakarta.servlet.http.HttpServletRequest;
- HttpServletRequest 接口是Servlet规范中的一员。
- HttpServeltRequest 接口的父类接口是 ServeltRequest
- Tomcat服务器实现了HttpServletRequest接口。
二、HttpServletRequest对象作用:
- 封装了Http协议的请求协议,HTTP请求协议中的包括请求行、请求头、请求体。
- 实际上是用户发送请求的时候,遵循了HTTP协议,发送的HTTP的请求协议,Tomcat服务器将HTTP协议中的信息以及数据全部解析出来,然后Tomcat服务器把这些信息封装到HttpServletRequest对象中,传给了我们javaweb程序员。
- 所以说如果我们想获取HTTP请求报文中的信息,我们只需要面向HttpServletRequest接口编程,调用他的方法。
三、HttpServletRequest和HttpServletResponse生命周期:
- 每个对象的生命周期都很短,仅在HTTP请求报文或HTTP响应报文传输的时候存在。
- 一个HTTP请求报文对应一个HttpServletRequest对象,一个HTTP响应报文对应一个HttpServletResponse对象。
四、HttpServletRequest中常用方法:
Parameter:参数,是前端传过来的数据
initParameter:初始化参数,是存在四大域中的数据
1. 获取前端浏览器用户提交的数据:
String getParameter(String)//key对应的value数组中的第一个元素
Map<String,String[ ]> getParameterMap()//获取整个map集合
Enumeration<String.>getgetParameterNames()//获取map集合中所有key
String[ ] getParameterValues(String)//根据key获取value
因为前端提交的数据格式:
<!--前端定义该表单发送报文格式为post,发送时执行/xmm/servlet06/MyFirstServlet该java程序-->
<form action="/xmm/servlet06/MyFirstServlet" method="post">
用户名<input type="text" name="username"><br>
密码 <input type="text" name="userpwd"><br>
兴趣<br>
抽烟<input type="checkbox" name="aihao" value="123">
喝酒<input type="checkbox" name="aihao" value="312">
烫头<input type="checkbox" name="aihao" value="153">
<input type="submit" value="注册">
</form>
username=132&userpwed=111&aihao=123&aihao=312&aihao=153
所以后端存储存储前端的数据采用Map集合来存储,而且为了防止key=aihao相同value被覆盖,我们采用Map<String,String[ ]>的方法储存数据。
Map<String,String[ ]> ,key存储String,value存储String[ ]
key value
---------------------
username {"132"}
userpwd {"111"}
aihao {"123","312","153"}
注意:前端永远提交的是字符串,后端永远接收的是字符串。
2. 获取客户端的IP地址
getRemoteAddr()
3. 设置post请求请求体的字符集,可以解决post请求请求体的乱码问题(但不能解决get请求乱码,因为get请求是在请求行发送数据)
setCharacterRncoding(“UTF-8”)
4. 获取应用的根路径
getContextPath()
5. 获取servlet路径(xml文件中配置的路径)
getServletPath()
6. 获取http请求的URI
getRequestURI()
7. 获取前端请求方式是get?post?…
getMethod()
8. 向HttpServletRequest请求域中存数据。
setAttribute(String name,Object value)
9. 从HttpServletRequest请求域中取数据。
getAttribute(String name)
10. 从HttpServletRequest请求域中删除数据。
removeAttribute(String name)
五、关于HttpServletRequest请求域:
- HttpServletRequest"请求域"对象要比ServletContext"应用域"对象范围小很多,生命周期短很多。请求域只在一次请求内有效。
- 一个request请求对象对应一个请求域对象,一次请求结束之后,这个请求域就销毁了。
- 注意:ServletConfig是一个servlet对象对应一个servletconfig对象,而HttpServletRequest请求域是一个request请求对应一个请求域,是前端的一次请求中的信息,这个信息也不是用户输入的信息,而是我们通过setAttribute方法向请求域中存的信息,前端request请求结束后这个请求域就销毁了。简言之:一个是面向单个servlet对象,一个是面向单个http请求。