Servlet之HttpServletRequest「建议收藏」

Servlet之HttpServletRequest「建议收藏」概述:1、HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar。2、HttpServletRequest接口实现类由Http服务器

大家好,又见面了,我是你们的朋友全栈君。

概述:

1、HttpServletRequest接口来自于Servlet规范中,在Tomcat中存在servlet-api.jar。
2、HttpServletRequest接口实现类由Http服务器负责提供。
3、HttpServletRequest接口负责在doGet/doPost方法运行时读取Http请求协议包中信息。
4、开发人员习惯于将HttpServletRequest接口修饰的对象称为请求对象。

作用:

1、可以读取Http请求协议包中请求行信息。
2、可以读取保存在Http请求协议包中请求头或者请求体中请求参数信息。
3、可以代替浏览器向Http服务器申请资源文件调用。

代码示例

1、可以读取Http请求协议包中请求行信息。

package com.zyh.contrller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class OneServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException {
        //1、通过请求对象,读取请求行中的URL信息
        /*StringBuffer sb =  request.getRequestURL();
        String url = sb.toString();*/
        //合并
        String url =  request.getRequestURL().toString();
        //2、通过请求对象,读取请求行中的method信息
        String method = request.getMethod();
        //3、通过请求对象,读取请求行中的URI信息
        /*
        * URI:资源文件精准定位地址。
        * 在请求行并没有URI这个属性,
        * 实际上是从URL中截取的一个字符串。
        *
        * URI用于:
        * 让Http服务器对被访问的资源文件进行定位。
        */
        String uri =  request.getRequestURI();
        System.out.println("URL:" + url);
        System.out.println("Method:" + method);
        System.out.println("URI:" + uri);
    }
}

在这里插入图片描述
2、可以读取保存在Http请求协议包中请求头或者请求体中请求参数信息。
2.1

package com.zyh.contrller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Enumeration;

public class TwoServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、通过请求对象获得请求头中的所有的请求参数名
        //将所有的请求参数名称保存到一个枚举对象进行返回
        Enumeration paramNames = request.getParameterNames();
        //遍历枚举
        while (paramNames.hasMoreElements()){
            String paramName = (String) paramNames.nextElement();
            //2、通过请求对象读取指定的请求参数的值
            String value = request.getParameter(paramName);
            System.out.println("请求参数名:" + paramName + " 请求参数值:" + value);
        }
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <center>
        <a href="/qwer/two?userName=aa&password=123">
            通过超链接访问TwoServlet并携带请求参数
        </a>
    </center>
</body>
</html>

在这里插入图片描述
点击链接:
在这里插入图片描述
2.2

