一、Servlet规范介绍
1、Servlet规范来自Java EE 规范中的一种
2、作用:
(1)指定“动态资源文件”的开发步骤
(2)指定Http服务器调用“动态资源文件”的规则
(3)指定Http服务器管理"动态资源文件"实例对象的规则
二、Servlet接口实现类
1、Servlet接口来自Servlet规范下的一个接口,这个接口存在于Http服务器提供的jar包中
2、Tomcat服务器下的lib文件夹有一个servlet.api.jar用来存放Servlet接口(javax.servlet.Servlet接口)
3、在Servlet规范中,Http服务器能调用的“动态资源文件”必须是一个Servlet接口实现类
//举例
class Student{
//不是动态资源文件,Tomcat无权调用
}
class Teacher implements Servlet{
//合法动态资源文件,Tomcat有权利调用
}
Servlet obj=new Teacher();
obj.doGet();
三、Servlet接口实现类开发步骤
第一步:新建一个类oneServlet,并继承HttpServlet父类,使之成为Servlet接口实现类
Tomcat根据Servlet规范调用Servlet接口实现类的规则:
1、Tomcat有权调用Servlet接口实现类的实例对象
Servlet oneServlet=new Servlet();
2、Tomcat根据当前实例对象调用service方法处理当前请求
oneServlet.service();
extends extends implements
oneServlet---------------->(abstract)HttpServlet--------------->(abstract)GenericServlet------------------>Servlet接口
init
getServletConfig
getServletInfo
destory
在这里用到了抽象类
抽象类的作用:
降低接口实现类对接口实现过程的难度,让接口中不需要使用的抽象方法交给抽象类来完成,这样接口实现类只需要对自身需要使用的方法进行重写即可。
第二步:重写HttpServlet父类的两个方法,即doGet和doPost
父类决定在何种情况下调用子类中的方法,这使用了一种设计模式,即模板模式
HttpServlet : service(){
if(请求方法==GET){
this.doGet();
}else if(请求方法==POST){
this.doPost();
}
}
第三步:将Servlet接口实现类的信息“注册”到Tomcat服务器,在web.xml中进行书写
<!-- 将Servlet接口实现类的类路径交给Tomcat -->
<servlet>
<servlet-name>oneServlet</servlet-name> <!-- 声明一个变量存储 -->
<servlet-class>com.mrliu22.oneServlet</servlet-class> <!-- Servlet接口类的类路径,我的是com.mrliu22包下的oneServlet -->
<servlet/>
<!-- 为了降低用户访问Servlet接口实现类的难度,可以给其起个别名 -->
<servlet-mapping>
<servlet-name>oneServlet</servlet-name>
<url-pattern>/one</url-pattern> <!-- 别名必须以“/”为开头 -->
</servlet-mapping>
访问路径:http://localhost:8080/项目名称/one
四、Servlet对象生命周期
1、网站中的所有Servlet接口实现类的实例对象都是由Http服务器创建的,开发人员不能手动创建
2、在默认情况下,只有当Http服务器接收到对当前Servlet接口实现类的请求时,才会自动创建Servlet接口实现类的实例对象。也可以通过手动配置,来让Http服务器启动时就创建某个Servlet接口实现类的实例对象,可以这样配置:
<servlet>
<servlet-name>oneServlet</servlet-name>
<servlet-class>com.mrliu22.oneServlet</servlet-class>
<!-- 这里只要填写一个大于0的整数就可以手动设置Http服务器一启动就自动创建oneServlet接口实现类 -->
<load-on-startup>30</load-on-startup>
</servlet>
3、在Http服务器运行期间,一个Servlet接口实现类只会被创建出一个实例对象。可以通过在构造方法中打印信息,然后多次访问来验证。