httpservlet 子类需要复写httpservlet 里的init方法吗?

  Java Servlet 是运行在 Web 服务器或应用服务器上的程序它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

  servlet是单例多线程的也就是说,茬堆内存中只有一份servlet对象对于每一次http请求,servlet容器会自动调用servlet对象的service()方法去开辟线程在这个线程中根据已有的url-class关系对这个request进行处理。

    1.Servlet是单例多线程的一个Servlet实例就是一次请求;
    2.一个Servlet实例只会执行一次无参构造方法和init方法,并且是在第一次访问时执行;
    3.一个Servlet实例只会执行一次destroy方法并且在应用停止时销毁;
    4.一个Servlet实例可以执行多个service,每当有用户请求发生就会执行一次service方法;
    5.Servlet是单例(单例模式)多线程的,所以为了线程安全不为其设置成员变量,以避免线程间篡改成员变量;
    6.默认情况下Servlet在web嫆器启动时是不会被实例化的;

  service是自动调用的,对外提供的请求和相应处理的方法

  既然有了每个url请求的servletConfig配置。就有所有servlet的全局配置其里面放置的键值对都能够被所有url请求共享,这个接口就是ServletContext

  启动服务,访问路径即结果如下:

  此时可以写一个抽象类继承Servlet在该抽象类中实现其余四个方法,只将service定义为抽象方法子类直接继承这个抽象,并且只需重写service方法就好了

  同时,为了不破坏init(ServletConfig config)函数再重载一个init()给子类用即可。这样能保证在serlvet实例化时同样使子类(service处理类)也能够自由的初始化。

  显然这种写法有些陋我们进行洳下改写,并将SubServletDemo重命名为HttpServlet

  最后写一个只有GET请求和POST请求的处理类,让它继承HttpServlet:

   上节只实现了doGet和doPost但是逻辑都是相同的。

我要回帖

 

随机推荐