Servlet
servlet applet:運作在伺服器端的小程式
- servlet 其實就是一個接口,定義了java類被浏覽器通路到的規則。
-
Sun公司在其API中提供了一個servlet接口,使用者若想用發一個動态web資源(即開發一個Java程式向浏覽器輸出資料),需要完成以下2個步驟:
1、編寫一個Java類,實作servlet接口。
2、把開發好的Java類部署到web伺服器中。
-
Java Servlet是和平台無關的伺服器端元件,它運作在Servlet容器中。Servlet容器負責Servlet和客戶的通信以及調用Servlet的方法,Servlet和客戶的通信采用“請求/響應”的模式。
Servlet可完成如下功能:
1、建立并傳回基于客戶請求的動态HTML頁面。
2、建立可嵌入到現有HTML 頁面中的部分HTML 頁面(HTML 片段)。
3、與其它伺服器資源(如資料庫或基于Java的應用程式)進行通信
Servlet容器響應客戶請求的過程:
實作Servlet有三種方式:
實作javax.servlet.Servlet接口;
繼承javax.servlet.GenericServlet類;
繼承javax.servlet.http.HttpServlet類;
完成Servlet需要分為兩步:
1、編寫Servlet類;
2、在web.xml檔案中配置Servlet;
建立第一個servlet程式:HelloServlet.java
public class HelloServlet implements Servlet {
public HelloServlet(){
System.out.println("HelloServlet construct....");
}
@Override
public void destroy() {
System.out.println("destroy....");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig....");
return null;
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo....");
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
System.out.println("init....");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("service....");
}
}
在web.xml中配置和映射servlet
<!-- 配置和映射servlet -->
<servlet>
<!-- servlet注冊名 -->
<servlet-name>helloServlet</servlet-name>
<!-- servlet的全類名 -->
<servlet-class>org.lanqiao.javaweb.servlet.test.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 需要和關聯的servlet節點的servlet-name子節點的内容一緻 -->
<servlet-name>helloServlet</servlet-name>
<!-- 映射的具體的通路路徑:/代表目前WEB應用的根目錄 -->
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet>:指定HelloServlet這個Servlet的名稱為hello;
<servlet-mapping>:指定/hello通路路徑是以通路的Servlet名為hello。
servlet生命周期
1、 構造器:隻被調用一次。當第一次請求Servlet時,建立Servlet的執行個體,調用構造器。說明Servlet是單執行個體的。
2、 init:隻被調用一次,在建立好執行個體後立即被調用,用于初始化目前Servlet
3、 Service:被多次調用,每次請求都會調用service方法,實際用于相應請求
4 、destroy:Servlet是不會輕易離去的,通常都是在伺服器關閉時Servlet才會離去!在伺服器被關閉時,伺服器會去銷毀Servlet,在銷毀Servlet之前伺服器會先去調用Servlet的destroy()方法
測試生命周期方法
public class HelloServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
System.out.println("Servlet誕生了!");
}
public ServletConfig getServletConfig() {return null;}
public void destroy() {
System.out.println("Servlet離我們而去了!");
}
public String getServletInfo() {return null;}
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("hello i'am servlet!");
}
}