Servlet的自动加载机制
默认情况servlet对象是在第一次访问的时候创建的,若在这个servlet的构造方法或init方法执行比较多的逻辑,那么第一次访问servlet的用户体验就不好!
<servlet>
<servlet-name>TimeServlet</servlet-name>
<servlet-class>TimeServlet</servlet-class>
<!--这个配置可以让servlet在tomcat服务器启动的时候自动创建servlet对象-->
<load-on-startup>1</load-on-startup>
</servlet≥
<servlet-mapping>
<servlet-name>TimeServlet</servlet-name>
<url-pattern>/servlet/TimeServlet</url-pattern>
</servlet-mapping>
注:load-on-startup中的整数值越大,创建的优先级就越低。
Servlet的init方法
两个init方法作用:
- init(Servletconfig):这个有参数的init方法作用就是Servlet的其中一个重要的生命周期方法。这个方法一定会被tomcat服务器调用。
- init():这个无参数的init方法作用就是为了提供给开发者方便去覆盖,覆盖这个方法,可以在此方法中编写初始化的逻辑。这个方法才是真的给开发者做初始化逻辑的方法。
总结:开发者应该覆盖无参的init方法来编写初始化逻辑,而不是去覆盖有参数的init方法。
Servletconfig对象详解
在Servlet 的配置文件中,可以用一个或多个<init-param>标签为servlet配置一些初始化参数。
当servlet配置了初始化参数之后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给Servlet。进而,程序员通过Servlet对象得到当前servlet的初始化参数信息。
1.配置 Servlet 的初始化参数
<!-- 配置servlet 和 映射 servlet 且该节点必须在load-on-starup节点的前面 -->
<servlet>
<!-- Servlet 的注册名 -->
<servlet-name>helloServlet</servlet-name>
<!-- Servlet 的全类名 -->
<servlet-class>com.jason.javaweb.helloServlet</servlet-class>
<!-- 配置Servlet的初始化参数 -->
<init-param>
<!--参数名 -->
<param-name>user</param-name>
<!-- 参数值 -->
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>zhangzhen</param-value>
</init-param>
<!-- 可以指定Servlet 被创建的时机 -->
<load-on-startup>1</load-on-startup>
</servlet>
2. 获取初始化参数:
- getInitParameter(String name): 获取指定参数名的初始化参数
- getInitParameterNames():获取参数组成的enumeration 对象
- getServletName():获取Servlet配置名
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init");
//获取一个指定的初始化参数
String user = servletConfig.getInitParameter("user");
System.out.println(user);
//获取初始换参数组成的enumeration
Enumeration<String> names = servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name = names.nextElement();
String value = servletConfig.getInitParameter(name);
System.out.println("name : " + name +" value : "+value);
}
}