init 方法
什么时候被调用: init()方法只会被调用一次,是在第一次访问(or 创建) Servlet 的时候被调用,在后续的每次请求时都不会再调用 init() 方法了,
作用: init()方法用于 Servlet 的初始化,可以简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
Servlet 调用inti方法的时间
-- 可以是用户第一次访问该 Servlet 时——web.xml 文件的<load-on-startup>标签
不配置或者配置为小于零的数;
-- 也可以指定 Servlet 在服务器第一次启动时调用 init 方法——web.xml 文件
的<load-on-startup>标签配置为大于等于0的数。
当用户调用一个 Servlet时,会创建一个 Servlet 实例,
每个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或者 doPost 方法。
init() 的使用
学习 init 方法主要是它的参数 ServletCofig 类的对象的使用。
public void init(ServletConfig config) throws ServletException {
}
设置初始参数
原始方式设置
在 web.xml 文件中写入下面的代码。
其中 <init-param>
标签是初始参数,在一个<servlet>
标签中可以存在多个 <init-param>
标签,也就是说可以有多个初始参数;
在 <init-param>
这个标签中的 <param-name>
标签定义的是参数名,<param-value>
标签定义的是参数的值,
<servlet>
<servlet-name>Test</servlet-name>
<servlet-class>D20210220.TestServlet</servlet-class>
<init-param>
<param-name>name1</param-name>
<param-value>value1</param-value>
</init-param>
<init-param>
<param-name>name2</param-name>
<param-value>value2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
注解方式设置
Servlet 3.0 以上的版本可以使用 @WebServlet 注解,使用这种方式设置初始参数需要记 WebServlet 的一些使用,这里不做讲解。
@WebServlet(urlPatterns = "/TestServlet1",initParams = {
@WebInitParam(name = "name1",value="value1"),
@WebInitParam(name = "name2",value="value2")
}, name = "Hello")
ServletCofig 对象获取初始参数
1. getInitParameter() 方法
getInitParameter() 根据传递的字符串找到对应的参数名,返回其参数值
public void init(ServletConfig config) throws ServletException {
// 返回 web.xml 文件中初始参数名为 name1 的参数的值
String val1 = config.getInitParameter("name1");// "value1"
System.out.println(val1);
// 返回 web.xml 文件中初始参数名为 name2 的参数的值
String val2 = config.getInitParameter("name2");// "value2"
System.out.println(val2);
}
上面代码中,变量 val1 的值就是前面 web.xml 文件中<param-value>value1</param-value>
中的值。
2. getInitParameterNames() 方法
getInitParameterNames() 获取的是在 web.xml 文件中设置的所有参数的参数名,返回的是一个可遍历的枚举型的字符串。
public void init(ServletConfig config) throws ServletException {
// 获取所有初始参数的参数名
Enumeration<String> names = config.getInitParameterNames();
// 遍历 names
while(names.hasMoreElements()) {
// 获取参数名
String paramName = names.nextElement();
// 获取参数名对应的参数值
String paramValue = config.getInitParameter(paramName);
System.out.println(paramName + ":" + paramValue);
}
}
3. getServletName() 方法
getServletName() 方法获取的是 Servlet 的名字,也就是 web.xml 文件中 <servlet-name>Test</servlet-name>
的值——Test。
public void init(ServletConfig config) throws ServletException {
String servletName = config.getServletName();
System.out.println(servletName);
}