servlet 學習筆記
自序
昨天心情有些失落。公司從去年底到現在就沒有安排我做個正事,(也沒有我什么事情,研發部門當產品出來后,還有什么好研發呢,無非就是修改 BUG ,做些維護)。沒有事情的情況下,被拉著做測試。測試的內容也就是 GIS 的客戶端,功能沒有幾個,測試很枯燥,被叫著翻來覆去做同一件事。郁悶的是部門經理的座位在我后面,雖然隔了有
鑒于工作中的種種因素,我想跳槽,換個環境。換工作,我是 java 程序員,而目前的工作無非就是寫 UI , swing 編程。類似的工作可不那么好找,而且也打算多長點見識。所以決定離開成都去北京找工作,而且找 J2EE 方面的。辭職前我打算做個 JSP 方面的小應用、再把 JAVA 好好復習一遍這樣才對新工作有所準備。
說做就做吧。先學習 JSP (畢業前,曾自學過一點點),學習 JSP 前,有必要學習 servlet 。這就有了這一系列學習筆記……
<!--[if !supportLists]--> 1. <!--[endif]--> 什么是Servlet?
Java Servlet ( java 服務器小程序)是一個基于 Java 技術的 Web 組件,運行在服務器端,由 Servlet 容器所管理,用于生成動態的內容。
<!--[if !supportLists]--> 2. <!--[endif]--> servlet和applet區別?
相同點:
<!--[if !supportLists]--> ² <!--[endif]--> 他們都不是獨立的應用程序,都沒有main()方法;
<!--[if !supportLists]--> ² <!--[endif]--> 他們都生存在容器中,applet運行在瀏覽器中,servlet運行在servlet容器中。
<!--[if !supportLists]--> ² <!--[endif]--> 他們都有生命周期,都有init()和destroy()方法;
不同點:
<!--[if !supportLists]--> ² <!--[endif]--> applet具有圖形界面,運行在客戶端,servlet沒有圖形界面,運行在服務器端的servlet容器中。
我寫的 applet 要多點,這樣對比有利于自己更好的掌握 servlet 技術。
<!--[if !supportLists]--> 3. <!--[endif]--> hello world
說句廢話:買的書《 JAVA WEB 開發詳解》,孫鑫編著,感覺講得不好, servlet 簡直就是在介紹 api 手冊。
我總結的時候,自然不能這樣。還是介紹個入門例子吧。
先說下環境變量,要編譯 servlet 需要把必要的 jar 設置到 classpath 中。我的環境變量是這樣設置的。(這里我把 jar 拷貝到了 jdk 目錄下面)
.;D:\jdk\lib\dt.jar;D:\jdk\lib\tools.jar;D:\jdk\jre\lib\rt.jar;D:\jdk\lib\servlet-api.jar;D:\jdk\lib\jsp-api.jar;
第一個程序—— test.java
import javax.servlet.ServletException;
import java.io.*;
import javax.servlet.http.*;
public class test extends HttpServlet
{
public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException
{
PrintWriter out = resp.getWriter();
out.println("hello, world!");
out.close();
}
}
由于設置了環境變量,這里順利編譯通過。
部署 servlet :
在 webapps 目錄下,建立一個目錄(存儲該應用)。如: hello
在該 hello 目錄下建立一個特殊目錄 WEB-INF ,注意全大寫。之所以特殊,因為該目錄對客戶端不可見。如果你把 index.html 放到 WEB-INF 目錄下面,然后通過 http://127.0.0.1:8080/hello/WEB-INF/index.html 訪問,這樣是訪問不到的。
而在 WEB –INF 目錄下:
建立 classes 目錄來存放編譯好的 class 文件。
建立 lib 目錄來存放運行所需要的其他包。
建立重要的 web.xml 配置文件。
web.xml 可以包含如下的配置和部署信息:
<!--[if !supportLists]--> ² <!--[endif]--> ServletContext的初始參數;
<!--[if !supportLists]--> ² <!--[endif]--> Session的配置;
<!--[if !supportLists]--> ² <!--[endif]--> Servlet/Jsp的定義;
<!--[if !supportLists]--> ² <!--[endif]--> Servlet/Jsp的映射;
<!--[if !supportLists]--> ² <!--[endif]--> MIME類型映射;
<!--[if !supportLists]--> ² <!--[endif]--> 歡迎文件列表;
<!--[if !supportLists]--> ² <!--[endif]--> 錯誤頁面;
<!--[if !supportLists]--> ² <!--[endif]--> 安全;
<!--[if !supportLists]--> ² <!--[endif]--> 地區和編碼映射;
<!--[if !supportLists]--> ² <!--[endif]--> jsp配置。
我們編寫的 xml 必須是格式良好的 xml 。 web.xml :
<?xml version =”
<web-app>
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>test</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
這樣輸入:“ http://127.0.0.1:8080/hello/hello “就訪問到了剛才寫的 servlet 。
再介紹一種訪問 servlet 方式: telnet 方式
telnet localhost 8080
回車,輸入
GET /hello/hello HTTP/1.1
Host:localhost
dos 窗口下將顯示 hello , world
如果要用 servlet 處理表單提交的信息,表單提交方式一般情況分 get 、 post 。相應的我們就應該覆蓋 HttpServlet 中的 doGet ()、 doPost ()方法。表單中 action 寫 servlet 的 url-/pattern 值。
值得注意的是: web.xml 在 servlet 2.2 、 2.3 規范中都由 DTD 定義,所有有元素間嚴格的順利關系,而 servlet2.4 規范中, web.xml 文件改為, xml schema 來定義文檔的結構,其中一個好處是元素出現的順序不再有嚴格的限定。如果要兼容低版本的,還是得有嚴格的順序關系。
提示一旦修改過 servlet 就應該重啟 tomcat 。