Servlet规范介绍
- Servlet规范来自于JAVAEE规范中的一种
- 作用:
在Servlet规范中,指定“动态资源文件”开发步骤
在Servlet规范中,制定Http服务器调用动态资源文件规则
在Servlet规范中,指定Http服务器管理动态资源文件实例对象
Servlet接口实现类
-
Servlet接口来自于Servlet规范下的一个接口,这个接口存在Http服务器
-
Tomcat服务器下lib文件有一个servlet-api.jar存放Servlet接口
-
Servlet规范中的任务,Http服务器能调用的“动态资源文件”必须是一个Servlet接口实现类
Servlet接口实现类开发步骤
-
第一步:创建一个Java类oneServlet继承HttpServlet父类,使之成为一个Servlet接口实现类
-
第二步:重写HttpServlet父类中的两个方法:doGet或者doPost
浏览器–get请求方式–>oneServlet.doGet()
浏览器–post请求方式–>oneServlet.doPost() -
第三步:将Servlet接口实现类信息“注册”到Tomcat服务器
当前网站—>web文件夹—>WEB-INFW文件夹—>web.xml
<!--将servlet接口实现类类路径地址交给Tomcat-->
<servlet>
<!--声明一个变量存储servlet接口实现类的类路径-->
<servlet-name>myweb</servlet-name>
<!--声明servlet接口实现类的类路径-->
<servlet-class>controller.OneServlet</servlet-class>
</servlet>
//Tomcat String myweb="controller.OneServlet"
<!--为了降低用户访问Servlet接口实现类难度,需要设置别名-->
<servlet-mapping>
<servlet-name>myweb</servlet-name>
<!--设置简短请求别名,必须以/开头-->
<url-pattern>/one</url-pattern>
</servlet-mapping>
此时启动Tomcat,可以在浏览器的url后面加上one,索要OneServlet地址
这里我用IDEA实现(IDEA社区版没有这个功能,目前IDEA2020.1.1能破解,建议使用此版本)
第一步:创建servlet接口实现类
创建servlet接口实现类放在src下新建controller包里面,填写注册信息
第二步:填写注册信息
注册信息:当前网站—>web文件夹—>WEB-INFW文件夹—>web.xml
第三步:
创建好之后,用Tomcat将此网站加入Tomcat启动项
第四步:运行即可,可以用DEBUG运行,方便调试
Servlet对象生命周期
-
网站中所有的Servlet接口实现类的实例对象,只能由Http服务器负责创建,开发人员不能手动创建Servlet接口实现类的实例对象
-
在默认情况下,Http服务器接收到对于当前Servlet接口实现类第一次请求时,自动创建这个Servlet接口实现类的实例对象
在手动配置情况下,要求Http服务器在启动时,自动创建某个Servlet接口实现类的实例对象
<servlet>
<servlet-name>one</servlet-name>
<servlet-class>controller.OneServlet</servlet-class>
<!--填一个大于0的整数即可-->
<load-on-startup>1</load-on-startup>
</servlet>
-
在Http服务器运行期间,一个Servlet接口实现类只能被创建出一个实例对象
-
在Http服务器关闭时,会将当前网站中所有Servlet实例对象进行销毁
关于Tomcat根据Servlet规范的实现规则
-
servlet接口:
init
getServletConfig
getServletInfo
destory--------------这四个方法对于Servlet接口实现类没用
service()------------有用 -
Tomcat根据Servlet规范调用Servlet接口实现规则:
1.Tomcat有权创建Servlet接口实现类实例对象
Servlet oneServlet = new OneServlet();
2.Tomcat根据实例对象调用service()方法处理当前请求
oneServlet.service();
oneServlet–继承–>(abstract)HttpServlet–继承–>(abstract)GenericServlet–实现–>Servlet接口
- 通过父类决定在何种情况下调用子类中的方法---------模版设计模式
HttpServlet:servlet(){
if(请求方式==GET){
this.doGet();
}
if(请求方式==POS){
this.doPost();
}
}