码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 解决表单action属性传参时值为null的问题


    一. 异常重现

    最近壹哥有个学生在学习Servlet进行Web开发时,尝试着使用表单中的action传递参数,结果他发现在Servlet中无法接收到前端传过来的参数值。

    我们先来看看他的代码,具体代码如下所示:

    1. 前端代码参数

    这里用action配置了后端接口及传递的参数1001。

    1. <form action="/user?id=1001">
    2. <input type="submit" value="提交" />
    3. </form>

    2. 后台Servlet代码

    这里是对应的后端Servlet代码,可以从请求参数中获取id参数的值。

    1. @WebServlet("/user")
    2. public class MyServlet extends HttpServlet {
    3. protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    4. String id = request.getParameter("id");
    5. System.out.println(id);
    6. }
    7. }

    上面的代码执行之后,最终的打印结果是: null

    这个学生就很好奇,为什么id的值是null?不应该是1001吗?这是怎么回事呢?

    二. 异常原因

    对于这样的结果,这个同学表示很疑惑,那么结果为什么是null呢?他始终想不明白原因,于是就来找壹哥给他解决。于是壹哥就拿来他的代码,给他仔细排除了起来。

    通过debug调试,我发现,如果是从url中直接访问http://localhost:8080/user?id=1001时,则可以接收到前端传来的数据。但当利用form表单传参时,获取的值却是null。由此可见,问题应该出在action参数上面,而不是我们的后端代码有问题!

    之所以会出现上述现象,这是因为当action传参时,默认用的是get请求方式,get请求会将action中的参数给清除掉,也就是url中的参数被清除掉了,传递时变成了http://localhost:8080/user? 这种形式,所以Servlet代码中自然就无法获取到对应的请求参数了。

    三. 解决方案

    那么这个问题该怎么解决呢?这里壹哥给出如下2种具体的解决方案。

    1. 第一种方案,我们可以将表单中的请求方式改为post。因为post请求是以请求体的方式传递参数,url中的参数不会被清理。

    2. 第二种方案,我们可以使用隐藏控件传参,这时无论是get/post请求都可以。

    这里壹哥就给大家展示使用隐藏控件传参的代码示例:

    1. <form action="/user">
    2. <input type="hidden" name="id" value="1001"/>
    3. <input type="submit" value="提交" />
    4. </form>

    大家以后要记住,如果我们是以get请求传参,则会以url方式传递;如果是以post请求传参,则会将id参数以请求体的方式传到后台Servlet中。

    现在你知道这个问题是怎么产生、怎么解决的吗?如果你还有其他问题,可以将问题在评论区贴出来,壹哥看到就会给你详细解答哦。

  • 相关阅读:
    java计算机毕业设计基于安卓Android的仓库货物管理app(源码+系统+mysql数据库+Lw文档)
    数据结构(一) -- 队列
    软考中级(网络工程师考核要点)第一章 计算机网络系统(信道特性应用)第六期(4B/5B编码、数字调制技术和脉冲编码调制)
    C语言--程序环境和预处理(宏)
    Linux -- 进程间通信之匿名管道
    linux kernel内核调试方法(二)
    编程中的信号处理和系统 - 初学者指南
    django学习入门系列之第二点《浏览器能识别的标签3》
    UG\NX二次开发 选择基准平面 UF_UI_select_with_single_dialog
    如何批量设置 Word 文档的限制编辑?
  • 原文地址:https://blog.csdn.net/syc000666/article/details/125495576
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号