Servlet知識點<二>

手動創建並且部署一個Servlet:
1.寫代碼        extends HttpServlet
        public void service(HttpServletRequest request,
                HttpServletResponse response)
                throws ServletException, IOException{
            request.setCharacterEncoding("GBK");
            //1.設置響應類型
            response.setContentType("text/html;charset=GBK");
            //2.獲取輸出流
            PrintWriter out = response.getWriter();
            //3.使用輸出流
            out.println();
            out.flush();
        }
2.編譯
    tomcat安裝目錄/lib/servlet-api.jar
3.部署
    1)創建web應用目錄結構
        webapps/myweb/
            |-WEB-INF(必需)
                |-classes
                |-web.xml
            |-form.html
    2)編譯後的pag.DateServlet.class copy myweb/WEB-INF/classes
    3)編寫web.xml    (DateServlet)
        <servlet>
            <servlet-name>date</servlet-name>
            <servlet-class>pag.DateServlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <serlvet-name>date</servlet-name>
            <url-pattern>/mydate</url-pattern>
        </servlet-mapping>
4.運行
    http://127.0.0.1:8888/myweb/mydate
    <a href="/myweb/mydate">....</a>
    <form action="/myweb/mydate">....</form>
    獲取表單元素中輸入的內容:
        String str = request.getParameter("文本框的名字");

--------------------------------------
一、使用MyEclipse簡化Servlet 開發
    1.右鍵創建web project
    2.Project Name:項目名稱
      Source folder:存在java源碼
      Web root folder:本地開發路徑
      Context root URL:服務器上的web應用名(http://127.0.0.1:8888/項目名/)
    3.創建servlet(選擇自動生成web.xml)
    4.部署(配置tomcat,把自己安裝tomcat和MyEclipse整合到一起)
        配置tomcat的步驟:window-preferences-展開MyEclipse-展開servers-展開tomcat-選擇tomcat6-選中Enable並且選擇tomcat的安裝路徑
        ****注意:部署新項目後,需要重啓Tomcat****
    5.運行
        http://127.0.0.1:8888/servlet2/hello
        http://127.0.0.1:8888/testservlet/servlet/FirstServlet

    URL的組成:
        協議://主機名ip:端口號/資源
        協議://主機名ip:端口號/web應用/url-pattern
        協議://主機名ip:端口號/web應用/first.html
二、Servlet的生命週期
    1)client --> server 請求發出後的一系列執行過程:
        1.寫URL,回車
        2.tomcat接收請求,解析URL,得到 web應用名(web.xml)
        3.繼續解析URL,得到 url-pattern
        4.在web.xml 匹配 url-pattern, 得到 servlet-name
        5.根據 servlet-name 匹配到 servlet-class
        6.tomcat 判斷 client 是第一次請求
            是- 使用JAVA反射機制創建servlet對象(構造方法),初始化(init),處理第1次請求(service)並且給client響應
            否- 處理本次請求(service)並且給client響應
        7.tomcat 等待狀態,如果有client請求,從第2步循環
        8.tomcat 停止或重啓時,銷燬 servlet(destroy方法被調用.回覆servlet對象資源)
    2)tomcat 中 servlet生命週期,分爲4個階段:
                        被調用的時間        被調的方法            被調次數
                實例化    client第一次請求    構造方法            1次
                初始化    第1次請求,實例化後    init            1
                服務        有請求到            service            N次
                                            doGet/doPost
                銷燬        server停,重啓        destroy            1
    3)讀取web.xml
        1.在tomcat啓動時,會依次加載webapps下所有web應用的web.xml,
            同時web.xml的內容讀到 ServletContext 對象(ServletContext是web.xml文件在內存中的表現)
            一個web應用對應一個ServletContext.
        2.每讀到一個<servlet></servlet>,tomcat會把這個標籤中的內容存到 ServletConfig對象中
    應用:
        ServletContext: 獲取<context-param>中定義的全局初始化參數
            web.xml中的配置(在<serlvet>標籤的外面定義):
                    <context-param>
                        <param-name>encode</param-name>
                        <param-value>GBK</param-value>
                    </context-param>
            獲取值:
                String str = this.getServletContext().getInitParameter("參數名");
                
                
        ServletConfig: 獲取<init-param>中定義的初始化參數
            web.xml中的配置(在<serlvet>標籤的裏面定義):
                    <servlet>
                        <servlet-name>CountServlet</servlet-name>
                        <servlet-class>com.zpark.servlet.CountServlet</servlet-class>
                        <init-param>
                            <param-name>count</param-name>
                            <param-value>1000</param-value>
                        </init-param>
                      </servlet>
            獲取值:
                String str = this.getServletConfig().getInitParameter("參數名");
    4)servlet的多線程訪問
        注意:servlet編程時,因爲tomcat運行過程中,只創建一個servlet對象,需要同時爲多個client服務,就需要考慮線程安全問題
            1.對敏感代碼加線程鎖
            2.儘量不定義成員變量

三、Servlet的通訊[掌握]
    Servlet:JAVA編寫的在服務器上運行的小程序/類.接收client請求,處理,響應.
    1.include:包含
        應用場景:在複雜動態網頁中,有公共部分可提取,可以把公共部分分別定義成servlet,使用include合併到一起.
        使用:        //獲取請求分發對象
                RequestDispatcher rd = request.getRequestDispatcher("/url-pattern");
                //include
                rd.include(request, response);
        特點:        1)地址欄不變
                2)服務器端的轉發(在服務端運行)
                3)看到的是所有servlet的結果之和
                4)共享同一個request
    2.forward:轉發
        應用場景: 一個Servlt從數據庫中取出數據,轉到另外一個servlet進行顯示
        使用:        //獲取請求分發對象
                RequestDispatcher rd = request.getRequestDispatcher("/url-pattern");
                //forward
                rd.forward(request, response);
        特點:        1)地址欄不變
                2)服務器端的轉發(在服務端運行)
                3)永久轉向(看到的是最後一個servlet的處理結果)
                4)共享同一個request






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章