在我上篇關於Servlet API 的文章中,我說明了在創建任何Servlet時你必須直接或間接地實現Servlet接口(間接地實現就是通過擴張那些實現了Servlet接口的類,這些類是GenericServlet和HttpServlet).
如果想創建協議相關的servlet,例如htt servlet,那麼就應該擴展HttpServlet類,對於協議不相關的servlet就以應該擴展Genericervlet類。 在這裏我不會詳細解釋GenericServlet,HttpServlet,因爲我會在其他獨立章節解釋他們。
簡單來說有三種方式創建servlet
1) 擴展HttpServlet 類
2)擴展GenericSerlet類
3)通過擴展Servlet接口
注意:但是,您應該始終選擇創建servlet的第一種方式,即通過擴展HttpServlet類。
接口SErvlet 接口中的方法
這裏是在Servlet接口中的清單:
1)void destory(): 該方法在Servlets壽命週期最後面被servlet容器調用。與service()方法在生命週期被多次調用不同,這個方法在生命週期完成是被容器調用一次。一旦destory()被容器調用就不會在調用servlet的service()方法。
2)void init(ServletConfig config): 當Servlet容器啓動時(當web服務器啓動時開啓)載入所有的servlet並實例化它們。在每個servlet實例調用init()後,這個方法就會初始化servlet。
3) void service(SerevletRequest req,ServletResponse res): 這是唯一的在servlet生命週期中被多次調用的方法。這個方法處理客戶端的請求,在服務器接受一次用戶請求就調用一次此方法。
4)ServletConfig getServletConfig(): 返回一個ServletConfig對象,包含此servlet初始化和啓動參數。
5)java.lang.String getServletInfo(): 返回關於此servlet的信息,例如作者,版本和版權。
例子:
在這個例子中,我們通過擴展Servlet接口創建一個servlet類。
index.html
<a href="welcome">Click here to call the servlet</a>
DemoServlet.java
mport java.io.*;
import javax.servlet.*;
public class DemoServlet implements Servlet{
ServletConfig config=null;
public void init(ServletConfig config){
this.config=config;
System.out.println("Initialization complete");
}
public void service(ServletRequest req,ServletResponse res)
throws IOException,ServletException{
res.setContentType("text/html");
PrintWriter pwriter=res.getWriter();
pwriter.print("<html>");
pwriter.print("<body>");
pwriter.print("<h1>Servlet Example Program</h1>");
pwriter.print("</body>");
pwriter.print("</html>");
}
public void destroy(){
System.out.println("servlet life cycle finished");
}
public ServletConfig getServletConfig(){
return config;
}
public String getServletInfo(){
return "A Demo program written by Chaitanya";
}
}
web.xml
<web-app>
<servlet>
<servlet-name>Beginnersbook</servlet-name>
<servlet-class>DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Beginnersbook</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
具體操作:
提前安裝好jdk和tomcat,我這裏安裝的是jdk8 和tomcat7.
1) 將tomcat 中lib文件夾下的servlet.jar 複製到jdk的jre/lib/ext目錄下,方便我們後面的編譯。
cp ./lib/servlet.jar /opt/jdk8/jre/lib/ext/
2) 在tomcat 的webapps 文件夾中創建我們的目錄demoservlet,在此目錄中創建WEB-INF,在WEB-INF中創建classes文件夾用來保存我們將來的servlet的class文件,在WEB—INF 下創建web.xml文件
mkdir demoservlet
mkdir ./demoservlet/classes
touch ./demoservlet/web.xml
3)複製我們的DemoServlet.java 到上面的classes文件夾下,並編譯,填充web.xml內容
javac DemoServlet.java
4) 啓動tomcat並驗證,瀏覽器輸入:http://localhost:8080/demoservlet/welcome
如果看到大寫黑體的“Servlet Example Program”
那麼則證明成功了。