Servlet之二 —— HttpServlet的doGet()和doPost()
我們都知道,Servlet程式在Servlet介面中定義了init(),service(),destroy()的方法名稱,但是並沒有具體實現這些方法。
接著,它在javax.servlet.GenericServlet類中實現了service()方法。而javax.servlet.http.HttpServlet是GenericServlet的子類,所以在HttpServlet中也實現了service()方法,而且,在HttpServlet中還實現了doGet(),doPost(),doOptions(),doTrace(),doDelete(),doHead(),doPut()這7個方法。
因此,通常寫Httpservlet時,都是覆蓋上面的7中方法中的一種或幾種。而最常使用的方法是doGet()、doPost()這兩個。
在繼承了HttpServlet的Servlet程式執行請求時,它首先執行service()方法,來判斷接下來是執行doGet()還是doPost()方法,因此,HttpServlet中的service()就是做一個執行doGet(),doPost()方法的判斷。然後去執行相應的方法。
在Tomcat中,預設是執行doGet()方法的,因為doGet()方法,是處理少量資料的,所以,執行的速度較doPost()快。
又因為doGet()和doPost()是用來處理表單請求的,所以,在程式中具體要用doGet(),還是doPost()方法,就要看form標籤中method屬性的值是“get”還是“post”了。
一般,如果不確定URL請求的是get還是post方法時,就override這兩個方法,只是,在一個方法中寫具體實現步驟,在另一個方法中去呼叫實現了具體方法的一個。
下面附一個小例子:
<span style="font-family:SimSun;font-size:18px;">package self.servlet.c; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.annotation.*; /** * @author time * */ @SuppressWarnings("unused") public class SimpleServlet extends HttpServlet { /** * */ private static final long serialVersionUID = 1L; @Override public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ response.setContentType("text/html"); PrintWriter writer = response.getWriter(); writer.print("<html><head></head><body style='font-color:#ee33e3'>Simple Servlet</body></html>"); } @Override public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ doPost(request,response); } } </span>