什么是Servlet
屏幕快照 2019-04-21 下午8.22.08.png
服務(wù)器會把接受的請求交給Servlet蜀备,每個Servlet必須實(shí)現(xiàn)javax.servlet.Servlet接口
- 接受請求數(shù)據(jù)
- 處理請求
- 完成響應(yīng)
實(shí)現(xiàn)Servlet的方式
-
三種
實(shí)現(xiàn)javax.servlet.Servlet接口
繼承javax.servlet.GennericServlet類
繼承javax.servlet.http.HttpServlet類
Servlet中的方法不由我們來調(diào)用,是由tomcat來調(diào)用的,并且Servlet中的對象不由我們來創(chuàng)建,也是由tomcat來創(chuàng)建
瀏覽器訪問Servlet
package Servlet;
import javax.servlet.*;
import javax.servlet.Servlet;
import java.io.IOException;
public class AServlet implements Servlet {
//實(shí)現(xiàn)生命周期方法
//他會在Servlet對象創(chuàng)建之后馬上執(zhí)行弓颈,并且只執(zhí)行一次(出生之后)
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init.....");
}
//獲取Servlet的配置信息
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
}
//實(shí)現(xiàn)生命周期方法
//這個方法會被調(diào)用多次疙挺,每次處理請求都是在調(diào)用這個方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service....");
}
//獲取Servlet的信息
@Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
}
//實(shí)現(xiàn)生命周期方法
//它會在Servlet銷毀之前調(diào)用一次,并且只調(diào)用一次
@Override
public void destroy() {
System.out.println("destroy...");
}
}
- 生命周期方法:
void init(ServletConfig):出生之后荣德,(一次)
void service(ServletRequest request,ServletResponse response):沒你處理請求時都會調(diào)用
void destroy():臨死之前,(一次)//銷毀 - 特性:
單例童芹,一個類只有一個對象涮瞻,可能存在多個Servlet類
線程不安全的,所以效率很高
Servlet是自己寫假褪,但對象是服務(wù)器來創(chuàng)建署咽,并且服務(wù)器來調(diào)用相應(yīng)的方法
- servletConfig是什么?
一個ServletConfig對象,對應(yīng)一段web.xml中的Servlet的配置信息宁否,可以用來獲得servlet的配置信息
String getServletName()
獲得的是<servlet-name>里面的內(nèi)容
Servlet Context getServletContext()
:獲取Servlet上下文對象
String getInitParameter(String name)
:通過名稱獲取指定初始化參數(shù)的值
Enumeration getInitParamenterNames()
:獲取所有初始化參數(shù)的名稱
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>Servlet.AServlet</servlet-class>
<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
<init-param>
<param-name>p2</param-name>
<param-value>v2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/A</url-pattern>
</servlet-mapping>
</web-app>
package Servlet;
import javax.servlet.*;
import javax.servlet.Servlet;
import java.io.IOException;
import java.util.Enumeration;
public class AServlet implements Servlet {
//實(shí)現(xiàn)生命周期方法
//他會在Servlet對象創(chuàng)建之后馬上執(zhí)行窒升,并且只執(zhí)行一次(出生之后)
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init.....");
//獲取初始化參數(shù)
System.out.println(servletConfig.getInitParameter("p1"));
System.out.println(servletConfig.getInitParameter("p2"));
//獲取所有初始化參數(shù)的名稱
Enumeration a = servletConfig.getInitParameterNames();
while(a.hasMoreElements()){
System.out.println(a.nextElement());
}
}
//獲取Servlet的配置信息
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig...");
return null;
}
//實(shí)現(xiàn)生命周期方法
//這個方法會被調(diào)用多次,每次處理請求都是在調(diào)用這個方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service....");
}
//獲取Servlet的信息
@Override
public String getServletInfo() {
System.out.println("getServletInfo...");
return null;
}
//實(shí)現(xiàn)生命周期方法
//它會在Servlet銷毀之前調(diào)用一次慕匠,并且只調(diào)用一次
@Override
public void destroy() {
System.out.println("destroy...");
}
}