Servlet-ServletConfig
Servlet-ServletConfig
- 为Servlet提供初始配置参数的一种对象,每个Servlet都有自己独立唯一的ServletConfig对象
- 容器会为每个Servlet实例化一个ServletConfig对象,并通过init方法传入给Servlet作为属性
Tomcat在初始化Servlet时,将ServletConfig也转换成其对象
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标签配置一些初始参数
<?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>
配置初始参数-注解配置
同样的,我们也可以使用注解的方式来配置初始参数,但这里我们使用了一种类似与注解嵌套的方式来配置多个键值对
public @interface WebServlet {
WebInitParam[] initParams() default {};
}
public @interface WebInitParam {
String name();
String value();
String description() default "";
}
@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中获取初始参数
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()));
}
}
}