Servlet中doGet和doPost的区别

Servlet中doGet和doPost的区别

        Servlet方法只定义了一个服务方法——service,HttpServlet类实现了该方法,并且要求调用doGet或者doPost方法其中的一个。doGet处理get请求,doPost处理post请求。在项目中新建一个Servlet类时,默认继承HttpServlet类,系统会自动生成构造方法、doGet和doPost方法。如下图:
在这里插入图片描述
        当客户端发出请求时,调用service方法并传递一个请求和响应对象。Servlet首先判断该请求是post还是get操作,然后再调用doPost和doGet方法中的一个,doPost和doGet方法都接收请求(HttpServletRequest)和响应(HttpServletResponse)。

get和post方法的区别:get方法只有一个参数流,参数附在URL后,大小个数有严格限制且只能是字符串。post方法的参数是通过另外的流传递的,不通过URL,所以传递的参数可以很大,也可以传递二进制数据,比如文件的上传。

        在Servlet开发中,以doPost方法和doGet方法分别处理get和post方法,另外还有一个doService()方法,它是一个调度方法,当一个请求发生时,首先执行doService()方法,不管是get还是post。

        service()是在javax.servlet.Servlet接口中定义的,在javax.servlet.GenericServlet中实现了这个接口,二doPost和doGet则是在javax.servlet.http.HttpServlet中实现的,javax.servlet.http.HttpServlet是javax.servlet.GenericServlet的子类。所以可以这样理解其实所有的请求均首先由service()进行处理,而在javax.servlet.http.HttpServlet的service()方法中,主要做的事情就是判断请求类型是get还是post,然后调用对应的doGet和doPost方法。

doGet处理get请求        doPost处理post请求        doPut处理put请求        doDelete处理delete请求        doHead处理head请求        doOptions处理options请求        doTrace处理trace请求

        通常情况下,一般的开发只需要关心doGet和doPost方法,其他方法需要非常熟悉HTTP编程,因此这些方法被认为是高级方法,而通常情况下,我们实现的servlet都是从HttpServlet扩展而来的。在servlet中doPost方法里面其实有调用doGet方法,所以在创建servlet时可以不要doPost方法,但是在大型项目涉及密码的传送时doPost方法更安全一些,通常情况下二者之间没什么区别。

总结以下5个方面来区别post和get:
1>客户端(一般指浏览器)生成的方式
        get:form表单中method的属性为get时;或者直接在URL地址栏中需要传递参数时,在URL后面拼接"?name=张三&age=18"这样的查询参数字符串。
        post:form表单中method的属性为post。
2>客户端数据传送方式
        get:表单数据存放在URL地址后面,所有get方式提交时HTTP中没有消息体。
        post:表单数据存放在HTTP协议的消息体中以实体的方式传送到服务器。
3>服务器获取数据方式
        get:服务器采用Servlet中的doGet来获取变量的值。
        post:服务器采用Servlet中的doPost来获取变量的值。
4>传输的数据量
        get:安全性差,因为是直接将数据显示在地址栏中,浏览器有缓冲,可以记录用户信息,所以安全性低。
        post:安全性高,因为post方式提交数据时采用的是HTTP post机制,是将表单中的字段与值放置在HTTP HEAD内一起传送到ACTION所指的URL中,用户看不见,所以安全性高。

文章转载自:https://zhidao.baidu.com/question/1110093268342672019

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值