JavaWeb-Servlet原理分析

Servlet原理分析,並手動實現自己的Servlet接口攔截強求

當前都是使用springMVC框架,導致對於底層的東西一知半解

web瀏覽器 ,tomcat , servlet之間的關係

簡單來講:程序間通信可以通過socket來實現,而tomcat就相當於一個socket的client,和web瀏覽器建立連接

那麼tomcat是怎麼調用 我們的後臺Java程序:servlet作爲tomcat調用後臺程序的入口,有servlet的Java項目才能算做一個web程序

1.訪問servlet 必要配置

第一種:在web.xml中配置servlet的信息


<!---servlet 1-->
<servlet>
    <servlet-name>TestMyServlet</servlet-name>    
    <servlet-class>/test</servlet-class>                   
</servlet>

   <servlet-mapping>
        <servlet-name>Myservlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>

第二種 : 通過註解@webServlet("/test")

@WebServlet("/test")
public class TestMyServlet implements Servlet, Serializable {
}

2. 自己實現攔截請求的Servlet實現類

​ 通常我們寫servlet都是繼承HttpServlet,那麼Servlet是怎樣實現攔截請求的,或者說Tomcat是怎麼調用Servlet的,通過自己實現Servlet,能夠體會到Servlet的作用。

具體的實現類如下:

@WebServlet("/test")
public class test implements Servlet, Serializable {

   //這個和HttpServlet中的doGet()一樣
    public void doGetGetGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("hello word");
        Writer wirter = resp.getWriter();
        wirter.write("hello ");
    }

  //初始化方法,這個會被tomcat調用
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("init");
    }

  //這個是處理請求的方法
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest)req;
        HttpServletResponse response = (HttpServletResponse)res;
        System.out.println("getServletConfig()");

        String method =  request.getMethod();
        if(method.equalsIgnoreCase("get")){
            doGetGetGet(request, response);
        }
    }

    /*以下方法不是非必須要實現的*/
    public ServletConfig getServletConfig() {
        return null;
    }
    public String getServletInfo() {
        return null;
    }
    public void destroy() {
    }
}

如上所示,重點在於三個方法:

tomcat接收到請求,初始化該請求對應web.xml中配置的servlet或者@webservlet註解的類。

init(): 必須實現的方法,該方法是被tomcat下的 StandardWapper.loadServlet 顯式的調用,

​ 作用,加載,初始化請求對應的Servlet。

相關類tomcat的lib目錄下位於catalina.jar org.apache.catalina.core.StandardWrapper

service(): 必須實現的方法, 這個方法是被tomcat 的ApplicationFilterChain顯式的調用。

​ 作用: 處理請求,並且返回響應;

相關類tomcat的lib目錄下catalina.jar org.apache.catalina.core.ApplicationFilterChain

doGetGetGet() : 自定義的處理get請求的方法,被service()調用。這之後,就可以調用我們後臺程序了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章