package com.zyh.contrller;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class ThreeServlet extends HttpServlet {

    /*
    * 问题:
    * 1、GET方式发送中文参数内容时,得到正常结果;
    * 2、以POST方式发送中文参数内容时,得到乱码。
    *
    * 原因:
    * 1、浏览器以GET方式发送请求,请求参数保存在【请求头】,
    * 在Http请求协议包到达Http服务器之后,
    * 请求头二进制内容由Tomcat负责解码,
    * Tomcat9.0默认使用[utf-8]字符集,可以解释一切国家文字。
    *
    * 2、浏览器以POST方式发送请求,请求参数保存在【请求体],
    * 在Http请求协议包到达Http服务器之后,
    * 请求体二进制内容由当前请求对象(request)负责解码。
    * request默认使用[IS0-8859-1]字符集,
    * 此时如果请求体参数内容是中文,将无法解码只能得到乱码。
    * */

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	//通知请求对象,使用UTF-8字符集对请求体的内容进行一次重新解码
        request.setCharacterEncoding("UTF-8");
        //通过请求对象,读取【请求体】参数
        String value = request.getParameter("userName");
        System.out.println("从请求体得到参数值:" + value);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //通过请求对象,读取【请求头】参数
        String userName = request.getParameter("userName");
        System.out.println("从请求头得到参数值:" + userName);
    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>three</title>
</head>
<body>
    <center>
        <form action="/qwer/three" method="get">
            请求参数:<input type="text" name="userName" /><br/>
            <input type="submit" value="get方式访问ThreeServlet">
        </form>

        <form action="/qwer/three" method="post">
            请求参数:<input type="text" name="userName" /><br/>
            <input type="submit" value="post方式访问ThreeServlet">
        </form>
    </center>
</body>
</html>

设置字符集前,post请求的乱码情况:
在这里插入图片描述
在这里插入图片描述
重新设置字符集后:
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155661.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 氚云erp_氚云登录

    氚云erp_氚云登录1产品价值1.1核心优势1.2销售管理者的烦恼1.3产品价值-解决销售人员的烦恼1.4氚云CRM帮助企业提高工作效率、促进团队业绩顺利达成从客户开发、外勤,联系人的维护,客户的跟进商机的有效推进到合同的签定成交以及发票、回款等销售生命周期管理,让销售过程更精细透明。协助销售精英对销售过程进行管理科学预测销售业…

    2025年6月11日
    3
  • RNN:timestep、inputsize、Batchsize的区别「建议收藏」

    近期读了一些关于LSTM的文章,但仍旧很难理解,关键就是不懂输入、输出是什么,相比于图像处理的CNN,RNN特别抽象。昨晚花了很大的精力去理解“遗留状态”这个概念,现在终于明白了一些,关键在timestep这个概念。关于timestep我们看到的所有的RNN结构图,其实都是在一个timestep中的,而不是整个序列。(这句话很简单,但真的是花了很长时间才领悟到的)以下引用自知乎回答:[我的…

    2022年4月16日
    162
  • Keil注册机破解

    Keil注册机破解之前安装Keil5,使用注册机破解之后在使用调试功能时还是提醒RunningwithCodeSizeLimit:2K,查了一下资料好像是因为假破解,因为注册机版本不对,所以Keil跟你开了个玩笑,其实真相是没有破解。于是我重新换了个注册机重新破解,然后就没有再出现这个提示了。以下是破解步骤、安装好Keil之后,右键以管理员权限打开Keil,然后左上角file-license…

    2022年4月29日
    84
  • 变量定义规范_类型转换运算符

    变量定义规范_类型转换运算符变量定义规则定义方式驼峰体下划线你觉得哪种更清晰,哪种就是官方推荐的,我想你肯定会先第2种,第一种AgeOfOldboy咋一看以为是AngelaBaby定义变量不好的方式举例变量名为中文、

    2022年8月4日
    11
  • ❤️肝下25万字的《决战Linux到精通》笔记,你的Linux水平将从入门到入魔❤️【建议收藏】

    ❤️肝下25万字的《决战Linux到精通》笔记,你的Linux水平将从入门到入魔❤️【建议收藏】文章目录操作系统的发展史UnixMinixLinux操作系统的发展Minix没有火起来的原因Linux介绍Linux内核&发行版Linux内核版本Linux发行版本类Unix系统目录结构Linux目录用户目录命令行基本操作命令使用方法查看帮助文档helpman(manual)tab键自动补全history游览历史命令行中的ctrl组合键Linux命令权限管理列出目录的内容:ls显示inode的内容:stat文件访问权限修改文件权限:chmod修改文件所有者:chown修改文件所属组:chgrp文件.

    2022年6月1日
    28
  • Centos7安装Promethus(普罗米修斯)监控系统完整版

    Centos7安装Promethus(普罗米修斯)监控系统完整版相关博文:1、Centos7安装Promethus(普罗米修斯)监控系统完整版2、Promethus(普罗米修斯)监控Mysql数据库3、Promethus(普罗米修斯)安装Grafana可视化图形工具4、Promethus的Grafana图形显示MySQL监控数据5、Promethus(普罗米修斯)的Grafana+onealert实现报警功能目录一、普罗米修斯…

    2022年6月5日
    35

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号