1.HttpServletRequest
HttpServletRequest是Java Servlet API中的一个接口,用于表示HTTP请求的对象。
它提供了访问HTTP请求的各种信息和功能,包括请求方法、请求URL、请求头、请求参数、请求体等。
HttpServletRequest是由Servlet容器(如Tomcat)在每次接收到HTTP请求时创建和传递给Servlet的,开发者可以在Servlet中通过`doGet()`、`doPost()`等方法来处理HttpServletRequest对象,并生成HTTP响应返回给客户端。
2.HttpServletRequest接口
HttpServletRequest接口提供了一系列方法来获取和操作HTTP请求的各个部分和属性,例如:
获取请求方法:
- `getMethod()`:获取请求的HTTP方法,如GET、POST等。
获取请求URL和URI:
- `getRequestURL()`:获取完整的请求URL,包括协议、主机、端口和路径。
- `getRequestURI()`:获取请求的URI(相对路径)。
获取请求头信息:
- `getHeader(String name)`:根据名称获取指定的请求头的值。
- `getHeaderNames()`:获取所有请求头的名称。
获取请求参数:
- `getParameter(String name)`:根据名称获取指定的请求参数的值。
- `getParameterNames()`:获取所有请求参数的名称。
- `getParameterMap()`:获取所有请求参数的键值对映射。
获取请求体信息:
- `getInputStream()`:获取请求的输入流,用于读取请求体内容。
其他常用方法:
- `getSession()`:获取与请求关联的会话对象。
- `getCookies()`:获取请求中的所有Cookie。
- `getLocale()`:获取请求的语言环境。
HttpServletRequest接口还提供了一些其他方法来处理请求,如重定向、转发、设置响应头等。
3.请求转发和重定向
请求转发(Request Forwarding)和重定向(Redirect)是两种不同的方式来处理HTTP请求的转发或跳转。
请求转发:
- 请求转发是在服务器内部进行的,客户端浏览器不知道请求被转发了。
- 请求转发是通过调用`forward()`方法来实现的,该方法是HttpServletRequest对象的一个方法。
- 请求转发可以将请求转发给同一个Web应用程序内的其他Servlet、JSP或静态资源。
- 请求转发可以携带请求参数和属性,并且共享同一个HttpServletRequest对象和HttpServletResponse对象。
- 请求转发是直接将请求转发给目标资源处理,目标资源将直接返回响应给客户端。客户端浏览器只知道自己发送了一个请求,而不知道请求被转发给了其他资源。
RequestDispatcher dispatcher = request.getRequestDispatcher("/targetServlet");
dispatcher.forward(request, response);
重定向:
- 重定向是通过发送一个特殊的HTTP响应给客户端浏览器,让浏览器重新发送一个新的请求到指定的URL。
- 重定向是通过调用`sendRedirect()`方法来实现的,该方法是HttpServletResponse对象的一个方法。
- 重定向可以将请求转发给同一个Web应用程序内或其他Web应用程序的URL。
- 重定向会创建一个新的HttpServletRequest对象和HttpServletResponse对象,因此请求参数和属性不会被共享。
- 重定向是间接地将请求转发给目标资源处理,目标资源将返回新的响应给客户端浏览器。
response.sendRedirect("/targetServlet");
总结:
- 请求转发是在服务器内部进行的,客户端浏览器不知道请求被转发了,而重定向是通过发送特殊的HTTP响应给客户端浏览器来实现的。
- 请求转发是直接将请求转发给目标资源处理,而重定向是通过浏览器发送新的请求到指定URL来间接地将请求转发给目标资源处理。
- 请求转发可以携带请求参数和属性,并且共享同一个HttpServletRequest对象和HttpServletResponse对象,而重定向会创建新的HttpServletRequest对象和HttpServletResponse对象,请求参数和属性不会被共享。