SERVLET(1)

SERVLET(1)

java servlet是一種使用java編寫的cgi程序

CGI:通用網關接口,與傳統CGI不同的是,Servlet是使用一種多線程的程序處理方式,性能要求較高。

在servlet中可以控制html代碼,則所有的html代碼都必須使用out.println()一行一行輸出。

Servlet被服務器實例化後,容器運行其init方法,請求到達時運行其service方法,service方法自動派遣運行與請求對應的doXXX方法(doGet,doPost)等,當服務器決定將實例銷燬的時候調用其destroy方法。
與cgi的區別在於servlet處於服務器進程中,它通過多線程方式運行其service方法,一個實例可以服務於多個請求,並且其實例一般不會銷燬,而CGI對每個請求都產生新的進程,服務完成後就銷燬,所以效率上低於servlet。

一,Servlet的生命週期

首先創建servlet,然後初始化servlet,如果初始化成功那麼,使用servlet提供服務,如果沒有成功,那麼就卸載servlet,當servlet完成服務,則銷燬servlet,最後卸載servlet。

(1)生命週期的方法描述

初始化時期

public void init(ServletConfig config)throws ServletException

執行時期

public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException

public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException

結束時期

public void destroy()

Servlet類本身也是java類,所以也要保存在class文件夾下。

實例:

1,編寫Servlet類

package cn.lxh.servlet;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SimpleServlet extends HttpServlet {

 //初始化
 public void init(ServletConfig config) throws ServletException
 {
  System.out.println("----初始化----");
 }
 //處理
 public void doGET(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
 {
  PrintWriter out=resp.getWriter();
     out.println("<html>");
     out.println("<head>");
     out.println("</head>");
     out.println("<body>");
     out.println("<h1>hello</h1>");
     out.println("</body>");
     out.println("</html>");
 }
 public void doPost(HttpServletRequest req,HttpServletResponse resp) throws IOException,ServletException
 {
  this.doGET(req, resp);
 }
 //銷燬
 public void destroy()
 {
  System.out.println("----銷燬----");
 }
}

2,通過web映射訪問Servlet程序

需要配置web.xml文件

<Servlet>

  <servlet-name>simple</servlet-name>

  <servlet-class>cn.lxh.servlet.SimpleServlet</servlet-class>

  <load-on-startup>1</load-on-startup>

</Servlet>

<!--在此加入新的servlet-->

<servlet-mapping>

  <servlet-name>simple</servlet-name>

  <url-pattern>/demo</url-pattern><!--瀏覽器中的相對地址-->

</servlet-mapping>

在瀏覽器中輸入..../demo,然後找到servlet-mapping中的servlet名稱,然後通過servlet名稱找到servlet的class類

在編譯Servlet時,會出現找不到servlet包的問題,因爲jdk包含j2se包,而java ee包不在java se之中,需要單獨配置包。

在tomcat中,存在servlet的全部庫文件。

將tomcat\common\lib\servlet.jar包拷貝到jdk安裝路徑下的jre\lib\ext下

當客戶端發送http請求使用get方法時就調用doGet()方法,http的缺省方法就是GET;當客戶端發送http請求使用POST方法時就調用doPost()方法。

Servlet生命週期:

1,初始化: 默認情況下,在第一次使用Servlet程序時初始化;也可以在容器啓動時初始化Servlet程序,通過配置web.xml

在servlet配置中加入<load-on-startup>1</load-on-startup>,表示服務器啓動時初始化Servlet程序。

其中1表示優先級,可以爲2,3,4等值。

2,服務: doGet(),doPost(),直接在瀏覽器中輸入地址就是get請求

3,銷燬:a,服務器關閉;b,此servlet長時間不使用,銷燬也只執行1次

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