Web項目部署到Tomcat總結

Web項目部署到Tomcat總結:

前一段時間一直遇到莫名其妙的問題使項目無法往下進行,之前一直以爲是Tomcat的問題,今天總算把它弄明白了,原來是eclipse中項目設置的問題導致classes文件找不到,今天總結一下希望能夠幫到大家!

一:先說說web項目的運行原理

知識回顧:

什麼是容器?

Servlet沒有main()方法。Servlet受控於另一個Java應用,這個Java應用稱爲容器。Tomcat就是這樣一個容器。如果web服務器應用得到一個指向servlet的請求(而不是其他請求,如請求一個普通的靜態HTML),此時服務器不是把這個請求交給servlet本身,而是交給部署該servlet的容器,要由容器調用servlet的方法,如doPost()doGet()

JSP頁面是如何被執行的?JSP執行效率比Servlet低嗎?

答:當客戶端向一個JSP頁面發出請求時,Web ContainerJSP轉換成Servlet的源代碼(只是第一次請求時),然後編譯轉化後的Servlet並加載到內存中執行,執行的結果Response到客戶端。

JSP只在第一次執行的時候會轉化爲Servlet,以後的每次執行Web容器都是直接執行編譯後的Servlet,所有JSPServlet只有第一次執行的時候不一樣,JSP慢一點,以後的執行都是相同的。

執行原理:

https://img-blog.csdnimg.cn/20181209180419524.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0phY2tfX0Zyb3N0,size_16,color_FFFFFF,t_70

 

  1. 客戶端請求服務
  2. Web服務器將請求交給web容器Tomcat
  3. Tomcat主線程對轉發來用戶的請求做出響應創建兩個對象:HttpServletRequest和HttpServletResponse;
  4. 從請求中的URL中找到正確ServletTomcat爲其創建或者分配一個線程,同時把步驟3創建的兩個對象傳遞給該線程;(此時servlet類加載並實例化並調用init方法)
  5. Tomcat調用Servletservic()方法,根據請求參數的不同調用doGet()或者doPost()方法;
  6. .假設是HTTP GET請求,doGet()方法生成靜態頁面,並組合到響應對象裏;

7、Servlet線程結束時:Tomcat將響應對象轉換爲HTTP響應發回給客戶,同時刪除請求和響應對象。(調用destroy()方法)

 

注意:

**1.**創建Servlet對象的時機:

Servlet容器啓動時:讀取web.xml配置文件中的信息,構造指定的Servlet對象,創建ServletConfig對象,同時將ServletConfig對象作爲參數來調用Servlet對象的init方法。

 

在Servlet容器啓動後:客戶首次向Servlet發出請求,Servlet容器會判斷內存中是否存在指定的Servlet對象,如果沒有則創建它,然後根據客戶的請求創建HttpRequest、HttpResponse對象,從而調用Servlet 對象的service方法。

 

Servlet容器在啓動時自動創建Servlet,這是由在web.xml文件中爲Servlet設置的屬性決定的。從中我們也能看到同一個類型的Servlet對象在Servlet容器中以單例的形式存在。

 

**2.**在Servlet接口和GenericServlet中是沒有doGet()、doPost()等等這些方法的

HttpServlet中定義了這些方法,但是都是返回error信息,所以,我們每次定義一個Servlet的時候,都必須實現doGet或doPost等這些方法。我們經常使用的httpServlet是繼承於GenericServlet實現的。

 

把web項目加載到Tomcat時:

  1. 將src下的所有Java文件編譯並放到WEB-INF/classes中。
  2. 加載Eclipse外部引用的jar放在 WEB-INF/lib 中。
  3. Jsp文件第一次被執行時Java代碼及class文件都放到C:\軟件\Apach\apache-tomcat-8.5.35\work\Catalina\localhost\NWNULiuYanBan\org\apache\jsp下。
  4. Tomcat根據web.xml加載servlet及welcome頁面

用eclipse建web工程Java類編譯後存放目錄:

Eclipse workspace中:

 

 

Tomcat中:

 

Maven工程:

Eclipse workspace中:

Tomcat中:

Web項目的jsp文件的Java代碼及class文件:

 

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