servlet中doGet()和doPost()的用法

转自:https://blog.csdn.net/qq_38963960/article/details/79468182

1、servlet中doGet()和doPost()的用法

一般来说我们是用不到doGet方法的,doGet方法提交表单的时候会在url后边显示提交的内容,所以不安全。而且doGet方法只能提交256个字符(1024字节),而doPost没有限制,因为get方式数据的传输载体是URL(提交方式能form,也能任意的URL链接),而POST是HTTP头键值对(只能以form方式提交)。通常我们使用的都是doPost方法,你只要在servlet中让这两个方法互相调用就行了,例如在doGet方法中这样写

    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        doPost(request,response);
    }

再把业务逻辑直接写在doPost方法中。servlet碰到doGet方法调用直接就会去调用doPost因为他们的参数都一样。而且doGet方法处理中文问题很困难,要写过滤器之类的。

以上from 百度知道 @權寶兒

在网上搜集了一些资料,把两方法的区别整理如下:
get和post是http协议的两种方法,另外还有head, delete等 
这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串。post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。 
在servlet开发中,以doGet()和doPost()分别处理get和post方法。 
首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost()。都会执行这个方法。 
1.doGet
GET调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过HTML、JSP直接访问Servlet的URL时,一般用GET调用。GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来一些问题,比如用户登录,表单里的用户名和密码需要发送到服务器端,若使用Get调用,就会在浏览器的URL中显示用户名和密码。
例:
jsp页代码:

    <form action="/doGet_servlet" method="get">
    ………
    <input type="text" >
    ………
    </form>

servlet代码:

    public class doGet_servlet extends HttpServlet {
      public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
          request.setCaracterEncoding(“gb2312”);//汉字转码
          PrintWriter out = response.getWriter();
          out.println("The Parameter are :"+request.getParameter("name1"));
      }
    }

这样提交表单后,参数会自动添加到浏览器地址栏中,带来安全性问题。

2.doPost
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。
例:
jsp页代码:

    <form action="/doPostt_servlet" method="post">
    ………
    <textarea cols="50" rows="10"></textarea>
    ………
    </form>

servlet代码:

    public class doPostt_servlet extends HttpServlet {
      public void doPost(HttpServletRequest request,HttpServletResponse esponse) throws IOException,ServletException {
          request.setCaracterEncoding(“gb2312”);//汉字转码
          PrintWriter out = response.getWriter();
          out.println("The Parameter are :"+request.getParameter("name2"));
      }
    }

3.可以把方法写在doGet()方法中,在doPost()方法中调用执行,这样,无论你提交的是post还是get方法都可以执行
例如:
jsp页代码:

    <form action="/servlet" method="post">
    ………
    <input type="text" >
    ………
    </form>

servlet代码:

    public class servlet extends HttpServlet {
      public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
          request.setCaracterEncoding(“gb2312”);//汉字转码
          PrintWriter out = response.getWriter();
          out.println("The Parameter are :"+request.getParameter("name1"));
      }

      public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
          this.goGet(request,response);//调用doGet()方法
      }
    }

另外,HttpServlet处理客户端请求方式还有doPut、doDelete、doTrace、doHead、doOptions,但使用的比较少。

2、servlet中doGet()和doPost()的区别

1,生成方式

get方式有四种:1)直接在URL地址栏中输入URL。2)网页中的超链接。3)form中method为get。4)form中method为空时,默认是get提交。

post只知道有一种:form中method属性为post。

2、数据传送方式

get方式:表单数据存放在URL地址后面。所有get方式提交时HTTP中没有消息体。

post方式:表单数据存放在HTTP协议的消息体中以实体的方式传送到服务器。

3、服务器获取数据方式

GET方式:服务器采用request.QueryString来获取变量的值。

POST方式:服务器采用request.Form来获取数据。

4、传送的数据量

GET方式:数据量长度有限制,一般不超过2kb。因为是参数传递,且在地址栏中,故数据量有限制。

POST方式:适合大规模的数据传送。因为是以实体的方式传送的。

5、安全性

GET方式:安全性差。因为是直接将数据显示在地址栏中,浏览器有缓冲,可记录用户信息。所以安全性低。

POST方式:安全性高。因为post方式提交数据时是采用的HTTP post机制,是将表单中的字段与值放置在HTTP HEADER内一起传送到ACTION所指的URL中,用户是看不见的。

6、在用户刷新时

GET方式:不会有任何提示、

POST方式:会弹出提示框,问用户是否重新提交

1. get是从服务器上获取数据,post是向服务器传送数据。

2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。

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

4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。

5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Post数据提交方式;

2、在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式;

Servlet的doGet/doPost 是在 javax.servlet.http.HttpServlet 中实现的

doGet:处理GET请求 
          doPost:处理POST请求 
      当发出客户端请求的时候,调用service 方法并传递一个请求和响应对象。Servlet首先判断该请求是GET 操作还是POST
操作。然后它调用下面的一个方法:doGet 或
doPost。如果请求是GET就调用doGet方法,如果请求是POST就调用doPost方法。doGet和doPost都接受请求(HttpServletRequest)和响应(HttpServletResponse)。

get只有一个流,参数附加在url后,地址行显示要传送的信息,大小个数有严格限制且只能是字符串,大小限制在1024KB。post的参数是通过另外的流传递的, 不通过url,所以可以很大,也可以传递二进制数据,如文件的上传。

