国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

java學習筆記—Servlet技術(11)

2019-11-14 23:24:35
字體:
來源:轉載
供稿:網友
java學習筆記—Servlet技術(11)

如果大家要開發一個動態的網站,那么就必須要學習一種動態的網頁開發技術。那么在SUN提供的JavaEE中主要包含兩種開發動態網頁的技術:Servlet和jsp技術。

Servlet技術簡介

Servlet技術是SUN提供的一種開發動態網頁的核心組件之一。可以方便的開發動態網頁。主要用得語言是java,開發者只需要實現相應的接口或者繼承相應的類,那么你的java文件就是一個動態的網頁。當然好需要一些額外的配置即可。

一個Servlet其實就是一個運行在web server上得一個java程序。

Servlet結構體系

為了方便開發者進行基本的動態網頁開發,那么SUN提供了一整套接口和類幫助開發者進行高效的開發。

1 Servlet接口

2 GenericServlet類GenericServlet實現了Servlet接口的抽象類。

3 HttpServlet類

HttpServlet繼承了GenericServlet的抽象類。

Servlet體驗
1.    建立動態網站的目錄結構2.    編寫一個動態網頁如下HelloServlet.javapackage cn.itcast.servlets;import javax.servlet.*;import java.io.*;public class HelloServlet extends GenericServlet{    public void service(ServletRequest req,ServletResponse res)       throws ServletException,IOException{       // 創建一個需要輸出的數據       String data = "hello servlet!";       // 將以上的數據發送給瀏覽器進行顯示       res.getOutputStream().write(data.getBytes());    }}
3.    編譯以上的HelloServlet.java將JavaEE需要的jar包引入到classpath環境變量set classpath=%tomcat_home%/lib/servlet-api.jar編譯D:/test>javac -d . HelloServlet.java
4.    將編譯好的包連同class文件剪切到網站的WEB-INF/classes目錄5.    將class文件映射為瀏覽器需要的URL路徑
修改web.xml文件如下<?xml version="1.0" encoding="ISO-8859-1"?><web-app xmlns="http://java.sun.com/xml/ns/javaee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"    version="2.5">     <servlet>        <servlet-name>helloservlet</servlet-name>        <servlet-class>cn.itcast.servlets.HelloServlet</servlet-class>     </servlet>     <servlet-mapping>        <servlet-name>helloservlet</servlet-name>        <url-pattern>/helloservlet</url-pattern>    </servlet-mapping></web-app>
6.    將編寫好的網站部署到tomcat的webapps目錄http://localhost:8080/test/helloservlet 

運行結果:hello servlet

總結:

  1. 編譯servlet比較繁瑣。
  2. 配置servlet比較繁瑣。

2 IDE體驗

  1. 自動編譯
  2. 自動配置
  3. 集成發布
Servlet、GenericServlet和HttpServlet

1 Servlet接口

Servlet接口主要用于定義初始化servlet、處理用戶請求、從web server中移除servlet等生命周期方法。如果開發者需要實現servlet接口,那么推薦繼承GenericServlet或HttpServlet。

1. The servlet is constructed, then initialized with the init method.      ? 構造函數、init()2. Any calls from clients to the service method are handled.         ? service()3. The servlet is taken out of service, then destroyed with the destroy method, then garbage collected and finalized.            

舉例1:體驗生命周期方法。

public class Demo2 extends GenericServlet {    // 創建對象    public Demo2(){        System.out.

總結:

1.    servlet 執行的流程是:創建對象?初始化?處理用戶請求?銷毀2.    創建對象?初始化只是執行一次3.    銷毀在服務器關閉的時候進行執行4.    只有用戶第一次訪問servlet時候如果web server中沒有該servlet的對象那么才創建。(懶裝載)5.    servlet定義的生命周期方法全部由web server自己調用(回調)6.    servlet全部是單例7.    一般在實際開發中主要使用的service方法。

2 GenericServlet抽象類

該類是一個通用的servlet類,實現Servlet和ServletConfig接口。如果要實現HTTTP協議,那么請繼承HttpServlet類。

該類使得定義servlet變得簡單,提供了一些日志、ServletConfig、以及版本的方法。內部聲明了一個ServletContext接口類。

該類默認的對Servlet接口的方法進行空實現。但是對于init方法它獲取了傳遞進來的ServletConfig類賦值給了自己定義的ServletConfig成員變量。隨后調用了自己的inti()方法。

定義了唯一的一個抽象方法service().

3 HttpServlet抽象類

如果一個網站需要實現HTTP協議的Servlet,那么必須是HttpServlet的子類。那是作為HttpServlet的子類必須重寫以下方法中的至少一個:

doGet, if the servlet supports HTTP GET requests     ? 處理用戶的GET請求doPost, for HTTP POST requests                     ? 處理用戶的POST請求doPut, for HTTP PUT requests                     ? 處理用戶的PUT請求doDelete, for HTTP DELETE requests             ? 處理用戶的DELETE請求init and destroy, to manage resources that are held for the life of the servlet ? 生命周期方法getServletInfo, which the servlet uses to provide information about itself    ? 獲取servlet信息

我們應該主要的重寫doGet和doPost方法。

舉例:使用HttpServlet實現處理用戶的請求。

public class Demo3 extends HttpServlet {    public Demo3(){        System.out.println("創建對象");    }    public void init(ServletConfig config) throws ServletException {        // TODO Auto-generated method stub        super.init(config);        System.out.println("初始化");    }    // 處理用戶的get請求,地址欄直接回車、a、form默認    public void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        System.out.println("處理用戶的get請求");    }    // form表單中的method修改為post    public void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        System.out.println("處理用戶的POST請求");    }}

思考:HttpServlet繼承自GenericServlet實現了Servlet接口,但是自己使用doGet和doPost方法處理用戶的請求,那么還需要原來定義的service()?

Tomcat處理用戶請求的時候一定執行的Servlet接口中定義的service()

但是用請求的Servlet如果直接繼承了HttpServlet那么還是執行Servlet接口的service()方法

該方法中默認調用HttpServlet中自定義的實現了Http協議的service(),該方法中又將請求轉發給了相應的doGet或doPost()導致最終處理用戶請求的方法是doGet或doPost()。

但是如果開發者手工的重寫了Servlet接口的service方法,那么默認不能進行轉發。

舉例1: 閱讀以下程序的運行結果。

public class Demo3 extends HttpServlet {    public Demo3(){        System.out.println("創建對象");    }    public void init(ServletConfig config) throws ServletException {        // TODO Auto-generated method stub        super.init(config);        System.out.println("初始化");    }    // 處理用戶的get請求,地址欄直接回車、a、form默認    public void doGet(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        System.out.println("處理用戶的get請求");    }    // form表單中的method修改為post    public void doPost(HttpServletRequest req, HttpServletResponse resp)            throws ServletException, IOException {        System.out.println("處理用戶的POST請求");    }    @Override    public void service(ServletRequest req, ServletResponse res)            throws ServletException, IOException {        super.service(req, res);        System.out.println("service方法");    }    @Override    public void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {        super.service(req, resp);        System.out.println("httpservlet service");    }}

運行結果如下:

創建對象

初始化

處理用戶的POST請求

httpservlet service

service方法


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南澳县| 方山县| 庆元县| 弋阳县| 安泽县| 上蔡县| 花垣县| 德安县| 伊吾县| 承德县| 蒙城县| 南召县| 潜江市| 乐安县| 东山县| 天长市| 三河市| 恩施市| 临潭县| 德州市| 博野县| 星子县| 武汉市| 元谋县| 威宁| 庐江县| 陈巴尔虎旗| 南岸区| 博爱县| 大冶市| 广丰县| 蚌埠市| 和硕县| 会泽县| 敦煌市| 巴林右旗| 石阡县| 南涧| 林西县| 伊吾县| 饶平县|