doGet与doPost的区别

2023-11-03

在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get。可在<form>中的method属性中指定提交的方式。如:<formaction="inputForm"method="get">,如果不指定method属性,则会默认该属性为”get”方式。

Get和post都能够提交数据,那么他们有什么不同呢?

不同点一:

通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。

不同点二:

通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。

下面举一个例子来说明:

1.输入表单input.html

<html>
  <head>
    <title>表单输入</title>
  </head>
 
  <body>
  <form action="inputForm"  method="post">
    name:<input type="text"name="name"><br>
    sex:<input type="radio"value="男" name="sex" checked="checked">男
    <input type="radio"value="女" name="sex">女<br>
    <input type=submitvalue="提交" name="submit"><br>
    </form>
  </body>
</html>


2.Serlvlet类InputServlet.java

packagecn.edu.jxau.servlet;
 
import java.io.IOException;
import java.io.PrintWriter;
 
importjavax.servlet.ServletException;
importjavax.servlet.http.*; 
public class InputServletextends HttpServlet{
 
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponseresp)
            throws ServletException, IOException {
        String name =req.getParameter("name");
        String sex = req.getParameter("sex");
        PrintWriter out =resp.getWriter();
        out.println("<html>");
        out.println("<head><title>Servlet展示页</title></head>");
        out.println("<body>name:" + name + "<br/> sex: " + sex +"</body>");
        out.println("</html>");     
    }
 
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponseresp)
            throws ServletException, IOException {
        String name =req.getParameter("name");
        String sex =req.getParameter("sex");
        PrintWriter out =resp.getWriter();
        out.println("<html>");
        out.println("<head><title>Servlet展示页</title></head>");
        out.println("<body>name:" + name + "<br/> sex: " + sex +"</body>");
        out.println("</html>");     
    }
    public static void main(String args[]) {
        System.out.println("test");
    }
   
}


3.xml 配置

<servlet>
    <servlet-name>input</servlet-name>
    <servlet-class>
        cn.edu.jxau.servlet.InputServlet
    </servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>input</servlet-name>
    <url-pattern>/inputForm</url-pattern>
  </servlet-mapping>

在浏览器中地址栏中输入:http://localhost:8080/WebTest/input.html

在表单中填写内容后点提交”,可以看到如下:


图1

如果将input.html中的<formaction="inputForm"method="post">换成<formaction="inputForm"method="get">则,可以看到如下结果


图2

注意地址栏的变化,图2后面跟了表单名和对应的值,而图1中没有。

Get和post方式的应用

作为web应用的用户,并不太愿意让自己提交的数据被别人看到,而如果用get方式,则可以通过地址栏的历史记录被别人看到。所以在web开发中,表单的提交一般用post方式,而不用get方式。

是不是说get方式就没有用武之地了呢?不是的,例如在网页上指定<a href=””>、<frame src=””>的时候,实际上都是默认通过get方式去服务器上取得资源。Get方式的一个优点在于,可以很方便地控制链接的目标地址。

注:当然,现在很多的web程序开发人员都喜欢一种”偷懒”的做法。如果需要同时实现doGet 和doPost方式的Servlet,通常会只在doGet方法中实现处理过程,二在doPost方法直接调用doGet方法。如将InputServlet.java改成如下:

package cn.edu.jxau.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.*;
public class InputServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String name = req.getParameter("name");
		String sex = req.getParameter("sex");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head><title>Servlet 展示页</title></head>");
		out.println("<body> name:" + name + "<br/> sex: " + sex + "</body>");
		out.println("</html>");		
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		doGet(req, resp);
	}
	public static void main(String args[]) {
		System.out.println("test");
	}
	
}


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

