Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】

  • Java后端 学习路线 笔记汇总表【黑马程序员】
  1. Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】
  2. Request和Response-学习笔记02【】

目录

01 Request_原理和继承体系

Request_原理

Request_继承体系

02 Request_获取请求数据

Request_获取请求行数据_方法介绍

Request_获取请求行数据_代码演示

Request_获取请求头数据

获取所有请求头名称

演示获取请求头数据:user-agent

演示获取请求头数据、防盗链

Request_获取请求体数据

Request_获取请求参数通用方式

Request_获取请求参数通用方式

1、String getParameter(String name):根据参数名称获取参数值

2、String[] getParameterValues(String name):根据参数名称获取参数值的数组

3、Enumeration getParameterNames():获取所有请求的参数名称

4、Map getParameterMap():获取所有参数的map集合,string[]>

代码——获取请求参数通用方式

Request_获取请求参数中文乱码问题

get方法(tomcat 8 已经将get方式乱码问题解决)

post方式(设置request的编码)


01 Request_原理和继承体系

Request_原理

1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们。
    2. request对象是来获取请求消息,response对象是来设置响应消息。

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第1张图片 request&response对象原理

Request_继承体系

1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们。
    2. request对象是来获取请求消息,response对象是来设置响应消息。

2. request对象继承体系结构:    
    ServletRequest         --    接口
        |    继承
    HttpServletRequest  -- 接口
        |    实现
    org.apache.catalina.connector.RequestFacade 类(tomcat)

3. request:获取请求消息

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第2张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第3张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第4张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第5张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第6张图片

02 Request_获取请求数据

Request_获取请求行数据_方法介绍

1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们。
    2. request对象是来获取请求消息,response对象是来设置响应消息。

2. request对象继承体系结构:
    ServletRequest        --    接口
        |    继承
    HttpServletRequest    -- 接口
        |    实现
    org.apache.catalina.connector.RequestFacade 类(tomcat)

3. request功能:
    1. 获取请求消息数据
        1. 获取请求行数据
            * GET /day14/demo1?name=zhangsan HTTP/1.1
            * 方法:
                1. 获取请求方式 :GET
                    * String getMethod()  
                2. (*)获取虚拟目录:/day14
                    * String getContextPath()
                3. 获取Servlet路径: /demo1
                    * String getServletPath()
                4. 获取get方式请求参数:name=zhangsan
                    * String getQueryString()
                5. (*)获取请求URI:/day14/demo1
                    * String getRequestURI():           /day14/demo1
                    * StringBuffer getRequestURL():http://localhost/day14/demo1
                6. 获取协议及版本:HTTP/1.1
                    * String getProtocol()

                7. 获取客户机的IP地址:
                    * String getRemoteAddr()
        2. 获取请求头数据
        3. 获取请求体数据

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第7张图片

Request_获取请求行数据_代码演示

1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们。
    2. request对象是来获取请求消息,response对象是来设置响应消息。

2. request对象继承体系结构:
    ServletRequest        --    接口
        |    继承
    HttpServletRequest    -- 接口
        |    实现
    org.apache.catalina.connector.RequestFacade 类(tomcat)

3. request功能:
    1. 获取请求消息数据
        1. 获取请求行数据
            * GET /day14/demo1?name=zhangsan HTTP/1.1
            * 方法:
                1. 获取请求方式 :GET
                    * String getMethod()  
                2. (*)获取虚拟目录:/day14
                    * String getContextPath()
                3. 获取Servlet路径: /demo1
                    * String getServletPath()
                4. 获取get方式请求参数:name=zhangsan
                    * String getQueryString()
                5. (*)获取请求URI:/day14/demo1
                    * String getRequestURI():        /day14/demo1
                    * StringBuffer getRequestURL()  :http://localhost/day14/demo1

                    * URL:统一资源定位符 : http://localhost/day14/demo1    中华人民共和国
                    * URI:统一资源标识符 : /day14/demo1                    共和国

                
                6. 获取协议及版本:HTTP/1.1
                    * String getProtocol()

                7. 获取客户机的IP地址:
                    * String getRemoteAddr()
        2. 获取请求头数据            
        3. 获取请求体数据

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第8张图片  Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第9张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第10张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第11张图片  Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第12张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第13张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第14张图片

