一、service必定要用嗎?做用是什麼?是否是在程序開始運行時,自動裝載執行的系統方法(相似於main)?html
Service是類GenericServlet中最重要的方法,每次客戶向服務器發出請求時,服務器就會調用這個方法。程序員若是想對客戶的請求進行響應的話就必須覆蓋這個方法,並在這個方法中加入本身的代碼來實現對客戶的響應。Service有兩個參數(ServletRequest和ServletResponse),ServletRequest保存了客戶向服務器發送的請求,而ServletResponse用來設置如何對客戶進行響應。java
有一個問題咱們應當注意:就是init()方法(Servlet的兩個生命週期函數之一,另外一個是destroy())和service()方法的區別,當咱們改變源程序而從新生成一個新的.class文件的時候,此時若是再次執行該Servlet,會發現執行的結果跟沒作更改的時候同樣,緣由就是由於相同的Servlet的init只執行一次,因此當咱們在調試Servlet的時候要不斷改變文件名和類名,或者從新啓動服務(Tomcat或者JWS等)。就是說,init()方法僅在服務器裝載Servlet時才由服務器執行一次,而每次客戶向服務器發請求時,服務器就會調用Service()方法。 程序員
二、在創建一個繼承了HttpServlet類並重寫了該類的service()、doPost()和doGet()方法時,java會如何執行?服務器
其實如果這三個方法都在存在的狀況下,java只會執行service()方法,而其餘的兩種方法不會被執行。如果沒有service() 方法,則是根據jsp傳入方式選擇對應的方法。好比說,如果jsp是以Post方式傳入數據,則是調用doPost()方法處理數據。可是通常上在創建一個繼承HttpServlet類時都會重寫doPost()和doGet()方法,並且會在其中一個方法中處理數據,另外一個方法則是直接調用該方法,好比如下例子:jsp
package com.sysker.servlet; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class FristSerevlet */ @WebServlet("/FristServlet") public class FristServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FristServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); response.setContentType("text/html"); String name= request.getParameter("name"); String gender=request.getParameter("gender"); String[] colorMap =null; String national = request.getParameter("national"); PrintWriter out = response.getWriter(); out.println("<html><head>"); out.println("<title>Servlet測試</title></head>"); out.println("<body>"); out.println("您的姓名:"+name+"<br><hr>"); out.println("您的性別:"+gender+"<br><hr>"); out.println("您喜歡的顏色:<br>"); if(request.getParameterValues("color")!=null){ colorMap=request.getParameterValues("color"); for (String color : colorMap) { out.print(color+" "); } out.println("<br><hr>"); }else{ out.println("您未選擇喜歡的顏色!<br><hr>"); } out.println("您的國籍:"+national+"<br>"); out.println("</body></html>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }
上面的Servlet只會執行service()方法。函數