servlet中doGet()和doPost()的⽤法
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 = Writer();
out.println("The Parameter are :"+Parameter("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 = Writer();
out.println("The Parameter are :"+Parameter("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 = Writer();
out.println("The Parameter are :"+Parameter("name1"));
}servlet和tomcat的关系
public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {
}
}
另外,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 执⾏.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论