1. 程式人生 > >實現servlet介面並優化程式碼解讀

實現servlet介面並優化程式碼解讀

3.2.1 方式一:直接實現類實現servlet介面,並全部重寫servlet介面中的方法

實現類:

//Servlet 介面是用來獲取瀏覽器請求(request)的資料,以及將處理完的資料響應(response)給瀏覽器 public class ServletDemo1 implements Servlet {         //第一次請求訪問     public void init(ServletConfig servletConfig) throws ServletException { }     //處理請求資料(業務邏輯的處理);每當獲取一個請求,返回一個響應資訊     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         System.out

.println("你好,servlet");     }     //關閉伺服器,進行銷燬     public void destroy() { }         public ServletConfig getServletConfig() { return null; }         public String getServletInfo() { return null; } }

Web.xml配置檔案:

<!--配置servlet具體資訊-->     <servlet>         <!--註冊的servlet的名稱-->         <servlet-name>demo1</servlet-name>         <!--servlet

實現類的檔案路徑 - 包名 + 類名-->         <!--配置servlet 包名 + 類名-->         <servlet-class>com.heima.cn.a_servlet.ServletDemo1</servlet-class>     </servlet>    <!--配置servlet對映路徑-->     <servlet-mapping>         <!--獲取註冊的servlet名稱-->         <servlet-name>demo1</servlet-name>         <!--
訪問的url地址,前面需要加 / -->       <!--  url地址 -> 協議(http(廣泛的協議),https(更安全的協議),ftp(上傳下載協議)) +

      +  域名(www.baidu.com or ip地址) +埠號(預設80.瀏覽器自動新增) + 資源位置(index.com +

      + 鍵值對 id  = ?)    -->         <!--元件的訪問路徑-->         <url-pattern>/demo1</url-pattern>     </servlet-mapping>

瀏覽器訪問:

3.2.2 方式二:GenericServlet優化方案

3.2.2.1 自己定義的GenericServlet優化實現

實現:

1.自定義抽象類GenericServlet實現servlet介面,獲取servlet所有方法,並將service()方法定義為抽象方法

2.自定義servletdemo類繼承抽象類GenericServlet,實現並重寫service方法

實現類

public  abstract class GenericServletDemo1 implements Servlet {     public void init(ServletConfig servletConfig) throws ServletException { }     public ServletConfig getServletConfig() { return null; }     //抽象方法定義格式    //    void destroy();         //抽象方法 -- 修飾符 abstract 返回值型別 方法名 (引數列表)     public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException ;    //一般方法     public String getServletInfo() { return null; }     public void destroy() { } }

繼承類

public class ServletDemo2 extends  GenericServletDemo1 {     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         System.out.println("實現了servlet");     } }

Web.XML配置檔案

<!--配置servlet具體資訊--> <servlet>     <servlet-name>demo2</servlet-name>     <servlet-class>com.heima.cn.a_servlet.ServletDemo2</servlet-class> </servlet><!--配置servlet對映路徑--> <servlet-mapping>     <servlet-name>demo2</servlet-name>     <url-pattern>/demo2</url-pattern> </servlet-mapping>

結果

網頁輸入                                                                                         控制檯輸出

3.2.2.2 系統定義的GenericServlet優化實現

實現類

public class ServletDemo3 extends GenericServlet {     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         System.out.println("系統定義的servlet優化實現");     } }

web.xml配置檔案

<!--配置servlet具體資訊--> <servlet>     <servlet-name>demo3</servlet-name>     <servlet-class>com.heima.cn.a_servlet.ServletDemo3</servlet-class> </servlet><!--配置servlet對映路徑--> <servlet-mapping>     <servlet-name>demo3</servlet-name>     <url-pattern>/demo3</url-pattern> </servlet-mapping>

結果:

        網頁輸入資料                                                      控制檯輸出結果

                        

3.2.3 方式三: HttpServlet 優化方案

實現 ---- 區分表單(from)中提交的方法(method= get or method = post)

1.自定義抽象類HttpServlet繼承抽象類GenericServlet類,實現service方法

