java——Servlet的request和response
request
当tomcat解析用户的请求时会封装成ServletRequest对象;request包含了用户(浏览器)的信息和用户传过来的数据。
servlet用request来获取请求数据
继承体系:(一般使用HttpServletRequest)
Controller层处理用户请求时步骤一般为
- 乱码处理
- 获取数据
- 封装对象
- 逻辑处理
- 得到处理结果
- 返回结果给前端
请求数据分为3部分:
请求行:(GET /request-demo/req1?username=zhangsan HTTP/1.1 )
String getMethod():获取请求方式: GET
String getContextPath():获取虚拟目录(项目访问路径): /request-demo
StringBuffer getRequestURL(): 获取URL(统一资源定位符):http://localhost:8080/request-demo/req1
String getRequestURI():获取URI(统一资源标识符): /request-demo/req1
String getQueryString():获取请求参数(GET方式): username=zhangsan&password=123
请求头:(User-Agent: Mozilla/5.0 Chrome/91.0.4472.106)
String getHeader(String name):根据请求头名称,获取值
请求体:(username=superbaby&password=123)
ServletInputStream getInputStream():获取字节输入流
BufferedReader getReader():获取字符输入流
request获取参数
Map<String, String[ ]> getParameterMap():获取所有参数Map集合
String[ ] getParameterValues(String name) :根据名称获取参数值(数组)
String getParameter(String name):根据名称获取参数值(单个值)
request处理参数乱码
req.setCharacterEncoding(“UTF-8");
request转发
客户端发起一个请求然后服务器接收后把请求继续向后传递给目标页面
一种在服务器内部的资源跳转方式
req.getRequestDispatcher(“资源B路径”).forward(req,resp);
request转发时共享数据
void setAttribute(String name, Object o):存储数据到 request域中
Object getAttribute(String name):根据 key,获取值
void removeAttribute(String name):根据 key,删除该键值对
response
servlet使用 response对象来设置响应数据
继承体系:(一般使用httpservletresponse)
响应数据分为3部分:
响应行:(HTTP/1.1 200 OK )
void setStatus(int sc) :设置响应状态码
响应头:(content-type: text / html;)
void setHeader(String name, String value) :设置响应头键值对
响应体:(head> )
PrintWriter getWriter():获取字符输出流
ServletOutputStream getOutputStream():获取字节输出流
response重定向
客户端发送一个请求然后服务器接收后回送给客户端一个目标地址然后客户端接收后继续发送下一个请求前往目标页面
一种资源跳转方式
resp.setStatus(302);
resp.setHeader(“location”,“资源B的路径");
resp.sendRedirect(“资源B的路径”);
servlet三大作用域
因为会影响服务器的内存,所以能用小的不用大的:Request < Session < ServletContext
常见的使用场景:
Request:一次查询的结果。例如,Servlet 转发 JSP。
Session:存放当前会话的私有数据。例如,用户登录状态,验证码,购物车。
application(ServletContext):(tomcat启动时创建,tomcat关闭时销毁,整个web的生命周期只有一个)若需要所有的 Servlet 都能访问到,才使用这个域对象。