HTTPServletRequest介绍
----Request对象:
服务器在接收到请求后,会给此次请求创建一个request对象,此对象中封存了此次请求相关的数据
服务器在调用 Servlet 时会将创建的 Request 对象作为实参传递给 Servlet 的方法,比如:service 方法
特点:
request对此昂you服务器创建
一次请求值创建一个request对象
生命周期为一次请求内,请求结束销毁此次请求的request对象
注意:Request对象的作用是存储请求数据,并且每次请求都会向黄建新的request对此昂进行存储请求数据
--request获取请求数据
请求行:请求方式 请求URL 协议
getMethod(); 返回请求方式
getRequestUrl(); 返回请求url
getRequestUri(); 返回请求uri
getQueryString(); 返回get请求中的URL中的用户数据 注意:post请求没有此方法。
getSchema(); 返回协议
请求头
getHeader(String name) 根据键名获取请求头信息
注意:如果获取的请求头信息不存在返回null。
getHeaderNames() 返回存储了请求头键名的枚举集合。
请求实体
getParameter(String name) 根据键名获取数据
注意:键名其实就是前端页面中的表单标签的name属性的值或者前端页面其他方式提交数据的键的名字
如果请求中没有对应的请求数据,则返回null.
getParameterValues(String name) 根据键名获取同名不同的值,返回数组
注意:如果没有对应的键名,则返回null
getParameterNames() 返回实体数据中键名的枚举
请求网络相关数据
getRemoteAddr() 获取客户端的IP地址
getRemotePort() 获取客户端端口号
getLocalAddr() 获取服务器端的ip
getLocalPort() 获取服务器端的端口号
----------------------------------------------------------------------------------------------
doGet()、doPost()、service方法的特性与区别:
doGet(HttpServletRequest req, HttpServletResponse resp)
特点:
处理get方式的请求。
doPost(HttpServletRequest req, HttpServletResponse resp)
特点:
处理post方式的请求
service(HttpServletRequest req, HttpServletResponse resp)
特点:
无论是什么类型的请求方式,服务器都会优先执行service方法。
注意:
servlet中没有声明service方法,会根据请求方式调用对应的方法进行请求处理, 如果在servlet中没有声明对应的请求处理方法,则会报405错误。
* 注意(非常重要)
tomcat服务器其实只认识service方法,如果我们自己声明的servlet中没有覆写service方法,则会执行HttpServlet中的
service方法,而HttpServlet中的service方法会根据请求方法调用对应的doXX()方法执行请求处理。
----------------------------------------------------------------------------------------------
Servlet的生命周期
结论:
从第一次被调用到服务器关闭
验证:
init方法 :servlet被初始化创建的时候调用
service方法:处理请求的时候
destory方法 :servlet被销毁的时候。
当服务器关闭的时候销毁servlet,触发destroy方法的执行
注意:
我们可以在web.xml中配置load-on-startup来设置Servlet的加载时机为服务器启动。
生命周期就变为从服务器开启到服务器关闭
----------------------------------------------------------------------------------------------
HTTPServletResponse介绍
----Response 对象
服务器在调用指定的 Servlet 进行请求处理的时候,会给 Servlet 的方法 传递两个实参 request 和 response。其中 request 中封存了请求相关的请求 数据,而 response 则是用来进行响应的一个对象
*response对象设置信息:
设置响应行: 协议 状态码 状态消息:
resp.sendError(int status)
作用:可以自主的响应状态给浏览器
设置响应头:
addHeader(String name,String value) 添加响应头信息,同名数据不会覆盖
setHeader(String nanme,String value) 设置响应头信息,会覆盖原有信息。如果没有此响应头则添加该信息。
设置响应实体(处理结果):
resp.getWriter().write("实体内容");
注意:实体内容可以分开进行响应(多条并列)。
注意:一旦使用resp对象作出了请求响应,则意味着此次请求处理完毕。服务器在响应后会将此次请求相关的req对象和resp对象销毁。
乱码问题解决方式
- 使用 String 进行重新编码:
uname
2. Get 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);
在 tomcat 服务器目录下的 conf 文件下找到 server.xml 文件,打开进行如下配置:
3. Post 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);
Servlet的使用流程
1.设置请求编码格式
2.设置响应编码格式
3.获取请求信息
4.处理请求信息
5.响应处理结果