doGet与doPost的区别 的相关文章

  • JNA - EnumProcessModules() 未返回所有 DLL?

    我试图从游戏中读取坐标 当我在通过 OpenProcess 接收的 HANDLE 上使用 ReadProcessMemory 以及我在 CheatEngine 中找到的内存时 效果非常好 例如 如果我知道正在运行的进程中的浮点值是0x5AB
  • Java 字符串哈希码缓存

    字符串不变性的优点之一是哈希码缓存以实现更快的访问 在这种情况下 如何处理具有相同哈希码的字符串的缓存 在这种情况下它真的能提高性能吗 在这种情况下 如何处理具有相同哈希码的字符串的缓存 被缓存的是字符串的哈希码 它被缓存在私有的int字符
  • 如何使用retrofit2动态设置超时?

    public class Router private static Retrofit retrofit null public Retrofit getRetrofit if retrofit null OkHttpClient clie
  • 检查发送到网页的请求数

    我正在编写一个 Java 多线程应用程序 它可以访问不同 Web 服务器的数百万个 有时甚至数十亿个 URL 这个想法是检查这些 URL 是否给出有效的 200OK 响应或 404 其他代码 我如何知道我的程序是否不会在他们的服务器上造成高
  • 帮助我避免 JPA、Hibernate 和 MySQL 的连接超时

    我正在使用 JPA Hibernate 作为提供者 Glassfish 和 MySQL 开发中一切都运行良好 但是当我将应用程序部署到测试服务器并让它运行 大部分空闲 过夜时 我通常会在早上遇到这样的情况 2011 03 09T15 06
  • 初始堆大小无效。无法创建Java虚拟机

    我遇到了下一个问题 我尝试通过startup bat手动启动Tomcat 但似乎没有显示任何结果 然后我尝试运行shutdown bat 控制台显示如下 D apache tomcat 7 0 35 bin gt startup bat U
  • 如何使用 Selenium 中的索引切换到窗口

    由于selenium不提供切换到窗口 多个窗口 的方法 但我想使用index html自定义方法来切换到不同的窗口 但下面的代码没有按预期工作 请建议以下方法的最佳实施 public void switchToWindowIndex int
  • java中日期转换dd-MMM-yyyy到dd-MM-yyyy

    在Java中将23 Mar 2011转换为23 03 2011的最简单方法是什么 感谢大家 这似乎解决了这个问题 try Calendar cal Calendar getInstance cal setTime new SimpleDat
  • 使用 Box2d(适用于 Android)进行碰撞检测?

    有人可以解释一下使用 box2d for android 进行碰撞检测的工作原理吗 我无法理解 BBContactListener 以什么方式工作 BBContactListener listener new BBContactListen
  • Java 不可变对象 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在学习不变性的概念 据我了解 一旦创建对象 不可变对象就无法更改其值 但我不明白不可变对象的以下用途 They are 自动是线程
  • Elasticsearch - EdgeNgram + 突出显示 + term_vector = 不好的突出显示

    当我使用带有edgengram min 3 max 7 front term vector with positions offsets的分析器时 文档包含文本 CouchDB 当我搜索 couc 时 我的亮点是 cpu 而不是 couc
  • Java LRU 缓存使用 LinkedList

    堆栈溢出的新手 所以请不要介意我以菜鸟的方式问这个问题 我正在尝试使用链表实现 LRU 缓存 我在这里看到了使用 linkedHashMap 和其他数据结构的其他实现 但对于这种情况 我正在尝试使用链表创建最佳优化版本 正如我在技术期间被问
  • 春季MVC。方法参数字段的默认值

    我有一个带有方法测试的简单控制器 RequestMapping produces application json ResponseBody public HttpEntity
  • 如何在Java中模拟引用传递?

    我是一个十足的 Java 菜鸟 我知道 Java 将所有参数视为按值传递 并且还有其他几个线程人们对此进行了解释 例如 在 C 中我可以这样做 void makeAThree int n n 3 int main int myInt 4 m
  • javax.xml.bind.JAXBException: 类 *** 及其任何超类在此上下文中均未知

    我正在尝试通过 REST Web 服务传递对象 以下是我的课程 使用一些示例代码解释了我需要的功能 Rest Web 服务类方法 POST Path find Consumes MediaType APPLICATION FORM URLE
  • Java 验证日期为 yyyyMMddHHmmss

    我想在java中验证给定的日期格式为yyyyMMddHHmmss 状况 应符合格式 yyyyMMddHHmmss 它应该验证当前日期 它应该验证与当前小时有 3 小时或 3 小时差异的小时数 如果满足所有三个条件 Java 方法应返回 tr
  • 更新分页。是否可以?

    他们是否存在一些方法来处理更新分页 例如我有 100 行类型 Id private Integer id Column private boolean flag Column private Date last 一开始它们看起来像 id f
  • Struts2中的变量声明

    Struts2中如何声明变量并为该变量赋值 使用设置标签
  • Lucene/Hibernate 搜索锁定异常

    我使用 Hibernate Search 在 Web 应用程序上索引和全文搜索项目 没有问题 来自我的 pom xml
  • Java 可变 BigInteger 类

    我正在使用 BigIntegers 进行计算 该计算使用一个调用 multiply 大约 1000 亿次的循环 并且从 BigInteger 创建新对象使其非常慢 我希望有人编写或找到了 MutableBigInteger 类 我在 jav

