Servlet生命周期
我们如果想要在Servlet处理逻辑之前做一些准备工作,或者在Servlet实例被销毁之前做一些资源回收工作,就需要依靠Servlet的生命周期来进行准确的定位。
Servlet的生命周期主要包括三个阶段:初始化,请求处理,销毁。
初始化
对应init方法,默认在客户端第一次请求Servlet时,对应的Servlet实例才会被Servlet容器创建。这个时候,Servlet容器就会回调Servlet init方法,但在特殊情况下,比如在配置文件中,配置了loadonSetup元素,就会在容器启动时被加载。
public void init() throws ServletException {
// TODO Auto-generated method stub
super.init();
}
请求处理
对应service方法,在这个方法里会根据HTTP请求的类型,将不同的HTTP请求转发给不同的Servlet方法进行处理,比如,doGet方法和doPost方法。
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("service method");
super.service(arg0, arg1);
}
销毁
对应destroy方法,在Servlet实例被销毁之前,由Servlet容器进行回调。主要是做资源的回收和清理。
public void destroy() {
// TODO Auto-generated method stub
super.destroy();
}
doGet方法和doPost方法的区别
传输方式
GET方法通过HTTP header进行传输,POST方法通过HTTP body进行传输。
GET方法传输数据需要在URL中体现出来,数据长度受限于URL的长度(2-8k),POST方法不需要。
设计目的
GET方法是为了从服务器端获取数据,而POST方法则是为了向服务器端发送数据。
安全性
POST方法安全性更高一些,因为它并不暴漏数据。
配置参数
ServletConfig对象提供了Servlet配置信息的管理功能。我们可以把需要使用的配置信息写在对应的文件中,然后通过ServletConfig对象读取对应的配置信息。
在web.xml文件中,填写对应的配置信息。
<servlet>//只是添加到含有servlet-class和servlet-name的标签中
<init-param>
<param-name>参数名</param-name>
<param-value>参数值</param-value>
</init-param>
</servlet>
然后,我们就可以从java文件中获取对应的配置信息了。
ServletConfig config = this.getServletConfig();
String v1 = config.getInitParameter("name1");
特性总结:
Servlet在初始化过程中,<init-param>参数将被封装到ServletConfig对象中,每个Servlet支持设置一个或多个<init-param>对象,并且以Servlet为单位,并不全局共享。