JavaWeb HttpServletRequest

HttpServletRequest是JavaServletAPI中处理HTTP请求的接口,提供方法获取请求方法、URL、头信息、参数和体内容。请求转发和重定向是两种处理请求的方式,前者在服务器内部进行且共享请求上下文,后者通过浏览器发起新请求。文章通过代码示例展示了如何使用这些概念。
摘要由CSDN通过智能技术生成

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对象,请求参数和属性不会被共享。

4.代码实例

jsp页面中指定了action,也就是指定哪个Servlet来处理该页面

<html>
<body>
<h2>Hello World!</h2>


<form action="${pageContext.request.contextPath}/print" method = "get">
username <input type="text", name="username"> <br>
password <input type="password", name="password"> <br>
<input type="submit">

</form>

</body>
</html>

Servlet:执行了重定向的操作,跳转到了登录成功页面。

package com.study.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class PrintServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //resp.getWriter().print("This is print page!");
        resp.sendRedirect("/s2/success.jsp");
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

所以整体的逻辑就是,用户在首页输入了用户名和密码,点击登录,然后被重定向到了登录成功页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值