IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> HttpServletRequest对象 -> 正文阅读

[系统运维]HttpServletRequest对象

HttpServletRequest对象

HttpServletRequest对象介绍

HttpServletRequest 对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等 都属于客户端发来的信息,service()方法中形参接收的是 HttpServletRequest 接口的实例化对象,表示该对象主要 应用在 HTTP 协议上,该对象是由 Tomcat 封装好传递过来。

HttpServletRequest 是 ServletRequest 的子接口,ServletRequest 只有一个子接口,就HttpServletRequest。 既然只有一个子接口为什么不将两个接口合并为一个? 从长远上讲:现在主要用的协议是 HTTP 协议,但以后可能出现更多新的协议。若以后想要支持这种新协议,只需要 直接继承 ServletRequest 接口就行了。

在 HttpServletRequest 接口中,定义的方法很多,但都是围绕接收客户端参数的。但是怎么拿到该对象呢?不需 要,直接在 Service 方法中由容器传入过来,而我们需要做的就是取出对象中的数据,进行分析、处理。

Service方法使用

Service方法主要是通过调用get(),post()等方法到响应客户端的请求。可以直接重写Service方法,也可以只重写各个请求类型对应的方法

接收方法常用的方法

  • getRequestURL()

    获取客户端发出的请求时的完整URL

  • getRequestURI()

    获取请求行中的资源部分名称(项目名称开始)

  • getQueryString()

    获取请求行中的参数部分

  • getMethod()

    获取客户端的请求方式

  • getProtocol()

    获取HTTP版本号

  • getContextPath()

    获取webapp名字

例子

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   //获取URL
    String URL = request.getRequestURI().toString();
    System.out.println("URL = " + URL);
    //获取URI
    String URI = request.getRequestURI();
    System.out.println("URI = " + URI);
    //获取请求方式
    String Method = request.getMethod();
    System.out.println("Method = " + Method);
    //获取参数部分
    String param = request.getQueryString();
    System.out.println("Param = " + param);
    //获取Http的版本号
    String Version = request.getProtocol();
    System.out.println("Version = " + Version);
    //获取项目名
    String Project = request.getContextPath();
    System.out.println("Project name = " + Project);
}

输入localhost:8080/study/tmp?name = tom&age = 10

打印结果为

URL = /study/tmp
URI = /study/tmp
Method = GET
Param = name%20=%20tom&age%20=%2010
Version = HTTP/1.1
Project name = /study

注意

这里出现了字符%20这是空格的ASC码的16进制数

重点: 获取请求中的参数

  • getParameter(name) //获取参数name 的值

            String name = request.getParameter("name");
            System.out.println(name);
    
  • getParametersValues(name) //获取name的所有值

    String[] parameters = request.getParameterValues("age");
    if (parameters == null) return;
    for(String tmp : parameters){
        System.out.print(tmp + "    ");
    }
    

处理请求中含有中文的乱码问题

由于现在的 request 属于接收客户端的参数,所以必然有其默认的语言编码,主要是由于在解析过程中默认使用的编 码方式为 ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。要想解决这种乱码问题,需要设置 request 中的编码方式,告诉服务器以何种方式来解析数据。或者在接收到乱码数据以后,再通过相应的编码格式还原。

  • 方法一: 通过setCharacterEncoding(“UTF-8”)这种方法只针对POST请求有效

    在获取参数之前加上request.setCharacterEncoding(“UTF-8”)

  • 方法二:借助了String 对象的方法,该种方式对任何请求有效,是通用的。

    这种方法是通用的但是也不能乱用,如果编码正确,可能反而转换成了错误的编码。

    同过new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");

GET方法在Tomcat8以后就不会出现乱码的情况。所以不用管GET请求乱码。

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-24 15:13:03  更:2021-10-24 15:14:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:59:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码