1. 程式人生 > >Tomcat常見問題與簡單的Servlet開發

Tomcat常見問題與簡單的Servlet開發

tomcat servlet javaweb j2ee javaee


Tomcat常見問題

當我們在Eclipse上開發web工程時,工程部署到Tomcat上了,所以修改文件的源碼時,Eclipse會自動將更改後的文件重新部署到Tomcat上,但是如果你做出修改的內容仍然在瀏覽器中看不到,那麽可以使用以下幾種常用的解決方法:

1. 右鍵點擊部署的工程,選擇清理模塊文件夾:

技術分享


右鍵點擊Tomcat,選擇Clean,清理Tomcat的工程目錄:

技術分享


  1. 右鍵點擊Tomcat,選擇Restart重新啟動:

技術分享


  1. 點擊stop停止Tomcat服務器,並刪除部署的工程,然後再重新部署工程運行:

技術分享


  1. 檢查以下幾個細節:

ip地址是否有寫錯

端口是否有寫錯或者是否通行

工程名稱有沒有訪問錯誤

請求頁面的名稱是否有寫錯


  1. 清理Tomcat的工作環境:

刪除Tomcat中部署的所有工程,只運行目前的工程。

還是不行就刪除整個Tomcat,重新下載一個


  1. 如果是在啟動服務器時報錯,要查看控制臺打印的日誌信息,找出錯誤來源,學會分析日誌信息對於解決錯誤很有幫助:

技術分享


  1. 查看Eclipse中的server目錄下的文件是否正常,有沒有缺失:

技術分享


思維導圖:

技術分享



關於創建web工程時的一些問題:

在Eclipse中創建Dynamic Web Porject(動態web工程)時,會讓我們選擇以下幾個配置:


技術分享


1. 上圖中的工程名稱不用多解釋,關於運行服務器則不一定要選擇Tomcat,可以使用其他的web服務器:

技術分享

我們選擇Tomcat並不是說針對Tomcat這個服務器去開發,開發後的工程並不是只能應用於這個服務器,Tomcat只是作為一個運行我們開發工程的載體,在Tomcat上開發的工程完全可以在其他的支持Java的服務器中運行。

我們使用Tomcat作為運行服務器是為了導入Tomcat的jar包類庫,每個支持Java的web服務器都實現了Java所定制的接口規範,我們開發web工程的時候需要借助這些接口來進行開發,就像使用JDBC連接數據庫一樣,需要導入JDBC的jar包,通過它根據接口規範所實現的操作類去開發連接數據庫的模塊,這也是Java面向接口編程普遍的應用之一。


  1. 動態web模塊版本需要視服務器的版本而選擇,因為不同版本的web服務器支持的動態web模塊版本不一樣,這裏以Tomcat為例,Tomcat8.0以上的版本才可以支持3.1的web模塊版本,那麽如何得知當前使用的web服務器版本支持什麽版本的web模塊?這個可以在官方的文檔上查看到,同樣的以Tomcat為例:

技術分享


選擇一個版本點擊進去:

技術分享


在工程創建時的點擊Configuration(配置)右邊的按鈕,可以在裏面勾選一些Project Facets,並且能選擇不同的版本:

技術分享


Project Facets可以理解為:“項目的特性”。Project Facets的作用特性:

  • facet 定義了 java ee 項目的特性和要求

  • 為項目添加 EAR facet 會自動添加 web.xml (deployment descriptor file) ,並重新設置classpath

  • 項目創建時至少已經有一個 facet,開發人員可以按需添加其他 facet

  • 有的 facet 會依賴其他 facet

  • 有的 facet 可能和其他 facet 互斥

  • facet 可以設置版本



下面用實際例子來演示一下Project Facets的作用:

例如我現在有一個普通的Java工程:

技術分享


右鍵點擊此工程的屬性,進入屬性界面後點擊Project Facets,可以看到這個工程勾選了哪些Project Facets:

技術分享


可以看到只勾選了Java,這是被默認選中的配置,因為這是一個最簡單的java項目,如果想把這個java項目變成一個web項目,勾選其中的Dynamic Web Module並點擊Apply即可:

技術分享


此時查看工程目錄可以看到多了一個WebContent目錄:

技術分享


重新打開Project Facets面板框,會發現JavaScript選項框也被選中了:

技術分享


