JAVA-EE分析Http请求协议GET和POST方法的具体应用------计算机网络经典

Post和Get因为组成信息都是以name=value&name=value的形式
所以我们可以通过split的方式
s.split("&")拿到name=value
然后把数据包装到java对象当中,这样就得到了这个特殊的map信息集合
name以form表单为例,input标签的name就是name
value同理,input标签的value就是这个value
一个在URI内存在,一个是请求体内存在
get请求发送的字符串长度有限制,只能发送普通的字符串,不同的浏览器限制不同,这个没有明确的规范
get请求无法发送大数据量
get请求比较适合从服务器端获取数据
post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息,视频,声音图片等
post请求可以发送大数据量,理论上没有长度限制(文件上传使用)
post比较适合发送数据到服务器
get请求是安全的,因为get请求是从服务器获取数据,不会对服务器造成威胁(get本身是安全的,因为不会注入信息给服务器)
post请求是危险的,因为post请求是向服务器提交数据,如果这些数据通过后门的形式进入服务器当中,服务器是很危险的
另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截监听post请求
get请求支持缓存,post请求不支持缓存,网页第一次加载较慢,第二次较快,第一次访问图片时,效率是比较低的,因为数据要从服务器过来
第二次访问从浏览器的缓存取,URL地址相同的情况下,会直接取出资源,如何一个get请求都会被浏览器缓存,一个get路径对应一个资源
get的目的就是为了从服务器拿去一个资源到本地,本地有就可以直接访问了
只要每一次的get请求路径不同就会让它无法走缓存了,比如说在get的uri资源名后面加上系统毫秒数也就是时间戳
可以在路径后面添加一个每时每刻都在变化的时间戳,这样每次访问的请求路径都不一样,就不走缓存了
post是用来修改服务器端的资源的,所以它不支持缓存,因为这个缓存没有意义,所以服务器响应的结果就不会被浏览器缓存起来
所以我们的判断标准就是,我们实现从服务器端获取一个数据(get)还是发送一个数据(post)
大部分的form表单都是post,因为这些form表单都是为了收集用户数据,一般都是要回传给服务器的
而且表单内若有敏感信息,get请求会把敏感信息回显到地址栏上URL内
做文件上传一定是post(get发不了大文件或是非普通文本)
Post和Get因为组成信息都是以name=value&name=value的形式
所以我们可以通过split的方式
s.split("&")拿到name=value
然后把数据包装到java对象当中,这样就得到了这个特殊的map信息集合
name以form表单为例,input标签的name就是name
value同理,input标签的value就是这个value
一个在URI内存在,一个是请求体内存在
get请求发送的字符串长度有限制,只能发送普通的字符串,不同的浏览器限制不同,这个没有明确的规范
get请求无法发送大数据量
get请求比较适合从服务器端获取数据
post请求可以发送任何类型的数据,包括普通字符串,流媒体等信息,视频,声音图片等
post请求可以发送大数据量,理论上没有长度限制(文件上传使用)
post比较适合发送数据到服务器
get请求是安全的,因为get请求是从服务器获取数据,不会对服务器造成威胁(get本身是安全的,因为不会注入信息给服务器)
post请求是危险的,因为post请求是向服务器提交数据,如果这些数据通过后门的形式进入服务器当中,服务器是很危险的
另外post是为了提交数据,所以一般情况下拦截请求的时候,大部分会选择拦截监听post请求
get请求支持缓存,post请求不支持缓存,网页第一次加载较慢,第二次较快,第一次访问图片时,效率是比较低的,因为数据要从服务器过来
第二次访问从浏览器的缓存取,URL地址相同的情况下,会直接取出资源,如何一个get请求都会被浏览器缓存,一个get路径对应一个资源
get的目的就是为了从服务器拿去一个资源到本地,本地有就可以直接访问了
只要每一次的get请求路径不同就会让它无法走缓存了,比如说在get的uri资源名后面加上系统毫秒数也就是时间戳
可以在路径后面添加一个每时每刻都在变化的时间戳,这样每次访问的请求路径都不一样,就不走缓存了
post是用来修改服务器端的资源的,所以它不支持缓存,因为这个缓存没有意义,所以服务器响应的结果就不会被浏览器缓存起来
所以我们的判断标准就是,我们实现从服务器端获取一个数据(get)还是发送一个数据(post)
大部分的form表单都是post,因为这些form表单都是为了收集用户数据,一般都是要回传给服务器的
而且表单内若有敏感信息,get请求会把敏感信息回显到地址栏上URL内
做文件上传一定是post(get发不了大文件或是非普通文本)
package com.powernode.javaweb.servlet;

import jakarta.servlet.*;
import jakarta.servlet.annotation.*;

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

@WebServlet(name = "GetServlet", value = "/GetServlet")
public class GetServlet extends GenericServlet
{
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
    {
        //响应内容到浏览器
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.println("<!DOCTYPE html>\n" +
                "<html lang=\"en\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "  <h1>Get</h1>\n" +
                "</body>\n" +
                "</html>");
    }
}

package com.powernode.javaweb.servlet;

import jakarta.servlet.*;
import jakarta.servlet.annotation.*;

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

@WebServlet(name = "GetServlet", value = "/GetServlet")
public class GetServlet extends GenericServlet
{
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
    {
        //响应内容到浏览器
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.println("<!DOCTYPE html>\n" +
                "<html lang=\"en\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "  <h1>Get</h1>\n" +
                "</body>\n" +
                "</html>

package com.powernode.javaweb.servlet;

import jakarta.servlet.*;
import jakarta.servlet.annotation.*;

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

@WebServlet(name = "PostServlet", value = "/PostServlet")
public class PostServlet extends GenericServlet
{
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
    {
        //响应内容到浏览器
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.println("<!DOCTYPE html>\n" +
                "<html lang=\"en\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "  <h1>Post</h1>\n" +
                "</body>\n" +
                "</html>");
    }
}

package com.powernode.javaweb.servlet;

import jakarta.servlet.*;
import jakarta.servlet.annotation.*;

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

@WebServlet(name = "PostServlet", value = "/PostServlet")
public class PostServlet extends GenericServlet
{
    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException
    {
        //响应内容到浏览器
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter writer = response.getWriter();
        writer.println("<!DOCTYPE html>\n" +
                "<html lang=\"en\">\n" +
                "<head>\n" +
                "    <meta charset=\"UTF-8\">\n" +
                "    <title>Title</title>\n" +
                "</head>\n" +
                "<body>\n" +
                "  <h1>Post</h1>\n" +
                "</body>\n" +
                "</html>");
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>get</h1>
    <form action="/GetServlet" method="get">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="submit">
    </form>
    <h1>post</h1>
    <form action="/PostServlet" method="post">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="submit">
    </form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>get</h1>
    <form action="/GetServlet" method="get">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="submit">
    </form>
    <h1>post</h1>
    <form action="/PostServlet" method="post">
        username:<input type="text" name="username"><br>
        password:<input type="password" name="password"><br>
        <input type="submit" value="submit">
    </form>
</body>
</html>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值