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次