Servlet詳解——學習筆記(一)
此為是我接觸Java web的第一篇部落格,希望能堅持下來。本文主要是解釋Struts框架中的Servlet技術,希望能讓大家對Servlet有更好的理解。
在JSP應用中,Servlet是一種獨立於平臺和協議的伺服器端的Java應用程式,能夠生成動態的Java web頁面,採用“請求----響應”模式提供web服務。Servlet擔當了web瀏覽器或其他HTTP客戶程式請求和HTTP伺服器上的資料庫或應用程式之間的中間層。與傳統的從命令列啟動的Java應用程式不同,Servlet是由web伺服器載入的,而web伺服器必須包含支援Servlet的JVM。狹義的Servlet是指Java語言實現的一個
一、Servlet的優點(主要針對CGI)
(1)高效。在Servlet中,每個請求由一個輕量級的java執行緒處理(而不是重量級的OS程序)。
(2)方便。它提供了大量的實用工具例程,例如自動地解析和解碼HTML表單資料、讀取和設定HTTP頭,處理Cookie、跟蹤會話狀態等,這樣方便coder的工作。
(3)功能強大。例如Servlet能夠直接與web伺服器互動,而普通的CGI程式則不能。Servlet還能夠在各個程式之間共享資料,使得資料庫連線池之類的功能很容易實現。
(4)可移植性好。
(5)節省投資
Servlet的永續性主要分為初始化、請求處理、終止這幾個階段,JSP的本質是Servlet,coder編寫的JSP頁面由Web容器編譯成對應的Servlet。當Servlet在容器中執行時,Servlet例項的建立及銷燬等都不是由coder決定的,而是由web容器進行控制。
二、Servlet的生命週期分為四個階段
(1)建立Servlet物件,通過伺服器反射機制建立Servlet物件,第一次請求時才會建立。(預設)
(2)呼叫Servlet物件的init()方法,初始化Servlet的資訊,init()方法只會在建立後被呼叫一次
(3)響應請求,呼叫service()或者是doGet(),doPost()方法來處理請求,這些方法是執行的在多執行緒狀態下的。
(4)在長時間沒有被呼叫或者是伺服器關閉時,會呼叫destroy()方法來銷燬Servlet物件。
三、Servlet建立時機:
(1)第一個請求到來的時候建立
(2)在web.xml中<servlet>標籤下新增<load-on-startup>2</load-on-startup>,則在伺服器啟動的時候就建立 標籤體是正數的時候,啟動伺服器,即建立servlet 並且當多個<servlet>標籤都定義了這個時,數字小的先載入
四、Servlet與Applet的異同
Applet與Servlet的相同之處在於它們不是獨立的應用程式,沒有main()方法。它們不是由coder呼叫,而是由另外一個應用程式(容器)呼叫,它們都有一個生存週期,包含init()和destroy()方法;不同之處在於Applet具有好的使用者介面(AWT),與瀏覽器一起,在客戶端執行,Servlet則沒有圖形介面,執行在伺服器端。
五、Servlet開發體驗
Servlet通常被稱為伺服器端小程式,是執行在伺服器端的程式,功能是處理並響應客戶端的請求。Servlet是一個特殊的Java類,此Java類必須繼承於HttpServlet,每一個Servlet可以響應客戶端的請求。
Servlet為我們提供下列方法以響應客戶端的請求:
- doGet:用於響應客戶端的GET請求
- doPost:用於......................POST請求
- doPut:................................PUT請求
- doDelete:..........................DELETE請求
- init(Servlet config):建立Servlet例項時,呼叫該方法初始化Servlet資源。
- destory():銷燬Servlet例項時,自動呼叫該方法回收資源
初次練習:
package jweb;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet{
public void init(ServletConfig config) throws ServletException
{
super.init(config);
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
response.setContentType("text/html; charset=GB2312");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Hello - Servlet</title></head>");
out.println("<body>");
out.println(" Hello World <br>");
out.println("</body>");
out.println("</html>");
out.close();
}
public String getServletInfo()
{
return "com.sdc.www.HelloServlet Infomation.";
}
public void destory()
{
}
}
將檔案儲存為HelloServlet.java,上面是一個很簡單的servlet程式,只是簡單的輸出一個Hello world,注意,用javac編譯時,一定要將環境建好:即將Tomcat中的servlet-api.jar檔案複製到JDK資料夾的“jre\lib\ext”中,然後編譯成.class檔案(使用javac HelloServlet.java來編譯,會生成HelloSevlet.class檔案)。
四、配置tomcat
配置tomcat,啟動tomcat,在tomcat的webapps目錄下新建一個資料夾,名字可以隨便,我這裡my_example目錄結構
webapps
|-------my_example
|-------WEB-INF
| |-----------classes
| |-----------web.xml
|-------index.html
其中classes檔案就是放剛剛生成HelloServlet.class檔案,由於上面的程式碼是包含在包jweb中,所以是放在classes/jweb/HelloServlet.class
配置web.xml,是Servlet對外可見 <?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<description>Examples</description>
<display-name>Examples</display-name>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>jweb.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
這樣我們就可以通過http://localhost:8080/my_example/HelloServlet來訪問了.