package cn.itcast.web.request;

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

/**
 * 演示Request对象获取请求行数据
 */
@WebServlet("/requestDemo1")
public class RequestDemo1 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        /*
            1. 获取请求方式 :GET
                * String getMethod()
            2. (*)获取虚拟目录:/day14
                * String getContextPath()
            3. 获取Servlet路径: /requestDemo1
                * String getServletPath()
            4. 获取get方式请求参数:name=zhangsan
                * String getQueryString()
            5. (*)获取请求URI:/day14/demo1
                * String getRequestURI():		/day14/requestDemo1
                * StringBuffer getRequestURL()  :http://localhost/day14/requestDemo1
            6. 获取协议及版本:HTTP/1.1
                * String getProtocol()
            7. 获取客户机的IP地址:
                * String getRemoteAddr()
         */
        //1. 获取请求方式 :GET
        String method = request.getMethod();
        System.out.println(method);
        //2.(*)获取虚拟目录:/day14
        String contextPath = request.getContextPath();
        System.out.println(contextPath);
        //3. 获取Servlet路径: /demo1
        String servletPath = request.getServletPath();
        System.out.println(servletPath);
        //4. 获取get方式请求参数:name=zhangsan
        String queryString = request.getQueryString();
        System.out.println(queryString);
        //5.(*)获取请求URI:/day14/demo1
        String requestURI = request.getRequestURI();
        StringBuffer requestURL = request.getRequestURL();
        System.out.println(requestURI);
        System.out.println(requestURL);
        //6. 获取协议及版本:HTTP/1.1
        String protocol = request.getProtocol();
        System.out.println(protocol);
        //7. 获取客户机的IP地址:
        String remoteAddr = request.getRemoteAddr();
        System.out.println(remoteAddr);
    }
}

Request_获取请求头数据

1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们。
    2. request对象是来获取请求消息,response对象是来设置响应消息。

2. request对象继承体系结构:
    ServletRequest        --    接口
        |    继承
    HttpServletRequest    -- 接口
        |    实现
    org.apache.catalina.connector.RequestFacade 类(tomcat)

3. request功能:
    1. 获取请求消息数据
        1. 获取请求行数据                
        2. 获取请求头数据
            * 方法:
                * (*)String getHeader(String name):通过请求头的名称获取请求头的值
                * Enumeration getHeaderNames():获取所有的请求头名称

        3. 获取请求体数据

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第15张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第16张图片

获取所有请求头名称

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第17张图片

package cn.itcast.web.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/requestDemo2")
public class RequestDemo2 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示获取请求头数据
        //1.获取所有请求头名称
        Enumeration headerNames = request.getHeaderNames();
        //2.遍历
        while (headerNames.hasMoreElements()) {
            String name = headerNames.nextElement();
            //根据名称获取请求头的值
            String value = request.getHeader(name);
            System.out.println(name + "---" + value);
        }
    }
}

演示获取请求头数据:user-agent

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第18张图片

package cn.itcast.web.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

@WebServlet("/requestDemo3")
public class RequestDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示获取请求头数据:user-agent 告诉服务器客户端的版本是什么—>判断浏览器版本
        String agent = request.getHeader("user-agent"); // user-agent不区分大小写
        //判断agent的浏览器版本
        if (agent.contains("Chrome")) {
            //谷歌
            System.out.println("谷歌来了...");
        } else if (agent.contains("Firefox")) {
            //火狐
            System.out.println("火狐来了...");
        }
    }
}

演示获取请求头数据、防盗链

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第19张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第20张图片

package cn.itcast.web.request;

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

@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //演示获取请求头数据:referer
        String referer = request.getHeader("referer");
        System.out.println(referer);//http://localhost/day14/login.html
        //防盗链
        if (referer != null) {
            if (referer.contains("/day14")) {
                //正常访问
//                 System.out.println("播放电影....");
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write("播放电影....");
            } else {
                //盗链
//                System.out.println("想看电影吗?来优酷吧...");
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().write("想看电影吗?来优酷吧...");
            }
        }
    }
}

