飞道的博客

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

312人阅读  评论(0)
  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对象原理

Request_继承体系

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

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

3. request:获取请求消息

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_获取请求行数据_代码演示

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. 获取请求体数据

  

  


  
  1. package cn.itcast.web.request;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. /**
  9. * 演示Request对象获取请求行数据
  10. */
  11. @WebServlet("/requestDemo1")
  12. public class RequestDemo1 extends HttpServlet {
  13. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. }
  15. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  16. /*
  17. 1. 获取请求方式 :GET
  18. * String getMethod()
  19. 2. (*)获取虚拟目录:/day14
  20. * String getContextPath()
  21. 3. 获取Servlet路径: /requestDemo1
  22. * String getServletPath()
  23. 4. 获取get方式请求参数:name=zhangsan
  24. * String getQueryString()
  25. 5. (*)获取请求URI:/day14/demo1
  26. * String getRequestURI(): /day14/requestDemo1
  27. * StringBuffer getRequestURL() :http://localhost/day14/requestDemo1
  28. 6. 获取协议及版本:HTTP/1.1
  29. * String getProtocol()
  30. 7. 获取客户机的IP地址:
  31. * String getRemoteAddr()
  32. */
  33. //1. 获取请求方式 :GET
  34. String method = request.getMethod();
  35. System.out.println(method);
  36. //2.(*)获取虚拟目录:/day14
  37. String contextPath = request.getContextPath();
  38. System.out.println(contextPath);
  39. //3. 获取Servlet路径: /demo1
  40. String servletPath = request.getServletPath();
  41. System.out.println(servletPath);
  42. //4. 获取get方式请求参数:name=zhangsan
  43. String queryString = request.getQueryString();
  44. System.out.println(queryString);
  45. //5.(*)获取请求URI:/day14/demo1
  46. String requestURI = request.getRequestURI();
  47. StringBuffer requestURL = request.getRequestURL();
  48. System.out.println(requestURI);
  49. System.out.println(requestURL);
  50. //6. 获取协议及版本:HTTP/1.1
  51. String protocol = request.getProtocol();
  52. System.out.println(protocol);
  53. //7. 获取客户机的IP地址:
  54. String remoteAddr = request.getRemoteAddr();
  55. System.out.println(remoteAddr);
  56. }
  57. }

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<String> getHeaderNames():获取所有的请求头名称

        3. 获取请求体数据

获取所有请求头名称


  
  1. package cn.itcast.web.request;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.util.Enumeration;
  9. @WebServlet("/requestDemo2")
  10. public class RequestDemo2 extends HttpServlet {
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. }
  13. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. //演示获取请求头数据
  15. //1.获取所有请求头名称
  16. Enumeration<String> headerNames = request.getHeaderNames();
  17. //2.遍历
  18. while (headerNames.hasMoreElements()) {
  19. String name = headerNames.nextElement();
  20. //根据名称获取请求头的值
  21. String value = request.getHeader(name);
  22. System.out.println(name + "---" + value);
  23. }
  24. }
  25. }

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


  
  1. package cn.itcast.web.request;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.IOException;
  8. import java.util.Enumeration;
  9. @WebServlet("/requestDemo3")
  10. public class RequestDemo3 extends HttpServlet {
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. }
  13. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. //演示获取请求头数据:user-agent 告诉服务器客户端的版本是什么—>判断浏览器版本
  15. String agent = request.getHeader( "user-agent"); // user-agent不区分大小写
  16. //判断agent的浏览器版本
  17. if (agent.contains( "Chrome")) {
  18. //谷歌
  19. System.out.println( "谷歌来了...");
  20. } else if (agent.contains( "Firefox")) {
  21. //火狐
  22. System.out.println( "火狐来了...");
  23. }
  24. }
  25. }

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


  
  1. package cn.itcast.web.request;
  2. import javax.servlet.ServletContext;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.annotation.WebServlet;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. import java.io.IOException;
  9. @WebServlet("/requestDemo4")
  10. public class RequestDemo4 extends HttpServlet {
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. }
  13. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14. //演示获取请求头数据:referer
  15. String referer = request.getHeader( "referer");
  16. System.out.println(referer); //http://localhost/day14/login.html
  17. //防盗链
  18. if (referer != null) {
  19. if (referer.contains( "/day14")) {
  20. //正常访问
  21. // System.out.println("播放电影....");
  22. response.setContentType( "text/html;charset=utf-8");
  23. response.getWriter().write( "播放电影....");
  24. } else {
  25. //盗链
  26. // System.out.println("想看电影吗?来优酷吧...");
  27. response.setContentType( "text/html;charset=utf-8");
  28. response.getWriter().write( "想看电影吗?来优酷吧...");
  29. }
  30. }
  31. }
  32. }

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. 再从流对象中拿数据


  
  1. package cn.itcast.web.request;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.BufferedReader;
  8. import java.io.IOException;
  9. @WebServlet("/requestDemo5")
  10. public class RequestDemo5 extends HttpServlet {
  11. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  12. //获取请求消息体--请求参数
  13. //1.获取字符流
  14. BufferedReader br = request.getReader();
  15. //2.读取数据
  16. String line = null;
  17. while ((line = br.readLine()) != null) {
  18. System.out.println(line);
  19. }
  20. }
  21. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  22. }
  23. }

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<String> getParameterNames():获取所有请求的参数名称
            4. Map<String,String[]> getParameterMap():获取所有参数的map集合
        2. 请求转发
        3. 共享数据
        4. 获取ServletContext

Request_获取请求参数通用方式

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

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

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

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

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

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

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


  
  1. package cn.itcast.web.request;
  2. import javax.servlet.ServletException;
  3. import javax.servlet.annotation.WebServlet;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. import java.io.BufferedReader;
  8. import java.io.IOException;
  9. import java.util.Enumeration;
  10. import java.util.Map;
  11. import java.util.Set;
  12. @WebServlet("/requestDemo6")
  13. public class RequestDemo6 extends HttpServlet {
  14. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  15. //post 获取请求参数
  16. //根据参数名称获取参数值
  17. /* String username = request.getParameter("username");
  18. System.out.println("post");
  19. System.out.println(username);*/
  20. //根据参数名称获取参数值的数组
  21. String[] hobbies = request.getParameterValues( "hobby");
  22. /*for (String hobby : hobbies) {
  23. System.out.println(hobby);
  24. }*/
  25. //获取所有请求的参数名称
  26. /*Enumeration<String> parameterNames = request.getParameterNames();
  27. while(parameterNames.hasMoreElements()){
  28. String name = parameterNames.nextElement();
  29. System.out.println(name);
  30. String value = request.getParameter(name);
  31. System.out.println(value);
  32. System.out.println("----------------");
  33. }*/
  34. // 获取所有参数的map集合
  35. Map<String, String[]> parameterMap = request.getParameterMap();
  36. //遍历
  37. Set<String> keyset = parameterMap.keySet();
  38. for (String name : keyset) {
  39. //获取键 获取值
  40. String[] values = parameterMap.get(name);
  41. System.out.println(name);
  42. for (String value : values) {
  43. System.out.println(value);
  44. }
  45. System.out.println( "-----------------");
  46. }
  47. }
  48. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  49. //get 获取请求参数
  50. /* //根据参数名称获取参数值
  51. String username = request.getParameter("username");
  52. System.out.println("get");
  53. System.out.println(username);*/
  54. this.doPost(request, response);
  55. }
  56. }

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

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

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

post方式(设置request的编码)


转载:https://blog.csdn.net/weixin_44949135/article/details/113794743
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场