JAVA学习之路(3) request的总结

引言

在httpServlet类中,我们只需要调用doGet和doPost方法即可以实现对应的功能。对应这两个方法,有两个穿进去的参数对象,一个是response,一个是request。

通过对request和response的操作,实现对每次请求的处理。今天主要就是学习request的功能实现。

Request对请求行数据的操作

最重要的信息是:请求方式,请求url,请求协议

  • 获取请求方式 :GET

    • String getMethod()
  • 获取虚拟目录:即是项目部署的根目录

    • String getContextPath()
  • 获取Servlet路径: 就是当前对象相对于根目录的路径

    • String getServletPath()
  • 获取get方式请求参数:即get方式传递的信息参数

    • String getQueryString()
  • 获取请求URI:就是当前对象的绝对路径(加上了根目录)

    • String getRequestURI():
    • StringBuffer getRequestURL()

    注:URI和URL的区别:URL是URI的子集,URL强调是利用地址来唯一标识资源。

  • 获取协议及版本:HTTP/1.1

    • String getProtocol()
  • 获取客户机的IP地址:

    • String getRemoteAddr()

Request对请求头数据的操作

请求头最重要信息:浏览器客户端,访问来源。

  • 获取请求头数据

    • 方法:
      • (*)String getHeader(String name):通过请求头的名称获取请求头的值
      • Enumeration getHeaderNames():获取所有的请求头名称

    其中最重要的两个name是User-Agent和Refere,分布是浏览器客户端,访问来源。通过String getHeader(String name):通过请求头的名称获取对应的值。

Request对请求头数据的操作

  • 获取请求体数据:

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

    通用方式

    如果我们用上面的方法请求参数的话,可能需要根据post和get方法写不同的代码,java提供了通用的方式,使得我们只需要在get里面写这样一行:

             this.doPost(request,response);
  1. String getParameter(String name):根据参数名称获取参数值

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

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

    这里的Enumeration应当视为一种迭代器,使用迭代器的方式进行操作。如:

    Enumeration<String> parameterNames = request.getParameterNames();
            while (parameterNames.hasMoreElements())
            {
                String s = parameterNames.nextElement();
                String parameterValues = request.getParameter(s);
                request.setAttribute(s,parameterValues);
                System.out.println(s+":"+parameterValues);
            }
    

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

中文乱码问题

get方式:换用tomcat8及以上。

post方式:在获取参数前,设置request的编码

       request.setCharacterEncoding("utf-8");

请求转发

定义:服务器内部的资源跳转

用处:一个项目有多个servlet,可能需要多个servlet完成一个任务,数据可能再多个servlet多次跳转。

相关函数:

 RequestDispatcher requestDispatcher = request.getRequestDispatcher("/demoq");
 requestDispatcher.forward(request,response);

第一行是声明一个转发对象,该转发对象有一个forward方法,可以继续调用另外一个servlet,不过在浏览器的地址栏是不会改变的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章