從這個例子應該可以很輕易地明白Project Facets的作用。





Servlet開發

介紹如何開發servlet之前,先介紹一下什麽是servlet:

Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,是用Java編寫的服務器端程序,主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。

所以Servlet就是一個接收用戶請求,處理完請求後生成動態Web內容的一個Java程序。是一個簡單的Java類,這個類中寫的是處理用戶請求的代碼,因為web服務器都是以http協議來進行通信的,所以開發基於http協議的Servlet需要繼承一個叫做HttpServlet的類,並且要實現它裏面的一個方法,這個方法用來處理用戶的請求。

示意圖:

技術分享

除了需要繼承一個父類,我們還需要配置Servlet的web訪問映射,需要給它起一個別名,在瀏覽器中只需要訪問這個別名就可以訪問到這個Servlet類。有兩種配置方式:一種是通過web.xml文件進行配置,一種是通過註解來配置。首先介紹通過xml來配置,因為註解相對於xml來說要簡單一些,至於為什麽要有一個別名:

技術分享

  1. 在創建web工程的時候勾選創建web.xml文件:

技術分享


2. 創建一個Java類,繼承於HttpServlet,並重寫父類的doGet方法,並在方法中寫上一句打印語句:

技術分享


3. 打開web.xml文件,刪除一些內容:

技術分享


  1. 增加以下配置信息:

技術分享


簡單解釋一下這段配置信息的意義:

技術分享


5. 配置完之後,將工程部署到Tomcat中,並啟動Tomcat服務器,然後在瀏覽器中訪問以下地址:

http://localhost:8080/myweb/hello

打開後會發現控制臺打印了一段消息:

技術分享

這是因為這個Servlet被訪問了,所以方法中的代碼也就會執行了。


從瀏覽器訪問Servlet的過程:

技術分享

Tomcat服務器接收到瀏覽器的訪問時,會先去webapps這個目錄下找到該訪問的目標Servlet所在的工程目錄,然後在此工程目錄下找到WEB-INF目錄,詢問此目錄下的web.xml文件,會在此文件中先尋找到<url-pattern>標簽所聲明的內容,再找到與此標簽相對應的<servlet-class>標簽裏聲明的Servlet操作類。尋找到後就會去classes目錄下找到這個Servlet操作類,接著就會實例化此操作類的對象,然後調用此類中的doGet方法,就會執行此方法裏面的代碼。

所以最後會在控制臺打印一段消息,每次訪問Servlet都是這樣的一個流程,這只是最簡單Servlet訪問流程,還有更復雜的。


以上是通過web.xml去配置Servlet的web訪問,下面介紹一下使用註解來配置,但是要註意的是註解的配置方式是Servlet3.0才有的特性:

1.創建web工程,這次不需要勾選創建web.xml文件了,然後同樣的創建一個Java類,繼承於HttpServlet,並重寫父類的doGet方法,在方法中寫上一句打印語句:

技術分享


  1. 配置註解,在類上聲明@WebServlet() 註解,並在註解的小括號裏上此Servlet類的web訪問名稱:

技術分享

可以看到通過註解的方式來配置,比web.xml不知道高到哪裏去了,一個註解就搞定了,要簡單很多,所以xml漸漸地比較少使用了,只不過一些老工程可能是使用xml文件配置的,所以了解一下xml的配置方式還是有必要的,免得到時候遇到了抓瞎。


3. 配置完之後,同樣的將工程部署到Tomcat中,並啟動Tomcat服務器,然後在瀏覽器中訪問以下地址:

http://localhost:8080/myweb/hello

打開後也會發現控制臺打印了一段消息:

技術分享


你訪問幾次就會打印多少句:

技術分享


通過數組,註解能一次性配置多個別名,而xml文件需要寫好幾個標簽:

技術分享

通過以上的幾個別名都可以訪問這個Servlet:

技術分享

技術分享

技術分享

技術分享


控制臺:

技術分享


甚至可以加上任意後綴:

技術分享


訪問它時依舊是個Servlet:

技術分享

技術分享


控制臺:

技術分享


每次修改Servlet的別名後記得重啟Tomcat服務器,不然不會生效的。



本文出自 “zero” 博客,請務必保留此出處http://zero01.blog.51cto.com/12831981/1978266

Tomcat常見問題與簡單的Servlet開發