JavaWeb—HttpServletRequest对象

获取请求行

  • 获取请求方法
    String getMethod()
 System.out.println(request.getMethod());

控制台结果:
在这里插入图片描述

  • 获取请求资源
    1.String getRequestURL()
System.out.println(request.getRequestURL());

控制台结果:
在这里插入图片描述
2.String getRequestURI()

  System.out.println(request.getRequestURI());

控制台结果:
在这里插入图片描述

  • 获取应用名称
 System.out.println(request.getContextPath());
  • 获取get查询参数
  System.out.println(request.getQueryString());

在这里插入图片描述
控制台结果:
在这里插入图片描述

获取请求头

  1. 获取所有的请求头名称
 Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()){
            System.out.println(headerNames.nextElement());
        }

在这里插入图片描述

  1. 获取指定的头信息
System.out.println(request.getHeader("accept"));

控制台打印结果:
在这里插入图片描述

  1. 打印所有的请求头和请求头内容
 Enumeration<String> headerNames = request.getHeaderNames();
        while (headerNames.hasMoreElements()){
            String s = headerNames.nextElement();
            String s1 = request.getHeader(s);
            System.out.println(s+":"+s1);
        }

控制台打印结果:
在这里插入图片描述

  1. referer
    告诉服务器我是从哪个页面链接过来的
System.out.println(request.getHeader("referer"));

注意事项:
通过以下方式发送请求才会获取:

  1. 直接用<a href=""
  2. 用Submit或提交的表单(POST或GET)
  3. 用JAvaScript提交的表单(POST或GET)

通过以下方式不会有referer:

  1. 从收藏夹链接
  2. 单击主页或自定义的地址

获取请求体

  1. 获取一个值
request.getParameter("name");
  1. 获取多个值,返回的是一个数组。
 String[] parameterValues = request.getParameterValues("hobby");
  1. 获取所有请求参数名称,返回的是一个枚举。
 Enumeration<String> parameterNames = request.getParameterNames();
  1. 获取所有请求参数
  Map<String, String[]> parameterMap = request.getParameterMap();
        for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
            System.out.println(entry.getKey());
            System.out.println(Arrays.toString(entry.getValue()));
        }

解决中文乱码问题

  1. 什么时候使用get方式与post方式
    发送的参数不需要写到数据库当中使用get。
    发送的参数需要保存到数据库当中使用post。
    form一般提交数据的数据为post
  2. 造成乱码的原因
    HTML设置了浏览器在传递请求参数时,采用的编码时UTF-8,但是在解码的时候采用的是默认的ISO8859-1 不支持中文,所以乱码。
  3. 通用解决办法
    获取对应的参数,通过iso8859-1转回二进制位,再以utf-8的形式转成字符串,存在的问题,每一个参数都必须得要转回二进制位,再转为字符串。
 str = new String(str.getBytes("ISO8859-1"),"utf-8");
  1. request方法解决中文乱码 :只适用于post
 request.setCharacterEncoding("utf-8");

请求转发

重定向与请求转发的区别:

  • 重定向:找servlet1,通过设置响应,告诉浏览器, 再让浏览器发送请求到servlet2,发两次请求,地址栏会发生变化。
    在这里插入图片描述
  • 请求转发:请求转发只需要发送一次直接,找servlet1,在servlet1当中直接转发给servlet2,不要再告诉浏览器,只发送一次请求,浏览器地址栏当中还是servlet1,不会发生变化。
    在这里插入图片描述
    实现转发:
  1. 通过请求对象获取一个转发器,返回一个RequestDispatcher,
    WEB-INF目录中的内容对getRequestDispatcher对象也是可见的 。
  2. 通过转发器进行转发,调用转发器的forward方法进行转发。
  RequestDispatcher dispatcher = request.getRequestDispatcher("/Servlet5");
  dispatcher.forward(request,response);

request域对象:
在一次请求过程当中,request是共享的。在一个servlet当中设置的参数,转发到另外一个servlet,取出来的是同一个。
生命周期:

  1. 创建:发送一个请求时创建一个request对象。
  2. 销毁:请求结束,浏览器给出响应时,销毁。
  3. 作用范围:一次请求当中。

客户端地址与服务器端地址

  • 客户端地址
    客户端访问服务器使用的地址,服务器外部地址,在写的时候要写上web应用的名称 /应用名称/资源。
  • 服务器地址
    在服务内部当中使用的地址,不需要写web应用名称 /资源名称。
发布了25 篇原创文章 · 获赞 0 · 访问量 277

猜你喜欢

转载自blog.csdn.net/qq_42219004/article/details/105302872
今日推荐