1、什么是Servlet
Servlet是JavaWeb的三大组件之一,它属于动态资源。Servlet的作用是处理请求,服务器会把接收到的请求交给Servlet来处理
2、实现Servlet的方式
●实现javax.servlet.Servlet接口;
●继承javax.servlet.GenericServlet类;
●继承javax.servlet.http.HttpServlet类;
在实际开发过程中通常我们会去继承HttpServlet类来完成我们的Servlet,
但学习Servlet还要从javax.servlet.Servlet接口开始学习。这样有助于了解它的底层实现。
3、Servlet的方法和生命周期
定义一个类,实现Servlet接口,并简单重写它的抽象方法。
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class AServlet implements Servlet {
public void destroy() {
System.out.println("destroy()...");
}
public ServletConfig getServletConfig() {
System.out.println("ServletConfig()...");
return null;
}
public String getServletInfo() {
System.out.println("getServletInfo()...");
return null;
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init()...");
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("service()...");
}
}
方法摘要:
●void destroy() 当Serlvet被销毁时调用
●ServletConfig getServletConfig() 返回Servlet的配置信息
●java.lang.String getServletInfo() 返回Servlet的一些信息(不常用)
●void init(ServletConfig config) 当Servlet被创建时调用
●void service(ServletRequest req, ServletResponse res)每次处理请求时都会被调用
其中destroy、init、service是生命周期方法,init和destroy方法只执行一次,而service
方法每次处理请求时都会被执行。
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class AServlet implements Servlet {
public void destroy() {
System.out.println("destroy()...");
}
public ServletConfig getServletConfig() {
System.out.println("ServletConfig()...");
return null;
}
public String getServletInfo() {
System.out.println("getServletInfo()...");
return null;
}
public void init(ServletConfig config) throws ServletException {
System.out.println("init()...");
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse)
throws ServletException, IOException {
System.out.println("service()...");
}
}
4、Servlet的特性
单例模式,一个类只有一个对象。
非线程安全,所以非常高效。
Servlet类由我们来写,但对象由服务器来创建,并且由服务器来调用相应的方法。
5、在web.xml中配置并测试使用我们的编写的Servlet
在WEB-INF目录下的web.xml添加如下内容
<servlet>
<servlet-name>name</servlet-name> <!-- Serlvet的名字 -->
<servlet-class>com.gyx.servlet.AServlet</servlet-class> <!-- Servlet所在的全类名 -->
</servlet>
<servlet-mapping>
<servlet-name>name</servlet-name> <!-- 要配置的Servlet名字 -->
<url-pattern>/testServlet</url-pattern> <!-- 为Servlet指定一个路径,用于在浏览器中访问 -->
</servlet-mapping>
在浏览器中输入:http://localhost:8080/LearnServlet/testServlet
testServlet就是在web.xml中配置的路径名.
可以看到在Myeclipse的控制台会输出以下内容 init方法和service先后被执行:
当我们多次刷新页面时,service会被多次执行。
现在我们关闭Tomcat服务器 destroy方法会在关闭前执行:
这就验证我们之前讨论的Servlet各个生命同期方法的执行时机。