Java Servlet 介紹與執行個體

來源:互聯網
上載者:User

什麼是Servlet
在Web伺服器端載入並啟動並執行Java應用程式
具體運行在Servlet引擎管理的JVM上。
Servlet容器負責Servlet和使用者的通訊以及調用Servlet的方法。
Servlet和使用者的通訊採用請求/響應模式。
用於以動態響應客戶機請求形式擴充Web伺服器(Web Container)的功能。

Servlet是程式開發伺服器端應用程式的一個很好選擇, Servlet與JSP結合使用,能提供更強大的伺服器端功能。

 

三種基本的Servlet引擎
大多數的J2EE伺服器,如:BEA WebLogic,WebSphere Application, JBoss等。
具有內建Servlet容器的Web伺服器,如:Tomcat。
使用Servlet引擎外掛程式的產品,如JRun、 Apache Web伺服器、Microsoft IIS等,這些產品都需要安裝Web外掛程式來整合Java運行時環境

 

工作原理

Servlet 處理請求的過程

  1. 使用者從客戶機將HTTP請求發送給Web伺服器。
  2. Web容器執行個體化Servlet,並建立線程。
  3. Web伺服器將該請求發送給Servlet。
  4. Servlet處理該請求。
  5. Servlet將響應發送給Web伺服器。
  6. Web伺服器將響應轉寄送給客戶機。

Servlet被發來的第一個請求啟用,然後繼續運行於後台,以線程形式處理請求,速度非常快,直到Servlet被修改時才再次載入。
一個Servlet在同一時刻只有一個執行個體,並且它在Sevlet的使用期間將一直保留。

多執行緒多請求

Servlet的生命週期
(1)初始化階段
    在下列情形下Web容器裝入Servlet,建立一個Servlet執行個體,調用Servlet的init()方法對Servlet執行個體初始化:

  • Servlet容器啟動時。
  • 在Servlet容器啟動後,客戶首次向Servlet發出請求。
  • Servlet的類檔案被修改後,重新載入。

(2)服務階段
   如果容器接收到對此Servlet的請求,那麼它根據設定檔Web.xml中URL與Servlet映射關係將請求轉寄至此Servlet的service()方法。 service()方法中調用doGet()或doPost()。

(3)終止階段

   執行個體被銷毀,通過調用Servlet的destory()方法來銷毀Servlet,關閉資料庫連接、中斷後台線程等。

 

執行個體1.

// ==================== Program Description ==========================<br />// 程式名稱: HelloWorldServlet.java<br />// 參考網址: http://www.8isp.cn/news.jsp?id=165<br />// 程式目的: 編寫最簡單的Servlet程式,熟悉其過程<br />// ==============================================================<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import java.io.*;<br />public class HelloWorldServlet extends HttpServlet {<br /> public void service(HttpServletRequest req, HttpServletResponse res) throws IOException{<br /> res.setContentType("text/html");<br /> PrintWriter out = res.getWriter();<br /> out.println("<html><head><title>Hello World!</title></head>");<br /> out.println("<body>");<br /> out.println("<p><img src="images/build_bea_web.gif" mce_src="images/build_bea_web.gif" align=right>");<br /> out.println("<h1>Hello World!</h1></body></html>");<br /> }<br />}

將HelloWorldServlet .java編譯後得到.class檔案,

將HelloWorldServlet.class檔案拷貝到intall_dir/webapps/ROOT/WEB-INF/classes中,

開啟intall_dir/webapps/ROOT/WEB-INF/路徑下的web.xml檔案,在<web-app>...</web-app>之間添加如下內容:

<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/HelloWorldServlet/*</url-pattern>
</servlet-mapping>

儲存web.xml 檔案,注意,備份修改前的web.xml 。

重新啟動Tomcat 伺服器,在地址欄輸入http://localhost:8080/HelloWorldServlet 訪問HelloWorldServlet .class 即可。

注意:如果Tomcat已經啟動,需要重啟Tomcat

 

目錄結構如下所示:

 

程式解釋:

這個程式用service()方法實現對用戶端的響應。在這個響應中,首先是調用了setContextType("text/html")設定響應內容類型。因為要發送文本,用getWriter( )方法獲得了PrintWriter對象,第15~18行就是發送給用戶端的資訊,一個字串"Hello World",一個幾乎在每種語言中都要出現的程式。我們並沒有顯式地關閉PrintWriter對象,Servlet引擎會自動地關閉它,這樣會提高效能

 

可能出現的問題

編譯時間提示servlet包不存在

產生這些錯誤的原因是Java編譯器沒有找到javax.servlet包中的類。

要解決這個問題,我們需要讓Java編譯器知道Servlet API庫所在的位置。Tomcat在其發行版中已經包含了Servlet API庫,是以JAR檔案的形式提供的,這個JAR檔案的完整路徑名是:
%CATALINA_HOME%/lib/servlet-api.jar

(不知為何,我把上面的路徑加進去仍不能成功,改為全路徑就可以了,C:/Program Files/Apache Software Foundation/Tomcat 7.0/lib)
我們只需要在系統的CLASSPATH環境變數下添加這個JAR檔案的路徑名就可以了。

 

注意,修改系統變數後需要重啟電腦

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.