再次認識servlet

1. 與 Servlet 主動關聯的是三個類,分別是 ServletConfig、ServletRequest 和 ServletResponse。這三個類都是經過容器傳遞給 Servlet 的,其中 ServletConfig 是在 Servlet 初始化時就傳給 Servlet 了,然後兩個是在請求達到時調用 Servlet 時傳遞過來的。java

2. Tomcat 一接受到請求首先將會建立 org.apache.coyote.Request 和 org.apache.coyote.Response,這兩個類是 Tomcat 內部使用的描述一次請求和相應的信息類它們是一個輕量級的類,它們做用就是在服務器接收到請求後,通過簡單解析將這個請求快速的分配給後續線程去處理,因此它們的對象很小,很容易被 JVM 回收。接下去當交給一個用戶線程去處理這個請求時又建立 org.apache.catalina.connector. Request 和 org.apache.catalina.connector. Response 對象。這兩個對象一直穿越整個 Servlet 容器直到要傳給 Servlet,傳給 Servlet 的是 Request 和 Response 的門面類 RequestFacade 和 RequestFacade,這裏使用門面模式與前面同樣都是基於一樣的目的——封裝容器中的數據。一次請求對應的 Request 和 Response 的類轉化以下圖所示:web

3. 瞭解servlet還須要瞭解它在Tomcat中怎麼運行的:參考:https://www.ibm.com/developerworks/cn/java/j-lo-servlet/apache

4. 服務器

javax.servlet.Servlet接口:Servlet接口的基本目標是提供生命期方法init()、service()和destroy()方法。spa

——》javax.servlet.GenericServlet類(協議無關版本)——》javax.servlet.http.HttpServlet類(HTTP版本)線程

協議無關的版本和協議有關的版本有什麼區別呢?code

GenericServlet是一個模板,將來能夠使用這個模板去發展單獨用於上傳文件的關於FTP的servlet~orm

 

 

關於init();xml

若是在web.xml中聲明瞭當服務器啓動的時候自動調用,否則它的init方法會將在第一次請求的時候被調用!對象

 

 

javax.servlet.servlet原始接口

package javax.servlet;

import java.io.IOException;

public interface Servlet {
    void init(ServletConfig var1) throws ServletException;

    ServletConfig getServletConfig();

    void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

    String getServletInfo();

    void destroy();
}

javax.servlet.servlet原始接口——》javax.servlet.GenericServlet抽象類

public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
    private static final String LSTRING_FILE = "javax.servlet.LocalStrings";
    private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.LocalStrings");
    private transient ServletConfig config;

    public GenericServlet() {
    }

javax.servlet.servlet原始接口——》javax.servlet.GenericServlet抽象類——》javax.servlet.http.HttpServlet

package javax.servlet.http;

import java.io.IOException;
import java.lang.reflect.Method;
import java.text.MessageFormat;
import java.util.Enumeration;
import java.util.ResourceBundle;
import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public abstract class HttpServlet extends GenericServlet {
    private static final String METHOD_DELETE = "DELETE";
    private static final String METHOD_HEAD = "HEAD";
    private static final String METHOD_GET = "GET";
    private static final String METHOD_OPTIONS = "OPTIONS";
    private static final String METHOD_POST = "POST";
    private static final String METHOD_PUT = "PUT";
    private static final String METHOD_TRACE = "TRACE";
    private static final String HEADER_IFMODSINCE = "If-Modified-Since";
    private static final String HEADER_LASTMOD = "Last-Modified";
    private static final String LSTRING_FILE = "javax.servlet.http.LocalStrings";
    private static ResourceBundle lStrings = ResourceBundle.getBundle("javax.servlet.http.LocalStrings");

    public HttpServlet() {
    }

——》javax.servlet.ServletRequest類(協議無關版本)——》javax.servlet.http.HttpServletRequest接口(HTTP版本)

public interface HttpServletRequest extends ServletRequest {
package javax.servlet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Map;

public interface ServletRequest {

——》javax.servlet.ServletResponse接口(協議無關版本)——》javax.servlet.http.HttpServletResponse接口(HTTP版本)

public interface HttpServletResponse extends ServletResponse {
package javax.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Locale;

public interface ServletResponse {

——》javax.servlet.ServletContext接口

——》javax.servlet.http.HttpSession接口

相關文章
相關標籤/搜索