Request_获取请求体数据

1. request对象和response对象的原理
    1. request和response对象是由服务器创建的。我们来使用它们。
    2. request对象是来获取请求消息,response对象是来设置响应消息。

2. request对象继承体系结构:
    ServletRequest        --    接口
        |    继承
    HttpServletRequest    -- 接口
        |    实现
    org.apache.catalina.connector.RequestFacade 类(tomcat)

3. request功能:
    1. 获取请求消息数据
        1. 获取请求行数据
        2. 获取请求头数据
        3. 获取请求体数据:
            * 请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
            * 步骤:
                1. 获取流对象
                    *  BufferedReader getReader():获取字符输入流,只能操作字符数据
                    *  ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据
                        * 在文件上传知识点后讲解

                2. 再从流对象中拿数据

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第21张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第22张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第23张图片

package cn.itcast.web.request;

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

@WebServlet("/requestDemo5")
public class RequestDemo5 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求消息体--请求参数
        //1.获取字符流
        BufferedReader br = request.getReader();
        //2.读取数据
        String line = null;
        while ((line = br.readLine()) != null) {
            System.out.println(line);
        }
    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}

Request_获取请求参数通用方式

1. request对象和response对象的原理

2. request对象继承体系结构

3. request功能:
    1. 获取请求消息数据                
    2. 其他功能:
        1. 获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数。
            1. String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
            2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
            3. Enumeration getParameterNames():获取所有请求的参数名称
            4. Map getParameterMap():获取所有参数的map集合
        2. 请求转发
        3. 共享数据
        4. 获取ServletContext

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第24张图片

Request_获取请求参数通用方式

获取请求参数通用方式:不论get还是post请求方式都可以使用下列方法来获取请求参数。

  1. String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
  2. String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
  3. Enumeration getParameterNames():获取所有请求的参数名称
  4. Map getParameterMap():获取所有参数的map集合

1、String getParameter(String name):根据参数名称获取参数值

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第25张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第26张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第27张图片

2、String[] getParameterValues(String name):根据参数名称获取参数值的数组

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第28张图片

3、Enumeration getParameterNames():获取所有请求的参数名称

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第29张图片

4、Map getParameterMap():获取所有参数的map集合

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第30张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第31张图片

代码——获取请求参数通用方式

package cn.itcast.web.request;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

@WebServlet("/requestDemo6")
public class RequestDemo6 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //post 获取请求参数

        //根据参数名称获取参数值
        /* String username = request.getParameter("username");
        System.out.println("post");
        System.out.println(username);*/

        //根据参数名称获取参数值的数组
        String[] hobbies = request.getParameterValues("hobby");
        /*for (String hobby : hobbies) {
            System.out.println(hobby);
        }*/

        //获取所有请求的参数名称
        /*Enumeration parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            System.out.println(name);
            String value = request.getParameter(name);
            System.out.println(value);
            System.out.println("----------------");
        }*/

        // 获取所有参数的map集合
        Map parameterMap = request.getParameterMap();
        //遍历
        Set keyset = parameterMap.keySet();
        for (String name : keyset) {
            //获取键 获取值
            String[] values = parameterMap.get(name);
            System.out.println(name);
            for (String value : values) {
                System.out.println(value);
            }
            System.out.println("-----------------");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //get 获取请求参数
       /* //根据参数名称获取参数值
        String username = request.getParameter("username");
        System.out.println("get");
        System.out.println(username);*/
        this.doPost(request, response);
    }
}

Request_获取请求参数中文乱码问题

中文乱码问题:
    * get方式:tomcat 8 已经将get方式乱码问题解决了。
    * post方式:会乱码
        * 解决:在获取参数前,设置request的编码 request.setCharacterEncoding("utf-8") ;

get方法(tomcat 8 已经将get方式乱码问题解决)

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第32张图片

post方式(设置request的编码)

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第33张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第34张图片

Request和Response-学习笔记01【Request_原理和继承体系、Request_获取请求数据】_第35张图片

你可能感兴趣的:(JavaWeb,java,servlet,tomcat,request,乱码)