创建Servlet必须直接或间接地实现Servlet
接口。
javax.servlet 包中的Servlet接口声明:
public interface Servlet
间接实现是指不直接实现Servlet接口,而是通过继承实现Servlet接口的类:GenericServlet
和HttpServlet
间接实现。
创建用于web服务的Servlet可以继承HttpServlet
,不依赖特定协议的应用可以继承通用Selvlet父类:GenericServlet
。
3种创建servlet的方法:
- 通过继承
HttpServlet
类 - 通过继承
GenericServlet
类 - 直接实现Servlet接口
因为Java Servlet一般用于web开发,所以通常都通过继承
HttpServlet
类创建servlet。
Servlet接口方法
Servlet接口中的方法:
void destroy()
: 该方法在Servlet生命周期结束时由Servlet容器调用,用于释放资源。与多次调用的service()
方法不同,Servlet容器在整个生命周期中只调用该方法一次。一旦destroy()
方法被调用,servlet容器就不会调用该servlet的service()
方法。-
void init(ServletConfig config)
:当Servlet容器启动时(web服务器启动时触发),容器会加载所有Servlet类并创建这些类的实例,然后调用每个servlet实例的init()
方法进行初始化。 -
void service(ServletRequest req, ServletResponse res)
:这是servlet生命周期中唯一被多次调用的方法。这个方法处理客户端请求,每次服务器接收到请求时都会调用这个方法处理。 -
ServletConfig getServletConfig()
:返回一个ServletConfig对象,这个对象包含了servlet的初始化、启动参数信息。 -
lang.String getServletInfo()
:返回关于servlet的信息,如作者、版本、版权等信息。
例子
本例通过直接实现servlet接口创建了一个servlet类。
index.html
<a href="welcome">点击调用servlet</a>
DemoServlet.java
import java.io.*;
import javax.servlet.*;
public class DemoServlet implements Servlet{
ServletConfig config=null;
public void init(ServletConfig config){
this.config=config;
System.out.println("servlet初始化完成!");
}
public void service(ServletRequest req,ServletResponse res)
throws IOException,ServletException{
res.setContentType("text/html");
PrintWriter pwriter=res.getWriter();
pwriter.print("<html>");
pwriter.print("<body>");
pwriter.print("<h1>奇客谷教程Servlet接口例子</h1>");
pwriter.print("</body>");
pwriter.print("</html>");
}
public void destroy(){
System.out.println("servlet结束!");
}
public ServletConfig getServletConfig(){
return config;
}
public String getServletInfo(){
return "奇客谷教程Servlet接口例子";
}
}
web.xml
<web-app>
<servlet>
<servlet-name>qikeguServletInterfaceDemo</servlet-name>
<servlet-class>DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>qikeguServletInterfaceDemo</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>