写一个demo servlet
- public class DemoServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- private String time = "first";
- @Override
- public void init() throws ServletException {
- System.out.println("DemoServlet.init()");
- }
- @Override
- public void destroy() {
- System.out.println("DemoServlet.destroy()");
- }
- public DemoServlet() {
- System.out.println("DemoServlet.DemoServlet()");
- }
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- System.out.println(this);
- System.out.println(Thread.currentThread().getId());
- try {
- Thread.sleep(5000);
- } catch (InterruptedException e) {
- }
- response.getWriter().println("<html><body><h3>Welcome "+time+"</h3></body></html>");
- time = "second";
- }
- protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- doGet(request, response);
- }
- }
连续访问 http://localhost:8080/test-servlet/DemoServlet 两次,
console里得到如下的输出:
DemoServlet.DemoServlet()
DemoServlet.init()
DemoServlet@81018b
18
DemoServlet@81018b
19
浏览器里的两个页面得到的输出分别是:
Welcome first和
Welcome second总结:构造函数和初始化方法都只调用了一次,且打印出来的对象ID是同一个,但是线程ID不相同,所以Servlet在运行时是单实例多线程的。