本系列博客汇总在这里:请求对象 request 和响应对象 response 汇总


目录


一、HttpServletRequest 基本功能

  1. Tomcat 请求响应
    Web 服务器收到客户端的 http 请求,会针对每一次请求,分别创建一个用于代表请求的 request 对象、和代表响应的 response 对象 request 和 response 对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找 request 对象就行了。要向客户机输出数据,只需要找 response 对象就行了。

  2. HttpServletRequest 的功能
    (1)HttpServletRequest 在 JavaWeb 中非常重要的一个类。它是 Servlet 的 service() 方法的参数之一!所以你必须必须要掌握它!
    (2)request 的功能可以分为以下几种:
    ① 封装了请求头数据;
    ② 封装了请求正文数据,如果是GET请求,那么就没有正文;
    ③ request是一个域对象,可以把它当成Map来添加获取数据;
    ④ 做请求的转发

  3. request 获取请求头数据
    (1)String value = request.getHeader(“请求头名称”),request 对象可以用来获取请求头数据,当然,这些请求数据都是 Tomcat 封装到 request 中去的。我们在 service() 方法中可以直接来获取!
    (2)request与请求头相关的方法有:
    ① String getHeader(String name):获取指定名称的请求头;
    ② Enumeration getHeaderNames():获取所有请求头名称;
    ③ int getIntHeader(String name):获取值为 int 类型的请求头。

  4. 测试
    HelloServlet
    请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_请求头
    web.xml
    请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_java_02
    启动 tomcat(注意:第一次请先发布项目),地址栏访问 http://localhost/reqresp_demo1/hello
    请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_xml_03

二、request 获取请求相关的其它方法

  1. request 中还提供了与请求相关的其他方法,有些方法是为了我们更加便捷的方法请求头数据而设计,有些是与请求URL相关的方法。
    (1)int getContentLength():获取请求正文的字节数,GET 请求没有正文,没有正文返回-1;
    (2)String getContentType():获取请求类型,如果请求是 GET,那么这个方法返回 null;如果是 POST请求,那么默认为 application/x-www-form-urlencoded(理解为字符串类型),其它类型以后再学;
    (3)String getMethod():返回请求方法,例如:GET 或者 POST
    (4)Locale getLocale():返回当前客户端浏览器支持的 Locale。java.util.Locale 表示国家和言语,这个东西在国际化中很有用;
    (5)String getCharacterEncoding():获取请求编码,如果没有 setCharacterEncoding(),那么返回 null 。表示使用 ISO-8859-1编码;
    (6)void setCharacterEncoding(String code):设置请求编码,只对正文有效!注意,对于 GET 而言,没有正文!!!所以此方法只能对 POST 请求中的参数有效!
    (7)String getContextPath():返回上下文路径,例如:/项目名称
    (8)String getQueryString():返回请求 URL 中的参数,例如:name=weiyuxuan
    (9)String getRequestURI():返回请求 URI 路径,例如:/hello/oneServlet
    (10)StringBuffer getRequestURL():返回请求 URL 路径,例如:http://localhost/hello/oneServlet ,即返回除了参数以外的路径信息;
    (11)String getServletPath():返回 Servlet 路径,例如:/oneServlet
    (12)String getRemoteAddr():返回当前客户端的 IP 地址;
    (13)String getRemoteHost():返回当前客户端的主机名,但这个方法的实现还是获取 IP 地址;
    (14)int getRemotePort():返回客户端的端口号,每次请求都会变;
    (15)String getSchema():返回请求协议,例如:http;
    (16)String getServerName():返回主机名,例如:localhost
    (17)int getServerPort():返回服务器端口号,例如:80

请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_请求头_04

2. 测试

HelloServlet

请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_java_05

web.xml

请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_xml_06

结果

请求对象 request 和响应对象 response(2)_HttpServletRequest 基本功能_xml_07

三、以上操作完整源码

  • HelloServlet

    package com.wyx.servlet;

    import java.io.IOException;
    import java.util.Enumeration;

    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    public class HelloServlet extends HttpServlet
    {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {

    System.out.println(request);
    // 根据头信息的key来获得值
    String headVal = request.getHeader("Host");
    System.out.println("Host:" + headVal);

    // 获得所有头信息的name
    Enumeration<String> headNames = request.getHeaderNames();
    while (headNames.hasMoreElements())
    {
    String name = headNames.nextElement();
    System.out.println(name + " :" + request.getHeader(name));
    }
    }

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

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

    public class HelloServlet1 extends HttpServlet
    {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    {

    System.out.println("request.getContentLength(): " + request.getContentLength());
    System.out.println("request.getContentType(): " + request.getContentType());
    System.out.println("request.getContextPath(): " + request.getContextPath());
    System.out.println("request.getMethod(): " + request.getMethod());
    System.out.println("request.getLocale(): " + request.getLocale());
    System.out.println("request.getQueryString(): " + request.getQueryString());
    System.out.println("request.getRequestURI(): " + request.getRequestURI());
    System.out.println("request.getRequestURL(): " + request.getRequestURL());
    System.out.println("request.getServletPath(): " + request.getServletPath());
    System.out.println("request.getRemoteAddr(): " + request.getRemoteAddr());
    System.out.println("request.getRemoteHost(): " + request.getRemoteHost());
    System.out.println("request.getRemotePort(): " + request.getRemotePort());
    System.out.println("request.getScheme(): " + request.getScheme());
    System.out.println("request.getServerName(): " + request.getServerName());
    System.out.println("request.getServerPort(): " + request.getServerPort());
    }

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

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.wyx.servlet.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
    <servlet-name>HelloServlet1</servlet-name>
    <servlet-class>com.wyx.servlet.HelloServlet1</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>HelloServlet1</servlet-name>
    <url-pattern>/hello1</url-pattern>
    </servlet-mapping>

    </web-app>

    工程文件下载

如有错误,欢迎指正!