建立Servlet实例有两个时机:html
关于load-on-startup参数:java
javax.servlet.Servlet源码: web
public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException; String getServletInfo(); void destroy(); }
全部的servlet都是javax.servlet.Servlet的子类,就像Java里面全部的类都是Object的子类同样。Servlet类规定了每一个servlet应该实现的方法,这个是遵循Servlet规范的。可是自定义的servlet通常不用直接实现Servlet,而是继承javax.servlet.GenericServlet或者javax.servlet.http.HttpServlet就好了。这是由于HttpServlet间接实现了Servlet,提供了通用的功能。因此咱们在自定义的TestServlet里面只须要专一实现业务逻辑就好了。服务器
Servlet里面有三个比较重要的方法:init、service、destroy。它们被称做是servlet生命周期的方法,它们都是由servlet容器调用。另外两个方法用于获取servlet相关信息的,须要根据业务逻辑进行实现和调用。并发
Servlet生命周期: app
HttpServlet是一个针对HTTP协议的通用实现,它实现了HTTP协议中的基本方法get、post等,经过重写service方法实现方法的分派。post
若是想要分别响应客户端的GET和POST请求,须要重写HttpServlet对象的doGet和doPost方法,若是全部请求的响应都是同样的,则只须要重写service方法便可。测试
JSP的本质就是Servlet,咱们将编写好的JSP文件部署在web容器中以后,web容器会将JSP编译成对应的Servlet。this
若是Servlet要生成表现层页面时,全部的HTML标签都须要使用Servlet的输出流来输出,繁琐且不利于美工人员修改。url
在标准的MVC模式中,Servlet仅做为控制器使用,而JSP仅做为表现层技术使用:
6.1 首先建立一个JavaWeb工程,而后建立一个类继承HttpServlet
package com.xzh; 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; /** * Created by xiangzh on 2017/8/29. */ public class ServletDemo extends HttpServlet{ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the GET method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } }
6.2 在web.xml文件中配置上面的Servlet
<servlet> <servlet-name>ServletDemo</servlet-name> <servlet-class>com.xzh.ServletDemo</servlet-class> </servlet> <servlet-mapping> <servlet-name>ServletDemo</servlet-name> <url-pattern>/ServletDemo</url-pattern> </servlet-mapping>
6.3 将项目打包放到Tomcat中,启动Tomcat,测试结果以下:
注意:一个Web应用对应一个ServletContext,一个Servlet对应一个ServletConfig。每一个Servlet都是单例的,因此须要本身处理好并发的场景。
参考:
http://www.cnblogs.com/xdp-gacl/p/3760336.html
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html
http://www.cnblogs.com/goody9807/archive/2007/06/13/782519.html
http://www.blogjava.net/xzclog/archive/2011/09/29/359789.html