HttpServletRequest

本文介绍了HttpServletRequest对象在处理HTTP请求时的方法,包括获取请求行信息、请求消息头、请求参数的获取,以及数据传递的多种方式如setAttribute、getAttribute、removeAttribute。还讨论了请求转发和重定向的区别,其中forward()用于内部请求处理,而重定向会创建新的请求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取请求行信息的相关方法在这里插入图片描述

在这里插入图片描述

@WebServlet(name = "RequestLineServlet",urlPatterns = "/requestLine")
public class RequestLineServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)throws IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        // 获取请求行的相关信息
        out.println("getMethod : " + request.getMethod() + "<br>");
        out.println("getRequestURI : " + request.getRequestURI() + "<br>");
        out.println("getQueryString:"+request.getQueryString() + "<br>");
        out.println("getProtocol : " + request.getProtocol() + "<br>");
        out.println("getContextPath:"+request.getContextPath() + "<br>");
        out.println("getPathInfo : " + request.getPathInfo() + "<br>");
        out.println("getPathTranslated : "
                + request.getPathTranslated() + "<br>");
        out.println("getServletPath:"+request.getServletPath() + "<br>");
        out.println("getRemoteAddr : " + request.getRemoteAddr() + "<br>");
        out.println("getRemoteHost : " + request.getRemoteHost() + "<br>");
        out.println("getRemotePort : " + request.getRemotePort() + "<br>");
        out.println("getLocalAddr : " + request.getLocalAddr() + "<br>");
        out.println("getLocalName : " + request.getLocalName() + "<br>");
        out.println("getLocalPort : " + request.getLocalPort() + "<br>");
        out.println("getServerName : " + request.getServerName() + "<br>");
        out.println("getServerPort : " + request.getServerPort() + "<br>");
        out.println("getScheme : " + request.getScheme() + "<br>");
        out.println("getRequestURL : " + request.getRequestURL() + "<br>");
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }
}

在这里插入图片描述

获取请求消息头的相关方法

在这里插入图片描述
在这里插入图片描述

@WebServlet(name = "RequestHeadersServlet",urlPatterns = "/requestHeaders")
public class RequestHeadersServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)throws IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        // 获取请求消息中所有头字段
        Enumeration headerNames = request.getHeaderNames();
        // 使用循环遍历所有请求头,并通过getHeader()方法获取一个指定名称的头字段
        while (headerNames.hasMoreElements()) {
            String headerName = (String) headerNames.nextElement();
            out.print(headerName + " : "
                    + request.getHeader(headerName)+ "<br>");
        }
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }
}

在这里插入图片描述

1.1.3获取请求参数

在这里插入图片描述
前端代码

<form action="/day16/requestParams" method="POST">
    用户名:<input type="text" name="username"><br>&nbsp;&nbsp;&nbsp;码:<input type="password" name="password">
    <br>
    爱好:
    <input type="checkbox" name="hobby" value="sing">唱歌
    <input type="checkbox" name="hobby" value="dance">跳舞
    <input type="checkbox" name="hobby" value="football">足球<br>
    <input type="submit" value="提交">
</form>

后端代码

@WebServlet(name = "RequestParamsServlet",urlPatterns = "/requestParams")
public class RequestParamsServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response) {
        String name = request.getParameter("username");
        String password = request.getParameter("password");
        System.out.println("用户名:" + name);
        System.out.println("密  码:" + password);
        // 获取参数名为“hobby”的值
        String[] hobbys = request.getParameterValues("hobby");
        System.out.print("爱好:");
        for (int i = 0; i < hobbys.length; i++) {
            System.out.print(hobbys[i] + ", ");
        }
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response) {
        doGet(request, response);
    }
}

传递数据的方法

  1. setAttribute()

该方法用于将一个对象与一个名称关联后存储进ServletRequest对象中

  1. getAttribute()

该方法用于从ServletRequest对象中返回指定名称的属性对象

  1. removeAttribute()

该方法用于从ServletRequest对象中删除指定名称的属性

  1. getAttributeNames()

该方法用于返回一个包含ServletRequest对象中的所有属性名的Enumeration对象,在此基础上,可以对ServletRequest对象中的所有属性进行遍历处理

  1. getServletContext()

获取全局域对象

  1. getRequestDispatcher(String path)

返回封装了某个路径所指定资源的RequestDispatcher对象。其中,参数path必须以 “/”开头,用于表示当前Web应用的根目录。需要注意的是,WEB-INF目录中的内容对RequestDispatcher对象也是可见的,因此,传递给getRequestDispatcher(String path)方法的资源可以是WEB-INF目录中的文件

  1. forward(ServletRequest request,ServletResponse response)
    该方法用于将请求从一个Servlet传递给另外的一个Web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用这个方法,将请求传递给其它资源进行响应。需要注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出IllegalStateException异常
  2. include(ServletRequest request,ServletResponse response)
    该方法用于将其它的资源作为当前响应内容包含进来
请求转发

在Servlet中,如果当前Web资源不想处理请求时,可以通过forward()方法将当前请求传递给其它的Web资源进行处理,这种方式称为请求转发

在这里插入图片描述
被请求页面

@WebServlet(name = "RequestParamsServlet",urlPatterns = "/requestParams")
public class RequestForwardServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        // 将数据存储到request对象中
        request.setAttribute("company", "北京传智播客教育有限公司");
        RequestDispatcher dispatcher = request
                .getRequestDispatcher("/result");
        dispatcher.forward(request, response);
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }
}

被转发页面

@WebServlet(name = "ResultServlet",urlPatterns = "/result")
public class ResultServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)throws IOException {
        response.setContentType("text/html;charset=utf-8");
        // 获取PrintWriter对象用于输出信息
        PrintWriter out = response.getWriter();
        // 获取request请求对象中保存的数据
        String company = (String) request.getAttribute("company");
        if (company != null) {
            out.println("公司名称:" + company + "<br>");
        }
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)throws IOException {
        doGet(request, response);
    }
}
重定向与转发的区别
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值