servlet中的doGet()与doPost()是怎
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet中的doGet()与doPost()是怎相关的知识,希望对你有一定的参考价值。
参考技术A servlet中的doGet()与doPost()工作的方式如下:1.doGet
GET调用用于获取服务器信息,并将其做为响应返回给客户端。当经由Web浏览器或通过html、JSP直接访问Servlet的URL时,一般用GET调用。GET调用在URL里显示正传送给SERVLET的数据,这在系统的安全方面可能带来一些问题,比如用户登录,表单里的用户名和密码需要发送到服务器端,若使用Get调用,就会在浏览器的URL中显示用户名和密码。
例:
jsp页代码:
………
………
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"));
这样提交表单后,参数会自动添加到浏览器地址栏中,带来安全性问题。同时,get适合于发送少量数据。
2.doPost
它用于客户端把数据传送到服务器端,也会有副作用。但好处是可以隐藏传送给服务器的任何数据。Post适合发送大量的数据。
例:
jsp页代码:
………
………
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页代码:
………
………
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,但使用的比较少。 参考技术B 第一:你的servlet如果是继承自HttpServlet,就必须重写它里面的两 个虚方法doGet和doPost,也就是说,先不管别的servlet或jsp会去调用哪个方法,这两个方法都应该有。
第二:至于它调用哪个方法,就看提交方式
method属性的值是get,它就去调用对应servlet的doGet方法。
同理,method属性的值是get,它就去调用对应servlet的doPost方法。
一般来说,不管采用那种提交方式,在servlet里要做的事情是一样的。所以,我们很多情况下,在一个方法里面调用另一个方法,这样随你那种方式提交的,都可以转去做一种处理。
eg:
public void doPost(HttpRequest request,HttpResponse response)throw ServletException,IOException
doGet(request,response);
......
•如果请求是幂等的就可以使用GET
•所谓幂等是指多个请求返回相同的结果
•当改变服务器状态时应当使用POST方法
•GET请求的例子:
http://localhost/yourApp?firstName=Adam&middleName=Christopher
•采用POST方法向服务器发送命名参数时,与采用GET方法几乎一样的。
•区别:POST方法将参数串放在请求体中发送,而GET方法是将参数追加到URL中发送。
•如果数据处理不改变数据模型的状态,HTML使用规约理论上推荐采用GET方法,从这
可以看出,获取数据时应当使用GET方法。
•如果因为存储、更新数据,或者发送电子邮件,操作改变了数据模型的状态,这时建议使 用POST方法。 参考技术C 他们的调用关系是这样的:
1、请求中,我们已经可以很明确的知道是get,还是post类型的请求。
即doPost()与doGet()本身的区别只是在对于请求中的相对应的调用。
2、根据类型进行调用相应的方法
3、如果你只是实现了某一个方法,那么你将在另外一个中去调用你实现的方法,此时就完成了方法间的调用。
并不存在父类与子类,因为我们不会应用它们本身,而会是我们自己的业务逻辑处理。
所以,这里就不会用到 super.doGet();,或者super.doPost();了,只会是方法的相互调用doGet();或者doPost();。
不知道这样的回答是否解除了你的疑惑呢? 参考技术D spacelishuai 正解,
如果走的是serlvet,而servlet里又没有显示的调用父类方法,这就必定是走子
类重载的doGet() doPost() 了,这两个方法没什么区别,要看你提交过来的方
式是什么方式, Form表单里的
method属性是get还是post,用get方法提交有字符限制,只能是255个字符,并
且在地址栏里不隐藏链接,也就是说你用get方式提交用户名密码的话在URL地址
栏里是可以完全的看到的,post提交没有提交大小限制,并且隐藏地址栏信息,
相对安全。
一般来说都会在doGet()方法里调用doPost()方法,参数是一样的参数,处理的结果也是一样的:
eg:
public void doPost(HttpRequest request,HttpResponse response)throw ServletException,IOException
doGet(request,response);
......
Servlet的doGet与doPost方法的区别与使用
Servlet的doGet与doPost方法的区别与使用
一,区别
在使用表单提交数据到服务器的时候有两张方式可共选择,一个是post一个是get。可在<form>中的method属性中指定提交的方式。如:<form action="inputForm"method="get">,如果不指定method属性,则会默认该属性为”get”方式。
Get和post都能够提交数据,那么他们有什么不同呢?
不同点一:
通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。
不同点二:
通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示。
不同点三:
通过Get方式提交的数据安全性不高,而Post方式的更加安全~
二,使用
下面举个例子说明:
1.post提交--doPost方法
login.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>登录</title>
- </head>
- <body>
- <h3>登录</h3>
- <hr>
- <form action="LoginServlet" method="post">
- 用户名:<input type="text" name="username"/><br>
- 密码:<input type="password" name="password"/><br>
- <input type="submit" />
- </form>
- </body>
- </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录</title> </head> <body> <h3>登录</h3> <hr> <form action="LoginServlet" method="post"> 用户名:<input type="text" name="username"/><br> 密码:<input type="password" name="password"/><br> <input type="submit" /> </form> </body> </html>LoginServlet:
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- //向服务器发送请求获取到参数
- String username=request.getParameter("username");
- String password=request.getParameter("password");
- System.out.println(username+"--"+password);
- response.setHeader("Content-Type", "text/html; charset=UTF-8");
- Writer out=response.getWriter();
- out.write("用户名:"+username);
- out.write("密码:"+password);
- out.flush();
- out.close();
- }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //向服务器发送请求获取到参数 String username=request.getParameter("username"); String password=request.getParameter("password"); System.out.println(username+"--"+password); response.setHeader("Content-Type", "text/html; charset=UTF-8"); Writer out=response.getWriter(); out.write("用户名:"+username); out.write("密码:"+password); out.flush(); out.close(); }效果图:
这就是Post方式提交和doPost方法使用的效果,是不是更安全呢~~~
2.get方式--doGet方法
login.jsp:
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>登录</title>
- </head>
- <body>
- <h3>登录</h3>
- <hr>
- <form action="LoginServlet" method="get">
- 用户名:<input type="text" name="username"/><br>
- 密码:<input type="password" name="password"/><br>
- <input type="submit" />
- </form>
- </body>
- </html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>登录</title> </head> <body> <h3>登录</h3> <hr> <form action="LoginServlet" method="get"> 用户名:<input type="text" name="username"/><br> 密码:<input type="password" name="password"/><br> <input type="submit" /> </form> </body> </html>LoginServlet:
- @Override
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- // TODO Auto-generated method stub
- request.setCharacterEncoding("UTF-8");
- response.setCharacterEncoding("UTF-8");
- //向服务器发送请求获取到参数
- String username=request.getParameter("username");
- String password=request.getParameter("password");
- System.out.println(username+"--"+password);
- response.setHeader("Content-Type", "text/html; charset=UTF-8");
- Writer out=response.getWriter();
- out.write("用户名:"+username);
- out.write("密码:"+password);
- out.flush();
- out.close();
- }
@Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); //向服务器发送请求获取到参数 String username=request.getParameter("username"); String password=request.getParameter("password"); System.out.println(username+"--"+password); response.setHeader("Content-Type", "text/html; charset=UTF-8"); Writer out=response.getWriter(); out.write("用户名:"+username); out.write("密码:"+password); out.flush(); out.close(); }效果图:
看这个效果图是不是觉得用户名和密码都暴露了呢~~这样很不安全~
3.也可以post方式提交,然后在doGet方式写逻辑代码,不过要在doPost方法中调用doGet方法,同样get方式也是一样的道理~~~
另外,除了doGet和doPost方法之外,还有doPut、doDelete、doTrace、doHead、doOptions,但使用的比较少。
以上是关于servlet中的doGet()与doPost()是怎的主要内容,如果未能解决你的问题,请参考以下文章
4 service() 与 doGet() doPost()
servlet的生命周期,啥情况下调用doGet()和doPost()?
Servlet中的doPost和doGet方法有什么区别?传递和获取参数上有什么区别?