HttpServletRequest请求对象、HttpServletResponse响应对象、响应内容类型Content-Type、请求转发、重定向、ServletContext对象
01 HttpServletRequest
-
概念:HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息
-
特点:客户端(前端)发来的全部信息都可以从HttpServletRequest中得到
-
优点:可以利用各种封装好的方法处理并得到数据
-
一个完整的HTTP请求包括三个部分:请求行、请求头、请求体
-
【开发者工具】-【Network】-【Name】-【Headers】中看到请求信息。
获取请求行信息:
(获取文件的路径和请求方式的方法)
-
方法名 说明 示例结果
getMethod()
获取请求方式。 GET getRequestURL()
获取完整路径。 http://localhost:8080/web/test getRequestURI()
获取除了域名或者IP部分的路径。/web/test getServletPath()
获取Servlet路径。 /test getContextPath()
获取虚拟目录。 /web getQueryString() 获取参数,键=值,即?号 后面的部分。 name=%E5%BC%A0%E4%B8%89&age=18 getProtocol()
获取协议及版本。 HTTP/1.1 getRemoteAddr()
返回IP地址。 0:0:0:0:0:0:0:1(属于ipv6,服务器和客户端都 在同一台电脑上会出现)
-
其中getServletPath()和getContextPath()最为常用
//判断req的路径,当为/login.html和/login时放行 if (req.getServletPath().equals("/login.html")||req.getServletPath().equals("/login")){ filterChain.doFilter(servletRequest,servletResponse); return; }
获取请求头信息:
(一般用于通过服务器的限制)
-
方法名 说明 String getHeader(String name)
-
根据请求头名字获取对应的请求头值。
-
-
Enumeration getHeaderNames()
-
获取所有的请求头名字。
-
String accept = req.getHeader("Accept"); Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String name = headerNames.nextElement(); String value = request.getHeader(name); System.out.println(value); }
获取请求体信息:
-
概念:请求体主要包含前端发送给后端的数据(参数)
-
特点:
-
1.对于GET请求, 一般不需要请求体, 因为GET参数直接体现在URI上。 2.对于POST请求, 需要请求体, 请求体里保存POST参数
-
-
优点:可以存放更多数据且不会让URL过长
-
方法名 说明
-
1.BufferedReader getReader()
获取字符输入流,只能操作字符数据。
-
2.ServletInputStream getInputStream() 获取字节输入流,可以操作所有类型的数据(文件上传)。
-
3.String getParameter(String name)
根据参数名获取参数值,get、post通用。
-
请求转发:(服务器内部资源跳转,servlet之间)
/* 1.通过request请求对象获取请求转发器对象。 2.通过RequestDispatcher对象进行转发 */ request.getRequestDispatcher("转发路径").forward(request, response); /* 1.浏览器地址路径不发生变化。 2.转发是一次请求。 3.只能转发到服务器内部资源 /*不常用 //基于转发的共享数据 /* 1.setAttribute(String name, Object object) // 存储数据 2.getAttribute(String name) // 通过键获取数据 3.removeAttribute(String name) // 通过键移除数据 */
02 HttpServletResponse
-
概念:服务器(后端)要给客户端(前端)的响应信息
-
特点:需要设置文件类型和编码格式
-
优点:前端只需要按照规范就能取出数据
/*核心方法: 1.void setStatus(int sc) 设置响应状态码 2.void setHeader(String name,String value) 设置一个带有给定的名称和值的 Header ,如果 name 已经存在,则覆盖旧的值 3.void setContentType(Stringtype) 设置被发送到客户端的响应的内容类型 4.PrintWriter getWriter() 用于往 body 中写入文本格式数据 */ /*响应状态码:服务器告诉客户端浏览器本次请求响应的一个状态,都是三位数。 1. 1xx:服务器接收客户端消息,但是没有接收完成,等待一段时间后,发送1xx状态码 2. 2xx:成功,200 3. 3xx:重定向。302重定向,304访问缓存 4. 4xx:客户端错误。404找不到后台地址 5. 5xx:服务器端错误。500服务器内部错误 */ /*重定向 特点: 1. 地址栏发生变化。 2. 重定向是两次请求,不能使用request对象来共享数据。 3. 重定向可以访问其他站点的资源 */
03 ServletContext
/* 概念:全局应用程序共享对象 特点:所有同项目的servlet都可以使用ServletContext的数据 优点:不会有request的限制,实现全局共享 获取方式 1. request.getServletContext() 虽然从request中引出,但不依赖request 2. this.getServletContext() 核心方法 1.setAttribute(name, value) 添加数据 2.getArrtibute(name) 获取数据 3.removeAttribute(name) 删除数据 */ /* 获取MIME类型 1.概念:在互联网通信过程中定义的一种文件数据类型 */ String filename = "a.jpg"; String mimeType = context.getMimeType(filename); System.out.println(mimeType);