Servlet方法之service()


1、service一定要用嗎?作用是什么?是不是在程序開始運行時,自動裝載執行的系統方法(類似於main)?

  Service是類GenericServlet中最重要的方法,每次客戶向服務器發出請求時,服務器就會調用這個方法。程序員如果想對客戶的請求進行響應的話就必須覆蓋這個方法,並在這個方法中加入自己的代碼來實現對客戶的響應。Service有兩個參數(ServletRequest和ServletResponse),ServletRequest保存了客戶向服務器發送的請求,而ServletResponse用來設置如何對客戶進行響應。

有一個問題我們應當注意:就是init()方法(Servlet的兩個生命周期函數之一,另一個是destroy())和service()方法的區別,當我們改變源程序而重新生成一個新的.class文件的時候,此時如果再次執行該Servlet,會發現執行的結果跟沒做更改的時候一樣,原因就是因為相同的Servlet的init只執行一次,所以當我們在調試Servlet的時候要不斷改變文件名和類名,或者重新啟動服務(Tomcat或者JWS等)。就是說,init()方法僅在服務器裝載Servlet時才由服務器執行一次,而每次客戶向服務器發請求時,服務器就會調用Service()方法。 

 

2、在建立一個繼承了HttpServlet類並重寫了該類的service()、doPost()和doGet()方法時,java會如何執行?

其實若是這三個方法都在存在的情況下,java只會執行service()方法,而其他的兩種方法不會被執行。若是沒有service() 方法,則是根據jsp傳入方式選擇對應的方法。比如說,若是jsp是以Post方式傳入數據,則是調用doPost()方法處理數據。但是一般上在建立一個繼承HttpServlet類時都會重寫doPost()和doGet()方法,而且會在其中一個方法中處理數據,另一個方法則是直接調用該方法,比如以下例子:

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()方法。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM