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

    技术2022-07-11  77

    文章目录

    引言Request对请求行数据的操作Request对请求头数据的操作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请求的请求参数步骤: 获取流对象 BufferedReader getReader():获取字符输入流,只能操作字符数据ServletInputStream getInputStream():获取字节输入流,可以操作所有类型数据 在文件上传知识点后讲解 再从流对象中拿数据

    通用方式

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

    this.doPost(request,response);

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

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

    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,不过在浏览器的地址栏是不会改变的。

    Processed: 0.016, SQL: 9