在我上篇关于Servlet API 的文章中,我说明了在创建任何Servlet时你必须直接或间接地实现Servlet接口(间接地实现就是通过扩张那些实现了Servlet接口的类,这些类是GenericServlet和HttpServlet).
如果想创建协议相关的servlet,例如htt servlet,那么就应该扩展HttpServlet类,对于协议不相关的servlet就以应该扩展Genericervlet类。 在这里我不会详细解释GenericServlet,HttpServlet,因为我会在其他独立章节解释他们。
简单来说有三种方式创建servlet
1) 扩展HttpServlet 类
2)扩展GenericSerlet类
3)通过扩展Servlet接口
注意:但是,您应该始终选择创建servlet的第一种方式,即通过扩展HttpServlet类。
接口SErvlet 接口中的方法
这里是在Servlet接口中的清单:
1)void destory(): 该方法在Servlets寿命周期最后面被servlet容器调用。与service()方法在生命周期被多次调用不同,这个方法在生命周期完成是被容器调用一次。一旦destory()被容器调用就不会在调用servlet的service()方法。
2)void init(ServletConfig config): 当Servlet容器启动时(当web服务器启动时开启)载入所有的servlet并实例化它们。在每个servlet实例调用init()后,这个方法就会初始化servlet。
3) void service(SerevletRequest req,ServletResponse res): 这是唯一的在servlet生命周期中被多次调用的方法。这个方法处理客户端的请求,在服务器接受一次用户请求就调用一次此方法。
4)ServletConfig getServletConfig(): 返回一个ServletConfig对象,包含此servlet初始化和启动参数。
5)java.lang.String getServletInfo(): 返回关于此servlet的信息,例如作者,版本和版权。
例子:
在这个例子中,我们通过扩展Servlet接口创建一个servlet类。
index.html
<a href="welcome">Click here to call the servlet</a>
DemoServlet.java
mport java.io.*;
import javax.servlet.*;
public class DemoServlet implements Servlet{
ServletConfig config=null;
public void init(ServletConfig config){
this.config=config;
System.out.println("Initialization complete");
}
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 Example Program</h1>");
pwriter.print("</body>");
pwriter.print("</html>");
}
public void destroy(){
System.out.println("servlet life cycle finished");
}
public ServletConfig getServletConfig(){
return config;
}
public String getServletInfo(){
return "A Demo program written by Chaitanya";
}
}
web.xml
<web-app>
<servlet>
<servlet-name>Beginnersbook</servlet-name>
<servlet-class>DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Beginnersbook</servlet-name>
<url-pattern>/welcome</url-pattern>
</servlet-mapping>
</web-app>
具体操作:
提前安装好jdk和tomcat,我这里安装的是jdk8 和tomcat7.
1) 将tomcat 中lib文件夹下的servlet.jar 复制到jdk的jre/lib/ext目录下,方便我们后面的编译。
cp ./lib/servlet.jar /opt/jdk8/jre/lib/ext/
2) 在tomcat 的webapps 文件夹中创建我们的目录demoservlet,在此目录中创建WEB-INF,在WEB-INF中创建classes文件夹用来保存我们将来的servlet的class文件,在WEB—INF 下创建web.xml文件
mkdir demoservlet
mkdir ./demoservlet/classes
touch ./demoservlet/web.xml
3)复制我们的DemoServlet.java 到上面的classes文件夹下,并编译,填充web.xml内容
javac DemoServlet.java
4) 启动tomcat并验证,浏览器输入:http://localhost:8080/demoservlet/welcome
如果看到大写黑体的“Servlet Example Program”
那么则证明成功了。