get通过URL提交的参数会显示在地址栏中,这在系统的安全方面可能带来问题;post提交的参数不会显示在地址栏中。这样post就可以提高get的安全性能,避免数据的泄露。

当form框里面的method为get时,执行doGet方法,使用get提交就必须在服务器端用doGet()方法接收;当form框里面的method为post时,执行doPost方法,使用post提交就必须在服务器端用doPost()方法接收。

在request请求里面,编码转换;get方法得到的内容每一个都要进行编码转换,而post方法则只要设置request.setCharacterEncoding("UTF-8")就可以,不要再从request得到的每个数据进行编码转换了。

1、安全

GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来问题,例如用户名和密码等

POST就可以在一定程度上解决此类问题

2、服务器接收方式

服务器随机接受GET方法的数据,一旦断电等原因,服务器也不知道信息是否发送完毕

而POST方法,服务器先接受数据信息的长度,然后再接受数据

3、form运行方式

当form框里面的method为get时,执行doGet方法
当form框里面的method为post时,执行doPost方法

4、容量限制

GET方法后面的信息量字节大小不要超过1.3K,而Post则没有限制

最后说明的是:

你可以用service()来实现,它包含了doget和dopost ;service方法是接口中的方法,servlet容器把所有请求发送到该方法,该方法默认行为是转发http请求到doXXX方法中,如果你重载了该方法,默认操作被覆盖,不再进行转发操作!

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

原文地址:https://www.cnblogs.com/isme-zjh/p/11820298.html

时间: 2024-10-15 12:05:19

servlet中doGet()和doPost()的用法的相关文章

Servlet的doGet与doPost方法的区别与使用

Servlet的doGet与doPost方法的区别与使用 2016年07月07日 13:05:13 阅读数:10222 一,区别 在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get.可在<form>中的method属性中指定提交的方式.如:<form action="inputForm"method="get">,如果不指定method属性,则会默认该属性为"get"方式. Get和post都能

【Servlet】doGet()与doPost()的区别

1 doGet与doPost的区别 2 3 1.Servlet接口只定义了一个服务方法--service 4 2.当发出客户端请求时,调用service方法并传递一个请求和响应对象 5 3.使用时经常在doPost()中调用doGet()方法,所以创建servlet时可以不要都Post()方法, 6 4.doGet()只有一个流,参数附加在URL后,大小个数有严格限制且只能是字符串 7 doPost()的参数是通过另外的流传递的,不能通过URL,所以可以很大,也可以传递二进制数据,如文件的上传

Servlet之doGet()和doPost()方法区别和联系【入门版,初学者必看】

Servlet 中 重写的doGet(),doPost()方法,分别代表get请求和post请求 其实不管get请求,还是post请求,处理方式类似 所以一般习惯在doGet()中调用一下doPost ()或者 在doPost()里面调用doGet() 版权声明:本文为博主原创文章,未经博主允许不得转载.

JSP Servlet中Request与Response所有成员方法的研究

HttpServletRequest与HttpServletResponse作为Servlet中doGet.doPost等方法中传递的参数,承接了Http请求与响应中的大部分功能,请求的解析与响应的返回都需要靠这两个对象进行,他们中的所有方法及功能在下边总结了一下,希望能对学习Java Web开发有所帮助. 1.HttpServletRequest: /* * 记录各个request.get的值 * request.getAsyncContext();AsyncContext * 获取异步传输的

java Servlet中通过response头信息设置浏览器禁止缓存

主要是通过禁用浏览器相关头信息,只需要在servlet的doget或dopost方法中加入如下语句即可 response.setHeader("Cache-Control", "no-cache"); response.setHeader("Pragma", "no-cache"); response.setDateHeader("expires", -1);

转: servlet中的service, doGet, doPost方法的区别和联系

大家都知道在javax.servlet.Servlet接口中只有init, service, destroy方法 但是我们在继承HttpServlet的时候为何一般重写doGet和doPost方法呢 下面我们看一下Servlet源代码: 注意: JDK只是定义了servlet接口,而实现servlet接口的比如tomcat, jboss等服务器 下面我们找到tomcat源代码, 可以到官网下载, 目前最新版本是7.0.53 找到javax.servlet.http.HttpServlet类, 下

servlet中service doGet doPost 的关系

在servlet中默认情况下,无论你是get还是post 提交过来都会经过service()方法来处理,然后转向到doGet 或是doPost方法,可以看HttpServlet 类的service方法: protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); if(

SERVLET中的doGet与doPost两个方法之间的区别

get和post是http协议的两种方法,另外还有head, delete等 这两种方法有本质的区别,get只有一个流,参数附加在url后,大小个数有严格限制且只能是字符串.post的参数是通过另外的流传递的,不通过url,所以可以很大,也可以传递二进制数据,如文件的上传. 在servlet开发中,以doGet()和doPost()分别处理get和post方法. 首先判断请求时是get还是post,如果是get就调用doGet(), 如果是post就调用doPost().都会执行这个方法. 1.

servlet中service() doGet() doPost() 方法

HttpServlet 里的三个方法:service(HttpServletRequest req, HttpServletResponse resp) ,doGet(HttpServletRequest req, HttpServletResponse resp), doPost(HttpServletRequest req, HttpServletResponse res)的区别和联系: 在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理