一、Servlet简介
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个Servlet接口,用户若想开发一个动态web资源,步骤如下:
- 编写一个Java类,实现Servlet接口
- 把开发好的Java类部署到Web服务器中。
二、Servlet的运行过程
Servlet程序是由web服务器调用的,其过程如下:
- web服务器首先检查是否已经装载了该Servlet的实例对象,如果是执行第4步,否则执行第2步
- 装载并创建Servlet的一个实例对象
- 调用Servlet实例对象的init()方法
- 创建请求对象HttpServletRequest和响应对象HttpServletResponse,然后调用service()并将请求和响应对象作为参数传递进去
- web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用destroy()方法
调用图:
三、开发Servlet
创建web工程,其目录结构如下:
创建一个Servlet类:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。
* HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。
* 因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
* HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,
* 如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。
* @author hanxin
*
*/
public class ServletDemo01 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//返回的数据类型是html
response.setContentType("text/html");
//获取输出流
PrintWriter pw = response.getWriter();
//输出内容
pw.print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
pw.println("<HTML>");
pw.println("<HEAD><TITLE>A Servlet</TITLE></HEAD>");
pw.println("<BODY>");
pw.println("this is doGet");
pw.println("</BODY>");
pw.println("</HTML>");
pw.flush();
pw.close();
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//返回的数据类型是html
response.setContentType("text/html");
//获取输出流
PrintWriter pw = response.getWriter();
//输出内容
pw.print("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
pw.println("<HTML>");
pw.println("<HEAD><TITLE>A Servlet</TITLE></HEAD>");
pw.println("<BODY>");
pw.println("this is doPost");
pw.println("</BODY>");
pw.println("</HTML>");
pw.flush();
pw.close();
}
}
在web.xml文件中配置一个servlet
项目部署到tomcat后,访问http://localhost:8080/ServletDemo/servletDemo01.do,红色的是xml配置的资源路径(url-pattern),前面的是项目路径(请阅读Tomcat部分)
注意事项:
- 同一个servlet可以匹配多个servlet-mapping,但是同一个servlet-mapping不能匹配多个servlet
- 'url-pattern可以使用通配符(*.扩展名或"/*"结尾)
- Servlet类中如果设置的成员变量,那么他是线程不安全的