随机推荐

  • oracle归档空间满且启动报错总结

    oracle归档空间满且启动报错总结 今天oracle数据库归档日志过满导致oracle数据库挂掉 解决思路 删除归档日志 看oracle能否可用 如果不可用重启oracle数据库 并把归档关掉 测试库 生产库一定要起归档 在重启数据库的过
  • WIN32 消息总结

    1 键盘消息 键盘会产生如下两种消息 1 按键消息 消息分类 WM KEYDOWN WM KEYUP WM SYSKEYDOWN 系统按键按下时产生 如ALT F10 WM SYSKEYUP 参数 WPARAM 按键的vritual key
  • 【JMeter-Hive】使用JMeter对Hive的查询性能进行压测

    JMeter Hive 使用JMeter对Hive的查询性能进行压测 1 生成测试数据 2 查询性能压测 2 1 创建线程用户并指定参数配置 2 2 创建JDBC Connection Configuration并配置连接信息 2 3 导入
  • C语言题目代码总结解析

    目录 简单版三子棋实现 简单的扫雷的实现 简单的通讯录实现 最大公约数 辗转相除法 判断一个数是否是素数 二分查找 有序数组查找 递归实现字符串反转 递归实现汉诺塔问题 青蛙跳台阶问题 几个字符串库函数的实现 qsort的冒泡实现版本 杨式
  • 用代码写出浪漫__合集(python、matplotlib、Matlab、java绘制爱心、玫瑰花、前端特效玫瑰、爱心)

    活动地址 CSDN21天学习挑战赛 用代码写出浪漫合集 爱心 玫瑰花 本文目录 一 前言 二 用python matplotlib Matlab java绘制爱心 1 爱心图形1 弧线型 显示的文字写在代码里 2 爱心图形2 直线型 显示的
  • openeuler 欧拉操作系统的几个图形界面安装方法

    欧拉操作系统openeuler 安装的时候默认是不带图形界面的 安装完成后如果要使用图形需要手工往系统里面补 目前为止最新的21 09版本ISO安装完后在线源配置里面EPOL源路径是错误的 需要手工修改一下路径 否则是无法更新源里面的软件包
  • let和const 和var 的区别

    1 let和const是什么 声明变量或声明常量l var声明变量 let 代替var 声明变量 const声明常量constant 2 let和const的用法 var一样 var username Alex let age 18 con
  • 图解LeetCode14:最长公共前缀(递归,二分查找)

    LeetCode14 最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀 如果不存在公共前缀 返回空字符串 示例 输入 strs flowers flow flight 输出 fl 输入 strs dog racecar car 输
  • Linux的shell入门和版本控制(五)

    0 前言 这部分简单介绍了Linux系统中的shell编程 1 服务监听 在Linux中的服务监听 相当于在windows中的任务管理器 常用指令 示例一 查询进程 ps aux grep 要查询的程序名 这样查询会连带这条查询指令的进程一
  • 嵌入式Linux开发: 从0开始编译并启动ARM Linux内核(全志)

    引言 最近看见很多小白不会编译Linux内核 自己瞎折腾走了很多弯路 本文章将会以Orange Pi 香橙派 Zero开发板为例 带您成功编译内核并在板子上启动它 准备 您需要一台Ubuntu PC 版本最好在20 04以上 一个可以用的U
  • TCGA数据库详解

    TCGA The cancer genome atlas 癌症基因组图谱 由 National Cancer Institute NCI 美国国家癌症研究所 和 National Human Genome Research Institut
  • C#位运算示例

    在C 中可以对整型运算对象按位进行逻辑运算 按位进行逻辑运算的意义是 依次取被运算对象的每个位 进行逻辑运算 每个位的逻辑运算结果是结果值的每个位 C 支持的位逻辑运算符如表2 9所示 运算符号 意义 运算对象类型 运算结果类型 对象数 实
  • 即将成为史上最具用户体验的Hexo+GitHub Pages搭建博客的教程(持续更新中)

    前言 网上关于Hexo Github Pages搭建博客的教程很多 但是参阅很多博文 都是表达不够清晰 绕来绕去 基于此 我想以一个初来者的角度写一篇尽可能靠谱的教程 方便大家快速搭建好 大致流程 搭建Node js环境 搭建Git环境 搭
  • c++ 习题(1)

    1 输入一个正整数n 计算下式的和求e的值 保留4位小数 e 1 输入输出示例 Input n 10 e 2 7183 if 1 include stdio h double facabular int n int sum 1 i for
  • 如何在C语言循环里实现多线程,如何用C语言实现多线程

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Windows操作系统 C语言实现多线程 include include DWORD APIENTRY ThreadOne LPVOID threadArg printf 线程开始啦 参数是 s
  • 买车注意事项

    YETI 2016创行 车 保险 税 上牌 17 2w 其中裸车15 76w GS4 手动豪华 我的手动豪华117500包上牌 交强险 购置税 全车膜 脚垫 侧蹋 行车记录仪 发动机护板 挡泥板 座套 方向盘套 前两次首保免费 10万公里机
  • Git背后的设计理念

    首先要清楚Git版本管理中提交的概念 通过按行对比 line diff 将有差异的部分作为增量补丁 使用git add添加到暂存区里的每一个文件都会由按行对比得到他们的增量补丁 而使用git commit将暂存区里的所有文件的增量补丁合并起
  • 泛型知识点总结

    目录 泛型的概念 泛型的底层实现 什么是类型擦除 Java编译器具体是如何擦除泛型的 对于泛型的理解 泛型的使用注意点 零散知识点1 泛型的使用注意点 零散知识点2 泛型方法 类型变量的限定 泛型的概念 泛型的底层实现 我们知道 Java有
  • Java项目结构的总体理解

    本文简单记录了一下自己对java项目各个层的理解 清理笔记 hhh 新版编辑器既好用又不好用 哎 第一次发布的序号都被打乱了 参考 作者 码农BookSea 原文链接 DAO层和Service层的究极理解 这波我在大气层 码农BookSea
  • doGet与doPost的区别

    在使用表单提交数据到服务器的时候有两张方式可共选择 一个是post一个是get 可在