Servlet-ServletConfig

Servlet-ServletConfig

  • 为Servlet提供初始配置参数的一种对象,每个Servlet都有自己独立唯一的ServletConfig对象
  • 容器会为每个Servlet实例化一个ServletConfig对象,并通过init方法传入给Servlet作为属性

Tomcat在初始化Servlet时,将ServletConfig也转换成其对象

1
2
3
4
5
6
7
8
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {
private transient ServletConfig config;
//此方法将Servlet配置文件赋值给了类型ServletConfig的对象,以便在Servlet类中获取配置文件里的内容
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}
}

配置初始参数

在web.xml文件中可使用init-param标签配置一些初始参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance "
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<servlet>
<servlet-name>ServletConfig</servlet-name>
<servlet-class>com.xiaobai.servlet.ServletConfig</servlet-class>
<init-param>
<param-name>keyA</param-name>
<param-value>valueA</param-value>·2
</init-param>
<init-param>
<param-name>keyB</param-name>
<param-value>valueB</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletConfig</servlet-name>
<url-pattern>/ServletConfig</url-pattern>
</servlet-mapping>
</web-app>

配置初始参数-注解配置

同样的,我们也可以使用注解的方式来配置初始参数,但这里我们使用了一种类似与注解嵌套的方式来配置多个键值对

1
2
3
4
5
6
7
8
9
10
11
public @interface WebServlet {
WebInitParam[] initParams() default {};
}

public @interface WebInitParam {
String name();

String value();

String description() default "";
}
1
2
3
4
5
6
7
8
9
10
@WebServlet(
value = "/ServletConfig",
initParams = {
@WebInitParam(name="keyA",value = "ValueA"),
@WebInitParam(name="keyB",value = "ValueB")
}
)
public class ServletConfigTest extends HttpServlet {
//…………
}

获取初始参数

ServletConfig的方法

  • getInitParameter(“keyA”):根据key获取value
  • getInitParameterNames():返回Enumeration<>类型的对象,此对象中有所有的初始参数的key

Enumeration<>的方法

  • hasMoreElements():判断有没有下一个参数,如果有返回true,没有则返回false、
  • nextElement():取出当前元素,向下移动游标

所以,我们可以在Servlet中获取初始参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class ServletConfigTest extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletConfig servletconfig = getServletConfig();
//根据参数名获取参数值(单个获取)
String keyA = servletconfig.getInitParameter("keyA");
System.out.println("KeyA: " + keyA);

//获取所有初始参数
//hasMoreElements方法判断有没有下一个参数,如果有返回true,没有则返回false
//nextElement方法取出下一个元素,向下移动游标
Enumeration<String> initParameterNames = servletconfig.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
System.out.println(initParameterNames.nextElement() + " :" + servletconfig.getInitParameter(initParameterNames.nextElement()));
}
}
}


Servlet-ServletConfig
http://blog.170827.xyz/2024/04/14/Servlet-ServletConfig/
作者
XIAOBAI
发布于
2024年4月14日
许可协议