開發Servlet的三種方式和Servlet配置詳解

         前言

                  在前面的文章中筆者就Servlet整體的框架有了一個認知,基本瞭解了其運作的原理。這篇文章

            筆者將會對Servlet開發的方法和Servlet的配置做一個總結。

         Servlet開發三種方式

                  在前面Servlet基礎框架、源碼學習中我們知道了Servlet框架圖。鏈接如下:

                   http://blog.csdn.net/kiritor/article/details/8967528

                   這裏我們簡要的看看其框架圖:

             

                      根據上述框架圖和對源碼的簡單閱讀,可以看出的是開發Servlet的方式基礎繼承、實現上述

               三種不同的Servlet(Servlet、GenericServlet、HttpServlet)

              實現Servlet接口

                      第一種方式,不常用,實現Servlet接口開進行Servlet開發。此方法業務邏輯的劃分不太明確。 

package com.kiritor.servlet;  import java.io.IOException; import java.io.PrintWriter;  import javax.servlet.Servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  import com.sun.corba.se.impl.ior.WireObjectKeyTemplate;  /**  * Servlet implementation class ServletImp  */ public class ServletImp implements Servlet { 	private static final long serialVersionUID = 1L;             /**      * @see HttpServlet#HttpServlet()      */     public ServletImp() {         super();     }     @Override     public void destroy() {     	     } 	@Override 	public void init(ServletConfig config) throws ServletException { 		 	} 	@Override 	public ServletConfig getServletConfig() { 		return null; 	} 	/** 	 * service方面裏面來處理業務的邏輯*/ 	@Override 	public void service(ServletRequest req, ServletResponse res) 			throws ServletException, IOException { 		PrintWriter writer = res.getWriter(); 		writer.write("Imp Servlet!");                 writer.flush();                 writer.close();           } 	@Override 	public String getServletInfo() { 		// TODO Auto-generated method stub 		return null; 	}  } 

              繼承GenericServlet

                 這種方式也是比較不常見的,對業務邏輯的處理也是集中在Servcice方法中的。

          

package com.kiritor.servlet;  import java.io.IOException; import java.io.PrintWriter;  import javax.servlet.GenericServlet; import javax.servlet.Servlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse;  /**  * Servlet implementation class ExGenericServlet  */ public class ExGenericServlet extends GenericServlet implements Servlet { 	private static final long serialVersionUID = 1L;             /**      * @see GenericServlet#GenericServlet()      */     public ExGenericServlet() {         super();         // TODO Auto-generated constructor stub     }  	/** 	 * @see Servlet#service(ServletRequest request, ServletResponse response) 	 */ 	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { 		PrintWriter writer = response.getWriter(); 		writer.write("Imp Servlet!");                 writer.flush();                 writer.close();  }  } 

                繼承HttpServlet

                     這種方式是最常用的方式,HttpServlet是基於Http協議的。根據Http協議的特點,

                 HttpServlet提供了不同的業務邏輯的處理的方法,而不是將所有的業務邏輯堆積到

                 service方法裏去處理。業務更加的清晰,最常用的方法就是doPost、doGet方法了。                    

package com.kiritor.servlet;  import java.io.IOException; import java.io.PrintWriter;  import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;  /**  * Servlet implementation class ExHttpServlet  */ public class ExHttpServlet extends HttpServlet { 	private static final long serialVersionUID = 1L;             /**      * @see HttpServlet#HttpServlet()      */     public ExHttpServlet() {         super();         // TODO Auto-generated constructor stub     }      /**      * 繼承HttpServlet一般在doPost、doGet方法      * 裏面處理業務邏輯      * 之後由service回調。*/ 	/** 	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 	 */ 	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 		this.doPost(request, response); 	}  	/** 	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 	 */ 	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 		PrintWriter writer = response.getWriter(); 		writer.write("Imp Servlet!");                 writer.flush();                 writer.close();        }  } 
                   以上就是servlet實際開發中用到的方法了,不過一般情況下采用第三種方式較多,因爲我們

                的web應用基本都是通過Http協議進行通信的。

            Servlet的配置

                   瞭解了Servlet是如何開發的,接下來我們來看看Servlet是如何配置的吧。我們知道Tomcat

                 是通過web.xml文件得到Servlet的配置信息,從而生成ServletConfig對象傳遞給init方法的。

                 這裏筆者只是對Servlet的配置做一個簡單的描述,至於後續的監聽器配置、過濾器配置。到時

                 在做總結。

                   好了,直接看看配置文件吧:

<servlet>           <description></description>     <display-name>HelloServlet</display-name>     <!--名字任意,不過建議和類名一樣-->     <servlet-name>HelloServlet</servlet-name>     <!--類名+包路徑-->     <servlet-class>com.kiritor.servlet.HelloServlet</servlet-class>       <!--初始化是的參數,必須在這裏進行配置-->       <init-param>       <description></description>       <param-name>info</param-name>       <param-value>this is a init message</param-value>     </init-param>   <!--映射配置-->   </servlet>   <servlet-mapping>   <!--和上述的Servlet名一樣-->   <servlet-name>HelloServlet</servlet-name>   <!--瀏覽器的訪問路徑-->   <url-pattern>/HelloServlet</url-pattern>   </servlet-mapping>
                   本次的總結也就到這裏了。其詳細配置後續在做總結。

          

               

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