servlet 學習筆記

          自序

          昨天心情有些失落。公司從去年底到現在就沒有安排我做個正事,(也沒有我什么事情,研發部門當產品出來后,還有什么好研發呢,無非就是修改 BUG ,做些維護)。沒有事情的情況下,被拉著做測試。測試的內容也就是 GIS 的客戶端,功能沒有幾個,測試很枯燥,被叫著翻來覆去做同一件事。郁悶的是部門經理的座位在我后面,雖然隔了有 4 左右距離,但是他完全能看到我在做什么事情。他批評了我好幾次“該做什么就做什么。叫你做什么就做什么。”不說了,我并不喜歡發牢騷……

          鑒于工作中的種種因素,我想跳槽,換個環境。換工作,我是 java 程序員,而目前的工作無非就是寫 UI , swing 編程。類似的工作可不那么好找,而且也打算多長點見識。所以決定離開成都去北京找工作,而且找 J2EE 方面的。辭職前我打算做個 JSP 方面的小應用、再把 JAVA 好好復習一遍這樣才對新工作有所準備。

          說做就做吧。先學習 JSP (畢業前,曾自學過一點點),學習 JSP 前,有必要學習 servlet 。這就有了這一系列學習筆記……

           

          <!--[if !supportLists]--> 1.       <!--[endif]--> 什么是Servlet?

           

          Java Servlet java 服務器小程序)是一個基于 Java 技術的 Web 組件,運行在服務器端,由 Servlet 容器所管理,用于生成動態的內容。

           

          <!--[if !supportLists]--> 2.       <!--[endif]--> servletapplet區別?

           

          相同點:

          <!--[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 =”1.0” encoding=”ISO-8859-1”?>

          <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 。

           

           

          posted on 2007-03-09 10:48 -274°C 閱讀(2337) 評論(6)  編輯  收藏 所屬分類: JSP


          FeedBack:
          # re: servlet學習筆記(1)
          2007-03-09 11:02 | 壞男孩
          up!  回復  更多評論
            
          # re: servlet學習筆記(1)
          2007-03-09 11:09 | αβγ
          我是一邊看書,一邊實踐,一邊總結的。呵呵,白天上班沒有時間學習,只有晚上回去能看下書。打算用比較快的速度把jsp看了,做個小的應用。這樣把知識應用在實踐中,也便于深刻掌握。做完這一步,再往下走。其實得感謝各位朋友的支持,讓我更愛總結,寫blog促進了學習啊。  回復  更多評論
            
          # re: servlet學習筆記(1)
          2007-03-09 11:17 | DoubleHeart
          只有這些,你的工作還會不好找
          你應該多學一些思想與架構的東西  回復  更多評論
            
          # re: servlet學習筆記(1)
          2007-03-09 11:30 | αβγ
          做完這步,打算學習筐架、架構。  回復  更多評論
            
          # re: servlet學習筆記(1)
          2007-03-09 11:48 | L
          現在java程序員遍地都是,你離開成都來北京要考慮清楚啊。  回復  更多評論
            
          # re: servlet學習筆記(1)
          2007-03-09 14:05 | BeanSoft
          面試必備題目(雖然不一定常用, 僅用于面試, 面試就是把人搞的都不會然后砍價, 當然您可以講我可以查資料完成, 但是面試的時候就是沒道理的):
          request.getAttribute() 和 request.getParameter() 有何區別?
          response.sendRedirect() 和 forward() 區別?
          <%@include file="xxx.jsp"%>
          和 <jsp:include> 區別?
          List 和 Map 區別?
          Struts 和 Spring 自動填充表單參數到 Bean 的大致原理?
          說一下你用的 Spring + Hibernate 的方框圖? 您都用到了哪些部分?

          try {
          Connection conn = ...;
          Statement stmt = ...;
          } catch(Exception ex) {
          }

          這段代碼有什么不足之處?

          HTML 的 form 提交之前如何驗證數值不為空? 為空的話提示用戶并終止提交?  回復  更多評論
            

          常用鏈接

          留言簿(21)

          隨筆分類(265)

          隨筆檔案(242)

          相冊

          JAVA網站

          關注的Blog

          搜索

          •  

          積分與排名

          • 積分 - 914107
          • 排名 - 40

          最新評論

          主站蜘蛛池模板: 乐平市| 伊宁县| 昆山市| 威海市| 东乡族自治县| 本溪市| 固安县| 樟树市| 靖边县| 松江区| 玉山县| 益阳市| 错那县| 泾阳县| 山阴县| 沁水县| 津南区| 准格尔旗| 宁安市| 太原市| 延吉市| 锦州市| 孟村| 洪江市| 靖安县| 孟连| 南部县| 讷河市| 顺义区| 齐河县| 泰来县| 汨罗市| 佳木斯市| 东城区| 天长市| 锦屏县| 石河子市| 东乡县| 信阳市| 会理县| 延边|