day12-Servlet02( 二 )

点击Tomcat,选择redeploy

day12-Servlet02

文章插图
在浏览器中输入http://localhost:8080/web应用名/hiServlet,后台显示如下:
说明HiServlet类重写HttpServlet的doGet方法被调用了
day12-Servlet02

文章插图
7.1怎么执行到doGet和doPost
day12-Servlet02

文章插图
如上图所示,HiServlet类(自己写的)继承了HttpServlet,HttpServlet继承了GenericServlet抽象类,而GenericServlet抽象类又实现了Servlet接口,Servlet接口里面有service方法 。
当Tomcat调用HiServlet里面service方法的时候,发现HiServlet里没有该方法,就会根据类的查找关系,在HttpServlet里面去找service方法 , 找到了就去执行 。
day12-Servlet02

文章插图
day12-Servlet02

文章插图
如上图所示,this实际的运行类型是HiServlet,因此在执行doGet方法的时候,实际上运行的是HiServlet中的doGet方法 。
动态绑定:当调用对象方法的时候,该方法会和该对象的内存地址/运行类型绑定
8.IDEA开发Servlet程序
  • 说明
    手动开发Servlet需要程序员自己配置Servlet , 比较麻烦 , 在工作中,直接使用IDEA开发Servlet会更加方便
例子
  1. 如下图:选中右键在src目录下创建的servlet文件夹,选择new->选择Servlet
    day12-Servlet02

    文章插图
    idea文件右键创建New没有Create New Servlet的解决办法
  2. 在弹出的窗口中按照需求进行选择,然后点击OK
    如果使用xml的方式进行开发,就不用选择Create Java EE 6+ annotated class
    否则就是使用注解的方式 。
    day12-Servlet02

    文章插图
  3. 点击ok后,如果使用的是xml文件开发,就会自动配置<servlet>标签
    注意:自动配置的只有<servlet>标签,<servlet-mapping>标签需要自己写
    day12-Servlet02

    文章插图
  4. 在自动生成的OkServlet.java中编写自己的业务处理代码
    package com.li.servlet;import javax.servlet.*;import javax.servlet.http.*;import java.io.IOException;public class OkServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//可以写自己的业务处理代码System.out.println("OkServlet doGet()");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//可以写自己的业务处理代码System.out.println("OkServlet doPost()");}}
  5. 点击redeploy , 重新发布 。然后在浏览器中输入http://localhost:8080/servlet_demo/okServlet发送请求 。
    day12-Servlet02

    文章插图
    后台输出如下:
    day12-Servlet02

    文章插图
9.Servlet注意事项和细节
  1. Servlet是一个供其他 Java程序(Servlet引擎)调用的Java类,不能独立运行
  2. 针对浏览器的多次Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出,或者redeploy该web应用,Servlet实例对象才会销毁
    day12-Servlet02

    文章插图
  3. 在Servlet的整个生命周期内,init方法只被调用一次 。而对每次请求都导致Servlet引擎调用一次Servlet的service()方法
  4. 对于每次请求访问 , Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service()方法再根据请求方式分别调用doXxx()方法
    详见7.1
  5. 如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建Servlet的实例对象 , 以及调用Servlet实例对象的init()方法
    <load-on-startup>的应用场景:比如服务器定时发送邮件的服务:自动启动-->完成任务

    推荐阅读