2.呼叫service方法,將引數型別(ServletRequest servletRequest, ServletResponse servletResponse)強轉為HttpServletRequest(提供請求資訊)和  HttpServletResponse(傳送響應資訊)介面

多型轉換:Interface HttpServletRequest  implements ServletRequest(介面)

3.呼叫HttpServletRequest介面中的public String getMethod()方法,用來區分表單提交的方法

4.判斷表單提交方法型別,分別實現doGet()方法 和doPost()方法

5.自定義servlet類繼承抽象類HttpServlet,呼叫並重寫doGet()方法 和doPost()方法

6.注意點:表單當中的action引數需要和配置檔案web.xml中url地址一致

<form action="/demo4" method="get" > 表單資訊

<url-pattern>/demo4</url-pattern>  對映檔案資訊

抽象類

public abstract class HttpServlet extends GenericServlet(系統自定義優化實現) {     public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {         //Interface HttpServletRequest  implements ServletRequest(介面) ---> 擴充套件 javax.servlet.ServletRequest 介面,為 HTTP servlet 提供請求資訊

  多型強制轉換型別,呼叫HttpServletRequest中的getmethod方法,獲取發出請求的http方法名稱(get或post)         HttpServletRequest request = (HttpServletRequest) servletRequest;         //Interface HttpServletResponse implements servletResponse(介面)--> 擴充套件 ServletResponse 介面以提供特定於 HTTP 的傳送響應功能         HttpServletResponse response = (HttpServletResponse) servletResponse;        service(request,response);     }     public void service(  HttpServletRequest request,   HttpServletResponse response) throws ServletException, IOException {        //HttpServletRequest介面中的getmethod方法 // public String getMethod() --> 返回用於發出此請求的 HTTP 方法的名稱,例如 GETPOST PUT         String  req = request.getMethod();         if(req.equalsIgnoreCase("get")){             //System.out.println("get方法獲取表單");             doGet(request,response);         }else  if (req.equalsIgnoreCase("post")){             //System.out.println("post方法獲取表單");             doPost(request,response);         }else {             System.out.println("servlet");         }     }     public void doPost(HttpServletRequest request, HttpServletResponse response) { }     public void doGet(HttpServletRequest request, HttpServletResponse response) { } }

實現類

public class ServletDemo4 extends HttpServlet {     public void doPost(HttpServletRequest request, HttpServletResponse response) {         //super.doPost(request, response);         System.out.println("獲取post方法提交的表單");     }     public void doGet(HttpServletRequest request, HttpServletResponse response) {        // super.doGet(request, response);         System.out.println("獲取get方法提交的表單");     } }

index.html 表單資訊

<body> <form action="/demo4" method="get" >  跳轉的url地址     <input type="submit" value="提交"> </form> </body>

Web.xml 配置檔案(servlet資訊)

  <!--配置servlet具體資訊-->

    <servlet>

        <servlet-name>demo4</servlet-name>

        <servlet-class>com.heima.cn.a_servlet.ServletDemo4</servlet-class>

    </servlet>

    <!--配置servlet對映路徑-->

    <servlet-mapping>

        <servlet-name>demo4</servlet-name>

        <url-pattern>/demo4</url-pattern>  表單的action

    </servlet-mapping>

結果:

網頁資訊介面                                             控制檯資訊介面

                   

系統定義的HttpServlet

自定義類

public class ServletDemo5 extends HttpServlet{

    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       // super.doGet(req, resp);

        System.out.println("這是系統的doGet方法");

    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

       /// super.doPost(req, resp);

        System.out.println("這是系統的doPost方法");

    }

}

配置檔案web.xml

<!--配置servlet具體資訊--> <servlet>     <servlet-name>demo5</servlet-name>     <servlet-class>com.heima.cn.a_servlet.ServletDemo5</servlet-class> </servlet><!--配置servlet對映路徑--> <servlet-mapping>     <servlet-name>demo5</servlet-name>     <url-pattern>/demo5</url-pattern> </servlet-mapping>

表單資訊

<body> <form action="/demo5" method="get">     <input type="submit" value="註冊"> </form> </body>