Servlet方法之service()

一、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()方法。函數

相關文章
相關標籤/搜索