request对象和response对象是由服务器创建的,我们只是使用并不创建
request对象是来 获取请求消息,response对象是来 设置响应消息
一、request对象
request继承结构
ServletRequest(接口)-->HttpServletRequest(接口)-->RequestFacade 类(tomcat实现)request功能
获取请求消息数据
- 获取请求行数据:
这是一个GET请求方式的请求行:GET /day14/demo1?name=zhangsan HTTP/1.1- 获取请求方式 :String getMethod() -->上例得到结果:GET
- 获取虚拟目录(常用):String getContextPath() -->上例得到结果:/day14
- 获取Servlet路径: String getServletPath()-->上例得到结果:/demo1
- 获取get方式请求参数:String getQueryString()-->上例得到结果:name=zhangsan
- 获取请求URI(常用)(有两个方法)
- String getRequestURI()-->上例得到结果:/day14/demo1
- StringBuffer getRequestURL() -->上例得到结果 :http://localhost/day14/demo1
- 获取协议及版本:String getProtocol()-->上例得到结果:HTTP/1.1
- 获取客户机的IP地址:String getRemoteAddr()
- 获取请求头数据:
- 通过请求头的名称获取请求头的值(常用):String getHeader(String name)
- 获取所有的请求头名称:Enumeration getHeaderNames()
- 获取请求体数据:
只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数- 获取流对象
- 获取字符输入流,只能操作字符数据:BufferedReader getReader()
- 获取字节输入流,可以操作所有类型数据:ServletInputStream getInputStream()
- 获取流对象
- 获取请求行数据:
-
因为对于不同的请求方式,它们的请求参数所在位置不同,GET方式请求参数在请求行中,POST方式请求参数封装在请求体中,所以服务器在获取请求参数的时候,需要分别在doGet和doPost方法中写不同的逻辑代码来获取请求参数,比较麻烦,因此就有一种通用的获取请求参数的方法
- 获取请求参数通用方式
- 根据参数名称获取参数值:String getParameter(String name)
- 根据参数名称获取参数值的数组(多选框):String[] getParameterValues(String name)
- 获取所有请求的参数名称:Enumeration getParameterNames()
- 获取所有参数的map集合:Map'<'String,String[]> getParameterMap()
- 请求转发:一种在服务器内部的资源跳转方式
- 通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String path)
- 使用RequestDispatcher对象来进行转发:forward(ServletRequest re, ServletResponse res) 注意:path是要跳转的资源的路径,
- 获取ServletContext(后面博客会详细讲到): ServletContext getServletContext()
request的请求转发和资源共享以及response的重定向,它们各自的特点和区别会新开一篇博客
二、response对象
response功能:设置响应消息
- 设置响应行(设置状态码):setStatus(int sc)
- 设置响应头:setHeader(String name, String value)
- 设置响应体:
-
使用步骤
- 获取输出流
- 字符输出流:PrintWriter getWriter()
- 字节输出流:ServletOutputStream getOutputStream()
- 使用输出流,将数据输出到客户端浏览器
- 获取输出流