1、Servlet规范
1)javaEE规范中的一种,注意Servlet针对的是动态资源
2)作用:
-
在Servlet规范中,指定动态资源文件开发步骤
-
指定了Http服务器调用动态资源文件的规则
-
指定Http服务器管理动态资源文件实例对象的规则
2、Servlet接口实现类
1)Servlet接口来自于Servlet规范,这个接口存在于Http服务器提供的jar包中
2)Tomcat服务器下lib文件中有一个Servlet-api.jar存放了Servlet接口。接口就是规矩,它是我们写动态资源文件的规矩
3)Servlet规范中,Http服务器能调用的动态资源文件必须是一个Servlet接口实现类
class Student{
//不是正确的动态资源文件
}
class Teacher implements Servlet{
//是正确的动态资源文件,http服务器有权利调用
}
3、Servlet接口实现类开发步骤
1、创建一个java类继承抽象父类HttpServlet,间接成为一个Servlet接口实现类
**为什么不直接实现Servlet接口呢?**直接实现这个接口要重写Servlet中所有的方法,比较麻烦,而继承抽象父类不用全部重写
父抽象类存在的作用只有一个:降低接口实现子类在接口实现过程中的难度。
2、 目前Servlet接口中只有一个方法是有用的,可以被servlet接口实现类使用,那就是service方法。
父亲把servlet中没有用的方法都承担实现了,就把service方法留着出来,它依然是一个抽象方法。
3、实际上,在父类HttpServelt中service已经被重写了(是protected的,子类oneServlet可以直接调用),service方法中回对请求方式进行获取,**针对不同的请求方式会进一步调用相应的this.doXXX方法,因此只需重写当前子类中的doXXX方法。**在父类中就决定在何种情况下调用子类方法-----设计模式:模板设计模式。降低了我们的开发难度。
3、将Servlet接口实现类 注册 到Tomcat服务器中;找到网站module,在webINF文件夹中的web.XML写信息:即将当前Servlet接口实现类类路径地址交给Tomcat
<servlet>
<servlet-name>mm</servlet-name>...名字
<servlet-class>类路径<servlet-class>
</servlet>
为了降低用户访问servlet接口实现类的难度,需要设置简短的请求别名
<servlet-mapping>
<servlet-name>mm<servlet-name>
<url-pattern>/别名<url-pattern>
</servlet-mapping>
Http服务器如tomact收到对动态资源文件请求后,先new出servlet接口实现类的对象,调用它的service方法,根据请求行中的method选择运行合适的doXXX方法。
4、Servlet对象生命周期
1)网站中所有的Servlet接口实现类的实例对象,只能由Http服务器tomcat自动创建! 开发人员不能手动创建Servlet接口实现类的实例对象
2)在默认的情况下,Http服务器收到对于当前Servlet接口实现类第一次请求时,自动创建这个Servlet接口实现类的实例对象。
3)在手动配置的情况下,可以要求Http服务器在启动时就自动创建某个实例对象。
在<servlet></servlet>中写入
<servlet-name>mm</servlet-name>...名字
<servlet-class>类路径<servlet-class>
<load-on-startup>一个大于0的整数即可</load-on-startup>
mm这个接口实现类就会在启动时就new
4)在Http服务器运行期间,一个Servlet接口实现类只能创建出一个实例对象。不管有多少的浏览器用户申请访问这个类、访问这个类多少次。
4、在Http服务器关闭时,它会自动将所有的Servlet实例对象进行销毁