精华内容
下载资源
问答
  • GET和POST区别

    2021-09-27 09:09:15
    get和post区别 1.GET在浏览器回退不会再次请求,POST会再次提交请求 2.GET请求会被浏览器主动缓存,POST不会,要手动设置 3.GET请求参数会被完整保留在浏览器历史记录里,POST中的参数不会 4.GET请求在URL中传送的...

    get和post区别

    1.GET在浏览器回退不会再次请求,POST会再次提交请求
    2.GET请求会被浏览器主动缓存,POST不会,要手动设置
    3.GET请求参数会被完整保留在浏览器历史记录里,POST中的参数不会
    4.GET请求在URL中传送的参数是有长度限制的,而POST没有限制
    5.GET参数通过URL传递,POST放在Request body中
    6.GET参数暴露在地址栏不安全,POST放在报文内部更安全
    7.GET一般用于查询信息,POST一般用于提交某种信息进行某些修改操作
    8.GET产生一个TCP数据包;POST产生两个TCP数据包

    展开全文
  • POST和GET区别

    2021-02-27 20:40:13
    *每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP请求数据响应数据组成,如果请求成功则返回响应的数据。*HTTP-GET以使用MIME类型...

    * 每个HTTP-GET和HTTP-POST都由一系列HTTP请求头组成,这些请求头定义了客户端从服务器请求了什么,而响应则是由一系列HTTP请求数据和响应数据组成,如果请求成功则返回响应的数据。

    * HTTP-GET以使用MIME类型application/x-www-form-urlencoded的urlencoded文本的格式传递参数。Urlencoding是一种字符编码,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。附加参数还能被认为是一个查询字符串。

    * 与HTTP-GET类似,HTTP-POST参数也是被URL编码的。然而,变量名/变量值不作为URL的一部分被传送,而是放在实际的HTTP请求消息内部被传送。

    * GET和POST之间的主要区别

    1、GET是从服务器上获取数据,POST是向服务器传送数据。

    2、在客户端, GET方式在通过URL提交数据,数据在URL中可以看到;POST方式,数据放置在HTML HEADER内提交

    3、对于GET方式,服务器端用Request.QueryString获取变量的值,对于POST方式,服务器端用Request.Form获取提交的数据。

    4、GET方式提交的数据最多只能有1024字节,而POST则没有此限制

    5、安全性问题。正如在(2)中提到,使用 GET 的时候,参数会显示在地址栏上,而 POST 不会。所以,如果这些数据是中文数据而且是非敏感数据,那么使用 GET ;如果用户输入的数据不是中文字符而且包含敏感数据,那么还是使用 POST为好

    * URL的定义和组成

    Uniform Resource Locator 统一资源定位符

    URL的组成部分:http://www.mbalib.com/china/index.htm

    http://:代表超文本传输协议

    www:代表一个万维网服务器

    mbalib.com/:服务器的域名,或服务器名称

    China/:子目录,类似于我们的文件夹

    Index.htm:是文件夹中的一个文件

    /china/index.htm统称为URL路径

    服务器端

    public class LoginAction extendsHttpServlet {/*** Constructor of the object.*/

    publicLoginAction() {super();

    }/*** Destruction of the servlet.
    */

    public voiddestroy() {super.destroy(); //Just puts "destroy" string in log//Put your code here

    }/*** The doGet method of the servlet.

    *

    * This method is called when a form has its tag value method equals to get.

    *

    *@paramrequest the request send by the client to the server

    *@paramresponse the response send by the server to the client

    *@throwsServletException if an error occurred

    *@throwsIOException if an error occurred*/

    public voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {this.doPost(request, response);

    }/*** The doPost method of the servlet.

    *

    * This method is called when a form has its tag value method equals to post.

    *

    *@paramrequest the request send by the client to the server

    *@paramresponse the response send by the server to the client

    *@throwsServletException if an error occurred

    *@throwsIOException if an error occurred*/

    public voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException {

    response.setContentType("text/html;charset=utf-8");

    request.setCharacterEncoding("utf-8");

    response.setCharacterEncoding("utf-8");

    PrintWriter out=response.getWriter();

    String username= request.getParameter("username");

    System.out.println("-username->>"+username);

    String pswd= request.getParameter("password");

    System.out.println("-password->>"+pswd);if(username.equals("admin")&&pswd.equals("123")){//表示服务器端返回的结果

    out.print("login is success!!!!");

    }else{

    out.print("login is fail!!!");

    }

    out.flush();

    out.close();

    }/*** Initialization of the servlet.

    *

    *@throwsServletException if an error occurs*/

    public void init() throwsServletException {//Put your code here

    }

    }

    HTTP-GET方式

    public classHttpUtils {private static String URL_PATH = "http://192.168.0.102:8080/myhttp/pro1.png";publicHttpUtils() {//TODO Auto-generated constructor stub

    }public static voidsaveImageToDisk() {

    InputStream inputStream=getInputStream();byte[] data = new byte[1024];int len = 0;

    FileOutputStream fileOutputStream= null;try{

    fileOutputStream= new FileOutputStream("C:\\test.png");while ((len = inputStream.read(data)) != -1) {

    fileOutputStream.write(data,0, len);

    }

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }finally{if (inputStream != null) {try{

    inputStream.close();

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }if (fileOutputStream != null) {try{

    fileOutputStream.close();

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    }

    }/*** 获得服务器端的数据,以InputStream形式返回

    *@return

    */

    public staticInputStream getInputStream() {

    InputStream inputStream= null;

    HttpURLConnection httpURLConnection= null;try{

    URL url= newURL(URL_PATH);if (url != null) {

    httpURLConnection=(HttpURLConnection) url.openConnection();//设置连接网络的超时时间

    httpURLConnection.setConnectTimeout(3000);

    httpURLConnection.setDoInput(true);//表示设置本次http请求使用GET方式请求

    httpURLConnection.setRequestMethod("GET");int responseCode =httpURLConnection.getResponseCode();if (responseCode == 200) {//从服务器获得一个输入流

    inputStream =httpURLConnection.getInputStream();

    }

    }

    }catch(MalformedURLException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }returninputStream;

    }public static voidmain(String[] args) {//从服务器获得图片保存到本地

    saveImageToDisk();

    }

    }

    HTTP-POST(Java接口)方式

    public classHttpUtils {//请求服务器端的url

    private static String PATH = "http://192.168.0.102:8080/myhttp/servlet/LoginAction";private staticURL url;publicHttpUtils() {//TODO Auto-generated constructor stub

    }static{try{

    url= newURL(PATH);

    }catch(MalformedURLException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }/***@paramparams

    * 填写的url的参数

    *@paramencode

    * 字节编码

    *@return

    */

    public static String sendPostMessage(Mapparams,

    String encode) {//作为StringBuffer初始化的字符串

    StringBuffer buffer = newStringBuffer();try{if (params != null && !params.isEmpty()) {for (Map.Entryentry : params.entrySet()) {//完成转码操作

    buffer.append(entry.getKey()).append("=").append(

    URLEncoder.encode(entry.getValue(), encode))

    .append("&");

    }

    buffer.deleteCharAt(buffer.length()- 1);

    }//System.out.println(buffer.toString());//删除掉最有一个&

    System.out.println("-->>"+buffer.toString());

    HttpURLConnection urlConnection=(HttpURLConnection) url

    .openConnection();

    urlConnection.setConnectTimeout(3000);

    urlConnection.setRequestMethod("POST");

    urlConnection.setDoInput(true);//表示从服务器获取数据

    urlConnection.setDoOutput(true);//表示向服务器写数据//获得上传信息的字节大小以及长度

    byte[] mydata =buffer.toString().getBytes();//表示设置请求体的类型是文本类型

    urlConnection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");

    urlConnection.setRequestProperty("Content-Length",

    String.valueOf(mydata.length));//获得输出流,向服务器输出数据

    OutputStream outputStream =urlConnection.getOutputStream();

    outputStream.write(mydata,0,mydata.length);

    outputStream.close();//获得服务器响应的结果和状态码

    int responseCode =urlConnection.getResponseCode();if (responseCode == 200) {returnchangeInputStream(urlConnection.getInputStream(), encode);

    }

    }catch(UnsupportedEncodingException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }return "";

    }/*** 将一个输入流转换成指定编码的字符串

    *

    *@paraminputStream

    *@paramencode

    *@return

    */

    private staticString changeInputStream(InputStream inputStream,

    String encode) {//TODO Auto-generated method stub

    ByteArrayOutputStream outputStream = newByteArrayOutputStream();byte[] data = new byte[1024];int len = 0;

    String result= "";if (inputStream != null) {try{while ((len = inputStream.read(data)) != -1) {

    outputStream.write(data,0, len);

    }

    result= newString(outputStream.toByteArray(), encode);

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }returnresult;

    }/***@paramargs*/

    public static voidmain(String[] args) {//TODO Auto-generated method stub

    Map params = new HashMap();

    params.put("username", "admin");

    params.put("password", "1234");

    String result= HttpUtils.sendPostMessage(params, "utf-8");

    System.out.println("--result->>" +result);

    }

    }

    HTTP-POST(Apache接口)方式

    public classHttpUtils {publicHttpUtils() {//TODO Auto-generated constructor stub

    }public staticString sendHttpClientPost(String path,

    Mapmap, String encode) {

    List list = new ArrayList();if (map != null && !map.isEmpty()) {for (Map.Entryentry : map.entrySet()) {

    list.add(newBasicNameValuePair(entry.getKey(), entry

    .getValue()));

    }

    }try{//实现将请求的参数封装到表单中,请求体重

    UrlEncodedFormEntity entity = newUrlEncodedFormEntity(list, encode);//使用Post方式提交数据

    HttpPost httpPost = newHttpPost(path);

    httpPost.setEntity(entity);//指定post请求

    DefaultHttpClient client = newDefaultHttpClient();

    HttpResponse httpResponse=client.execute(httpPost);if (httpResponse.getStatusLine().getStatusCode() == 200) {returnchangeInputStream(httpResponse.getEntity().getContent(),

    encode);

    }

    }catch(UnsupportedEncodingException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }catch(ClientProtocolException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }return "";

    }/*** 将一个输入流转换成指定编码的字符串

    *

    *@paraminputStream

    *@paramencode

    *@return

    */

    public staticString changeInputStream(InputStream inputStream,

    String encode) {//TODO Auto-generated method stub

    ByteArrayOutputStream outputStream = newByteArrayOutputStream();byte[] data = new byte[1024];int len = 0;

    String result= "";if (inputStream != null) {try{while ((len = inputStream.read(data)) != -1) {

    outputStream.write(data,0, len);

    }

    result= newString(outputStream.toByteArray(), encode);

    }catch(IOException e) {//TODO Auto-generated catch block

    e.printStackTrace();

    }

    }returnresult;

    }/***@paramargs*/

    public static voidmain(String[] args) {//TODO Auto-generated method stub

    String path = "http://192.168.0.102:8080/myhttp/servlet/LoginAction";

    Map params = new HashMap();

    params.put("username", "admin");

    params.put("password", "123");

    String result= HttpUtils.sendHttpClientPost(path, params, "utf-8");

    System.out.println("-->>"+result);

    }

    }

    展开全文
  • GET和POST区别

    千次阅读 多人点赞 2021-01-06 19:51:59
    你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信喜悦。 你轻轻松松的给出了一个“标准...

    GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。

    最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。

    你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。

    当你在面试中被问到这个问题,你的内心充满了自信和喜悦。

    你轻轻松松的给出了一个“标准答案”:

    1. GET在浏览器回退时是无害的,而POST会再次提交请求。
    2. GET产生的URL地址可以被Bookmark,而POST不可以。
    3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
    4. GET请求只能进行url编码,而POST支持多种编码方式。
    5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
    6. GET请求在URL中传送的参数是有长度限制的,而POST么有。
    7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
    8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    9. GET参数通过URL传递,POST放在Request body中。

    (本标准答案参考自w3schools)

    “很遗憾,这不是我们要的回答!”

    请告诉我真相。。。

    如果我告诉你GET和POST本质上没有区别你信吗? 

    让我们扒下GET和POST的外衣,坦诚相见吧!

    GET和POST是什么?HTTP协议中的两种发送请求的方法。

    HTTP是什么?HTTP是基于TCP/IP的关于数据如何在万维网中如何通信的协议。

    HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。你要给GET加上request body,给POST带上url参数,技术上是完全行的通的。 

    那么,“标准答案”里的那些区别是怎么回事?


    在我大万维网世界中,TCP就像汽车,我们用TCP来运输数据,它很可靠,从来不会发生丢件少件的现象。但是如果路上跑的全是看起来一模一样的汽车,那这个世界看起来是一团混乱,送急件的汽车可能被前面满载货物的汽车拦堵在路上,整个交通系统一定会瘫痪。为了避免这种情况发生,交通规则HTTP诞生了。HTTP给汽车运输设定了好几个服务类别,有GET, POST, PUT, DELETE等等,HTTP规定,当执行GET请求的时候,要给汽车贴上GET的标签(设置method为GET),而且要求把传送的数据放在车顶上(url中)以方便记录。如果是POST请求,就要在车上贴上POST的标签,并把货物放在车厢里。当然,你也可以在GET的时候往车厢内偷偷藏点货物,但是这是很不光彩;也可以在POST的时候在车顶上也放一些数据,让人觉得傻乎乎的。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。

    但是,我们只看到HTTP对GET和POST参数的传送渠道(url还是requrest body)提出了要求。“标准答案”里关于参数大小的限制又是从哪来的呢?

    在我大万维网世界中,还有另一个重要的角色:运输公司。不同的浏览器(发起http请求)和服务器(接受http请求)就是不同的运输公司。 虽然理论上,你可以在车顶上无限的堆货物(url中无限加参数)。但是运输公司可不傻,装货和卸货也是有很大成本的,他们会限制单次运输量来控制风险,数据量太大对浏览器和服务器都是很大负担。业界不成文的规定是,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。超过的部分,恕不处理。如果你用GET服务,在request body偷偷藏了数据,不同服务器的处理方式也是不同的,有些服务器会帮你卸货,读出数据,有些服务器直接忽略,所以,虽然GET可以带request body,也不能保证一定能被接收到哦。

    好了,现在你知道,GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。 

    你以为本文就这么结束了?

    我们的大BOSS还等着出场呢。。。

    这位BOSS有多神秘?当你试图在网上找“GET和POST的区别”的时候,那些你会看到的搜索结果里,从没有提到他。他究竟是什么呢。。。

    GET和POST还有一个重大区别,简单的说:

    GET产生一个TCP数据包;POST产生两个TCP数据包。

    长的说:

    对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);

    而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

    也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。

    因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?

    1. GET与POST都有自己的语义,不能随便混用。

    2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。

    3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

    现在,当面试官再问你“GET与POST的区别”的时候,你的内心是不是这样的?

    结束!!!

     

    上一篇:【全栈最全Java框架总结】SSH、SSM、Springboot

    下一篇:SpringCloud学习总纲

     

    尊重原创,转载自:https://www.cnblogs.com/logsharing/p/8448446.html

     

     

     

    展开全文
  • GET和POST请求的本质区别是什么? 文章目录前言一、我的答案二、简单介绍下GET和POST建立项目1.GET方式2.POST方式本文重点然后接下来才是我想说的也是看到wx中某个博主猿某某说的:GET产生一个TCP数据包POST产生两个...

    GET和POST请求的本质区别是什么?

    前言

    最近在公司实习工作的同时了解研究了下TCP/IP协议,对之前面试时的问题:GET和POST有何区别?对之前我一个相对标准的答案产生了怀疑。

    提示:以下是本篇文章正文内容,以后的文章我会尽量标准点

    一、我的答案

    GET和POST有何区别?

    • GET在浏览器回退时候无害,而POST会再次提交请求。
    • GET产生的URL地址可以被BookMark,而POST不可以
    • GET请求会被浏览器主动cache,而POST不会,除非手动设置
    • GET请求只能进行url编码,而POST支持多种编码方式
    • GET请求参数会被完整保留在浏览器历史记录中,而POST中的参数不会被保留
    • GET请求在URL中传送的参数长度是有限的,而POST没有
    • 对参数的数据类型,GET只接受ASCLL字符,而POST没有限制
    • GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息
    • GET参数通过URL传递,POST放在Request body中
      当时回答的可能没这么多,但是有其中两三条,此答案应该算是“标准答案”----如果不深入的话

    二、简单介绍下GET和POST

    在介绍GET和POST之前我们首先来了解一下HTTP——超文本传输协议(HTTP)的设计目的是保证客户端与服务器之间的通信。
    HTTP 的工作方式是客户端与服务器之间的请求-应答协议。
    web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。
    举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。

    在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。
    GET - 从指定的资源请求数据。
    POST - 向指定的资源提交要被处理的数据。

    然后我们分别来使用一下GET和POST

    建立项目

    我们使用的软件是IDEA
    首先 File -> New -> Project
    在这里插入图片描述
    点击Maven
    选中 Create from archetype
    选中找到第二个尾部是webapp
    用Maven管理
    然后按照图中设置
    文件目录设置
    next
    在这里插入图片描述
    Finish

    右键main 选择new -> Directory
    在这里插入图片描述

    新建Java和resources
    在这里插入图片描述
    在pom.xml中引入Spring模块

     <!--    spring-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.2.7.RELEASE</version>
        </dependency>
        <!--    spring-web-->
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.2.7.RELEASE</version>
        </dependency>
    
    

    在这里插入图片描述
    新建视图解析器
    在resources右键 New -> XML Configuration File ->Spring Config
    名字命名为 springmvc.xml (个人习惯)
    在这里插入图片描述
    由于本次主要目的不是新建一个Spring项目,所以视图解析器中内容直接给出

    <?xml version="1.0" encoding="UTF-8"?>
    <!--视图解析器-->
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
        <!--设置自动扫描的包-->
        <context:component-scan base-package="com.test.getpost.handler"></context:component-scan>
        <!--    配置视图解析器-->
        <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <!--        前缀-->
            <property name="prefix" value="/WEB-INF/views/"></property>
            <!--        后缀-->
            <property name="suffix" value=".jsp"></property>
    
        </bean>
        <!--配置处理静态资源-->
        <mvc:default-servlet-handler/>
        <!-- 配置了处理静态资源之后,Handler的方法上的@RequestMapping失效,   -->
        <mvc:annotation-driven></mvc:annotation-driven>
    </beans>
    

    视图解析器截图
    在webapp/WEB-INF目录中找到web.xml,没有的话就新建一个
    在这里插入图片描述
    同样的直接给出内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <!--前端控制器-->
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
      <!--    使用Spring的过滤器解决POST请求中文乱码问题-->
      <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
          <param-name>forceRequestEncoding</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>forceResponseEncoding</param-name>
          <param-value>true</param-value>
        </init-param>
      </filter>
      <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    
    
      <!--  配置前端控制器 DispatcherServlet-->
      <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
    
          <param-name>contextConfigLocation</param-name>
          <!--        SpringMVC配置文件的路径-->
          <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <!--   配置映射的请求地址,设置为 / -->
        <!--        此处【/】 只处理除.jsp以外的文件-->
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    
    
    </web-app>
    
    

    我们测试一下,
    如图在目录中新建一个控制器目录——handler,新建一个testHandler.java
    在这里插入图片描述
    写入代码

    @Controller
    public class testHandler {
        @RequestMapping("/hello")
        public String testHelloWorld(){
            System.out.println("Hello SpringMVC!");
            return "success";
        }
    }
    

    在index.jsp中新建一个超链接,同时在WEB-INF中新建一个文件views/success.jsp
    在这里插入图片描述
    在这里插入图片描述

    配好tomcat服务器(过程略,有空写一个操作步骤,鸽~),运行

    在这里插入图片描述

    点击超链接
    在这里插入图片描述
    项目搞定了

    下面我们就来看看GET和POST方式,为了方便我们都使用From
    先随意新建两个实体类,代码
    在这里插入图片描述

    package com.test.getpost.beans;
    //员工
    public class Employee {
        private Integer Id; //id
        private String Last_Name; //姓名
        private String Email; //邮箱
        private Department Dept; //部门
    
    //    无参构造器
        public Employee(){
            super();
        }
    //有参数构造器
        public Employee(Integer id, String last_Name, String email, Department dept) {
            super();
            Id = id;
            Last_Name = last_Name;
            Email = email;
            Dept = dept;
        }
    
        public Integer getId() {
            return Id;
        }
    
        public void setId(Integer id) {
            Id = id;
        }
    
        public String getLast_Name() {
            return Last_Name;
        }
    
        public void setLast_Name(String last_Name) {
            Last_Name = last_Name;
        }
    
        public String getEmail() {
            return Email;
        }
    
        public void setEmail(String email) {
            Email = email;
        }
    
        public Department getDept() {
            return Dept;
        }
    
        public void setDept(Department dept) {
            Dept = dept;
        }
    
        @Override
        public String toString() {
            return "Employee{" +
                    "Id=" + Id +
                    ", Last_Name='" + Last_Name + '\'' +
                    ", Email='" + Email + '\'' +
                    ", Dept=" + Dept +
                    '}';
        }
    }
    
    
    package com.test.getpost.beans;
    //部门
    public class Department {
        private Integer Id;
        private String Dept_Name;
    
        public Integer getId() {
            return Id;
        }
    
        public void setId(Integer id) {
            Id = id;
        }
    
        public String getDept_Name() {
            return Dept_Name;
        }
    
        public void setDept_Name(String dept_Name) {
            Dept_Name = dept_Name;
        }
    
        @Override
        public String toString() {
            return "Department{" +
                    "Id=" + Id +
                    ", Dept_Name='" + Dept_Name + '\'' +
                    '}';
        }
    }
    
    

    1.GET方式

    在index.jsp上新建一个表单,
    在这里插入图片描述

    <form action="${pageContext.request.contextPath}/testPOJO" method="get">
        员工工号:<input type="text" name="Id"><br>
        员工姓名:<input type="text" name="Last_Name"><br>
        员工邮箱:<input type="text" name="Email"><br>
        部门编号:<input type="text" name="Dept.Id"><br>
        部门名称:<input type="text" name="Dept.Dept_Name"><br>
        <input type="submit" value="Test POJO">
    </form>
    

    在testHandler中添加代码
    在这里插入图片描述

    @RequestMapping("/testPOJO")
        public String testPOJO(Employee employee) {
            System.out.println("信息:" + employee);
            return "success";
        }
    

    运行:
    在这里插入图片描述
    点击提交Test POJO
    在这里插入图片描述

    2.POST方式

    将index.jsp中的from代码中的method="get"改为method=“post”
    在这里插入图片描述
    再次运行
    在这里插入图片描述

    单独的从导航栏上来看,我们之前的回答好像是没有毛病,但是我们如果更加深层次的扒一扒,我们把GET和POST本质拿出来看看。

    本文重点

    首先我们应该明确一点GET和POST本质没有区别,上面也说了,GET和POST是HTTP协议中的两种发送请求的方法。 HTTP是什么?
    HTTP是基于TCP/IP的关于数据在万维网中如何通信的协议。HTTP的底层是TCP/IP,所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接,GET和POST能做的事情完全一样,你要给GET加上request
    body,给POST带上url参数,技术上是完全可以的。 那么上述答案中的两者区别是怎么回事呢?
    在万维网的世界中,HTTP协议像是一种规则,给TCP运输数据设置了好几个服务类别,有GET、POST、PUT、DELETE等等,HTTP规定,当执行GET时候,要给设置GET标签,就是上述例子中的method=“get”,而且要求把传送的数据放在URL中,方便记录。而POST请求,就需要设置method=“post”,并且不需要显示数据在url中。当然,如果你是好事者,你可以在用GET的时候,把数据不放到url中,也可以在使用POST时候,把数据显示到url中(具体操作:自行百度,我懒 ~ ~)
    HTTP只是一个准则,TCP才是GET和POST怎么实现的基本,但是我们只看到HTTP对GET和POST参数的传送渠道(url还是request
    body)提出了要求。 那么最开始我们说的关于参数有限又是怎么来的呢?
    在万维网中,不同的浏览器:发起http请求和服务器:接受http请求,就是不同的运输公司,虽然原则上url可以无限的放资源数据。数据量太大对浏览器和服务器都是很大的负担和风险,所以需要限制单次数量节约资源和减低风险。业界不成文规定,(大多数)浏览器通常都会限制url长度在2K字节,(大多数)服务器最多处理64K的url,超过的部分,看着办吧。。。。
    同时如果你用了GET在request body中偷偷藏了数据,不同的服务器的处理方式也是不同的,有些服务器会帮你读出数据,有的服务器会忽略,所以,上面的一种假想型操作我不想尝试。
    好了,现在我们得出结论,GET和POST本质上就是TCP链接没区别,但是由于HTTP规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同。还没完!!!

    然后接下来才是我想说的也是看到wx中某个博主猿某某说的:

    很多地方都不会说到
    GET和POST有一个重大区别:

    GET产生一个TCP数据包
    POST产生两个TCP数据包

    长一点的解释:

    • 对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
    • 而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 返回数据。(有点像 3次握手 那个东西,没事可以看看,有些面试为了提升自己面试B格会问问这个问题,我暂时还没遇到过,嘿嘿)
      也就是说,GET只需要跑一趟就把货送到了,而POST需要跑两趟,首先先过去和服务器说一声,我要来送货,你准备一下,然后回头把货送回去。

    因为POST需要两步,时间上消耗的多一些,看起来好像GET比POST更有效,因此Yahoo团队有推荐使用GET代替POST来优化网站,但是这是一个巨大的坑,why?

    1. GET和POST都有自己的语义,不能随便混用
    2. 据研究,在网络环境好的情况下,发一次包和发两次包基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
    3. 并不是所有的浏览器都会在POST中发送两次包,Fixfox就只发送一次。

    总结

    以上就是今天讲述的内容,最近也是了解了相关方面的知识做个分享,为以后面试或者项目设计带来思路。
    展开全文
  • 网页提交方法get post 区别 get:请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效 post:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据...
  • ajax请求中:get和post区别

    千次阅读 2021-03-21 23:12:15
    1、get是把参数数据队列加到提交表单的action属性所指的URL中,值表单内各个字段一一对应,在URL中可以看到。 2、post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML header内一起传送到action属性所指...
  • Get请求和Post请求,本质上没有什么区别 此时你可能一脸懵逼,没有区别,干嘛要问,很多时候就是看你能不能理解其本质上的无区别日常表现中的有区别。 首先,来看下日常表现出的有区别,这种区别有很多,...
  • POST GET区别

    千次阅读 2021-02-28 13:59:32
    1.POST 和GET本质都是一样一样的。 2.POST和GET都是HTTP请求的基本方法。 3.区别主要有以下几个: 3-1 GET请求在浏览器刷新或者回退的时候是无害的。POST的话数据会被重新提交。 3-2 GET可以被书签收藏,POST不行 3-...
  • 一、GET和POST两种基本请求方法的区别 首先:你肯定知道get和post是http请求的两种方式 直观区别: 最直观的区别肯定是get吧参数写在URL中,post通过request body 传递参数(也就是GET把参数放在URL里面,而POST...
  • get方法和post方法的区别和联系

    千次阅读 2021-04-07 16:18:10
    get在浏览器回退时是无害的,但是post会再次提交请求; get请求会被浏览器主动缓存,但是post不会,除非手动设置; get请求只能进行URL编码,但是post支持多种编码方式; get请求的参数会保存在浏览器的历史记录中。...
  • HTTP定义了与服务器交互的不同方法(Method),基本方法有4种,分别是GETPOST、PUTDELETE。 怎么理解呢?url地址用于描述一个网络上的资源,而http中的getpost、putdelete...那么,GET方式和POST方式有什么
  • 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。 当你在面试中被问到这个问题,你的内心充满了自信喜悦 你轻轻松松的给出了一个“标准答案”...
  • get请求: axios({ url: "http://localhost:9090/api/image/", method: "get", params: params }) post请求: axios({ url: "http://localhost:9090/api/image/", method: "post",
  • http中get和post区别及使用场景 区别 get和post是http协议中的两种请求方式,http是基于tcp/ip的协议。 按照约定:get方法的参数在URL中...但是get和post还有一个区别get产生一个tcp数据包,post产生两个数据包,
  • Html中Post和Get区别

    2021-04-17 18:54:58
    Html中Post和Get区别: 相同点: 都向服务器提交数据,并都会从服务器获取数据; 区别: a. get是下载,post是上传; b. 传送方式:get通过地址栏传输,post通过报文传输; c. 传送长度:get有长度限制[受限于URL-...
  • this.$http.post('login',this.form); this.$http.post('login',this.form);
  • get post 信息获取(URL传递参数)发送信息的数量限制在2000个字符 传送的数据量较小,不能大于2KB 传送的数据量较大,一般被默认为不受限制 从服务器上获取数据 向服务器传送数据 参数数据队列加到提交...
  • 接口请求方式getpost区别简述

    千次阅读 2021-11-10 22:39:48
    1.get请求没有post请求安全,因为get请求的参数是放在URL中的。post请求的参数是放在body中的。 2.get请求能够被缓存,而post请求不能够被缓存。 3.get请求是明文传输,post请求是密文传输。 二、数据传输层面: 1....
  • python爬虫post和get区别:1、get请求的url会附带查询参数,post请求的url不带参数。2、get请求中,查询参数在QueryString里保存;post请求中,查询参数在Form表单里保存。GET请求HTTP默认的请求方法就是GET* 没有...
  • 1.get是从服务器上获取数据,post是向服务器传送数据。 2.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。 3.get安全性非常低,post安全性较高。但是执行效率却比Post方法好。 ...
  • get和post区别

    2021-02-25 15:13:34
    总体来说: http报文层面:get将请求信息放在url,post放在报文体中 数据库层面:get符合幂等性安全性,post不符合 其他层面:get可以被缓存被储存,而post不行 详细:
  • GET和POST的本质区别

    千次阅读 2021-01-05 00:12:58
    - GET在浏览器回退时是无害的,而POST会再次提交请求。 - GET产生的URL地址可以被浏览器添加为书签,而POST不可以。 - GET请求会被浏览器主动缓存,(这里是数据会被前端缓存,当浏览器发了一条请求,会返回数据,...
  • python爬虫post和get有什么不同,区别是什么发布时间:2020-07-20 11:15:41来源:亿速云阅读:64作者:清晨这篇文章将为大家详细讲解有关python爬虫post和get有什么不同,区别是什么,小编觉得挺实用的,因此分享给...
  • GET和POST请求的区别(超详细)

    千次阅读 2021-03-25 21:17:42
    GET和POST请求的区别(超详细) 相信很多小伙伴在面试的过程中,总会被面试官问道:“请你回答一下GET请求和POST请求的区别?” 大家的回答一般都是如下图: 对于有了2年以上开发经验的小伙伴来说,光回答这几点是...
  • 1.get请求一般是去取获取数据(其实也可以提交,...3.get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。 4.get请求可以被缓存,post请求不会被缓存。 5.get请求会被保存在浏览器历史记录当中,p
  • 点击上方Java后端,选择设为星标优质文章,及时送达GET和POST是HTTP请求的两种基本方法,要说它们的区别,接触过WEB开发的人都能说出一二。最直观的区别就是GET把参数包含在...
  • 你可能自己写过无数个GET和POST请求,或者已经看过很多权威网站总结出的他们的区别,你非常清楚知道什么时候该用什么。   当你在面试中被问到这个问题,你的内心充满了自信喜悦。 你轻轻松松的给出了一个...
  • 区别 请求报文不一样:get请求请求体中没有请求...产生tcp数据包数量不一样(重要区别):get产生一个数据包,post产生两个数据包。 原因:对于get请求,浏览器会将http headerdata一起发送出去,服务器响应200 ok(返

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,368,969
精华内容 547,587
关键字:

get和post的区别

友情链接: ESD控制规范.rar