在前面的文章中筆者就Servlet總體的框架有了一個認知,基本瞭解了其運做的原理。這篇文章html
筆者將會對Servlet開發的方法和Servlet的配置作一個總結。java
在前面Servlet基礎框架、源碼學習中咱們知道了Servlet框架圖。連接以下:web
http://blog.csdn.net/kiritor/article/details/8967528瀏覽器
這裏咱們簡要的看看其框架圖:app
根據上述框架圖和對源碼的簡單閱讀,能夠看出的是開發Servlet的方式基礎繼承、實現上述框架
三種不一樣的Servlet(Servlet、GenericServlet、HttpServlet)ide
第一種方式,不經常使用,實現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; } }
這種方式也是比較不常見的,對業務邏輯的處理也是集中在Servcice方法中的。this
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是基於Http協議的。根據Http協議的特色,url
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是如何配置的吧。咱們知道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>本次的總結也就到這裏了。其詳細配置後續在作總結。