欢迎光临
我们一直在努力

手写人生第一个 Servlet:GET 参数贴在地址栏,POST 参数藏进信封里|3 种提交方式实测 + F12 抓包图解

请添加图片描述

🎬 博主名称:一鸣

🔥 个人专栏: 《苍穹外卖》《喜喜》

⛺️生活的理想,就是为了理想的生活!


文章目录

    • 一、先搞清楚我们要做什么
    • 二、环境准备
    • 三、第一步:写测试页面 index.html
    • 四、第二步:写 Servlet —— DemoTestServlet.java
      • 代码里三个必须看懂的点
    • 五、三种方式逐个实测
      • 方式①:GET 表单提交
      • 方式②:超链接访问(本质也是 GET)
      • 方式③:POST 表单提交(重点看 F12)
    • 六、一个请求从浏览器到 Servlet,经历了什么
    • 七、GET vs POST:结合这次实验的硬核对比
    • 八、新手必踩的 5 个坑(对照排查)
      • 坑 1:提交完页面一片空白(最常见)
      • 坑 2:405 Method Not Allowed
      • 坑 3:404 Not Found
      • 坑 4:POST 提交中文变问号/乱码
      • 坑 5:路径写死,换个部署名就挂
    • 九、面试 30 秒速答版
    • 附录:web.xml 配置方式(不用注解时)
    • 写在最后

面试天天被问「GET 和 POST 有什么区别」,你背得出「GET 参数在 URL,POST 参数在请求体」,但你亲手传过一次参数吗?

这篇文章用一个最小到不能再小的实验,把 GET 表单、超链接、POST 表单 三种提交方式全部跑通,再打开 F12 亲眼看看参数到底去了哪里。代码全部可直接复制运行,看完你就能在面试里把这道题讲出画面感。

Servlet 博客封面:浏览器经数据管道访问服务器,GET 明信片与 POST 信封并列


一、先搞清楚我们要做什么

我们要写一个 Web 应用,上下文路径(contextPath)叫 /servletApp,里面放一个 Servlet,映射到 /demoTest。然后在一个测试页面上准备三种「递话」给这个 Servlet 的方式:

方式
提交方法
参数出现在哪
① GET 表单提交 GET 地址栏 URL 的 ?msg=xxx
② 超链接访问 GET(本质) 地址栏 URL 的 ?msg=hello
③ POST 表单提交 POST 请求体 Form Data,地址栏不变

浏览器访问地址统一是:

http://127.0.0.1:8080/servletApp/demoTest

为什么要一次测三种?因为初学者最容易误以为「只有表单才能传参数」。实际上超链接、地址栏手动输入、JS 发请求,走的都是 GET;而 POST 基本只来自 method=\”post\” 的表单(或 AJAX)。一次把它们放一起对比,区别一眼就懂。


二、环境准备

  • IDEA(Community 版即可)+ 本地 Tomcat 9.x
  • JDK 8 及以上
  • 本文使用 javax.servlet(对应 Tomcat 9)。如果你用 Tomcat 10+,把 javax.servlet 全部换成 jakarta.servlet 即可,代码逻辑完全一样。

项目结构(传统 JavaWeb 工程,也可以用 Maven,依赖见文末附录):

servletApp
├── src
│ └── com.example.servlet
│ └── DemoTestServlet.java
└── web
├── WEB-INF
│ └── web.xml(使用注解可省略)
└── index.html


三、第一步:写测试页面 index.html

页面上放三个区块:GET 表单、超链接、POST 表单。注意两个表单的 action 都要带上上下文路径 /servletApp。

<!DOCTYPE html>
<html lang=\”zh-CN\”>
<head>
<meta charset=\”UTF-8\”>
<title>Servlet 请求测试(/servletApp/demoTest)</title>
</head>
<body>

<h2>Servlet 请求测试(/servletApp/demoTest)</h2>

<h3>GET 表单提交</h3>
<form action=\”/servletApp/demoTest\” method=\”get\”>
<input type=\”text\” name=\”msg\” placeholder=\”输入内容\”>
<button type=\”submit\”>GET 提交</button>
</form>

<h3>超链接访问(GET)</h3>
<a href=\”/servletApp/demoTest?msg=hello\”>
访问 /servletApp/demoTest?msg=hello
</a>

<h3>POST 表单提交</h3>
<form action=\”/servletApp/demoTest\” method=\”post\”>
<input type=\”text\” name=\”msg\” placeholder=\”输入内容\”>
<button type=\”submit\”>POST 提交</button>
</form>

</body>
</html>

关键点: 输入框的 name=\”msg\” 就是参数名,Servlet 里靠这个名字取值。表单 method 决定了这次请求是 GET 还是 POST。


四、第二步:写 Servlet —— DemoTestServlet.java

让 doGet 和 doPost 都调用同一个 handleRequest,这样三种方式进来的参数都能用同一套代码接收和响应,避免写两遍。

package com.example.servlet;

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

@WebServlet(\”/demoTest\”)
public class DemoTestServlet extends HttpServlet {

// GET 请求走这里<

赞(0)
未经允许不得转载:171主机测评 » 手写人生第一个 Servlet:GET 参数贴在地址栏,POST 参数藏进信封里|3 种提交方式实测 + F12 抓包图解
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址