ServletConfig接口
javax.servlet.ServletConfig
-
getInitParemeter(String name)方法:获取web.xml文件中的标签中与传递的字符串参数相同的标签内容所对应的标签的字符串内容。
-
getInitParameterNames()方法:获取servlet初始化参数值,以字符串对象的一个枚举返回;或者返回一个空的枚举对象,如果没有任意一个初始化参数值。
-
getServletContext()方法返回ServletContext对象的引用。
-
getServletName()方法返回Servlet实例的名字。
当servlet配置了初始化参数后,web容器在创建servlet实例对象时, 会自动将这些初始化参数封装到ServletConfig对象中, 并在调用servlet的init方法时, 将ServletConfig对象传递给servlet。 进而,通过ServletConfig对象就可以得到当前servlet的初始化参数信息。
web.xml配置
encoding UTF-8
encoding ISO-8859-1
在当前的Servlet中重写了GenericServlet的init方法
@Override
public void init(ServletConfig config) throws ServletException {
// 当前参数
System.out.println( "单独" + config.getInitParameter("encoding") );
// 全局参数
System.out.println( "全局" + config.getServletContext().getInitParameter("encoding"));
}
然后在doPost中重新获取初始化参数 显示空指针异常
打印可以看出 无法获取到config对象
System.out.println( this.getServletConfig());
// 指定Servlet的初始化配置的参
System.out.println( this.getServletConfig().getInitParameter("encoding") );
检查抽象类GenericServlet源码发现
成员属性
private transient ServletConfig config;
在init方法中会给成员属性 config 赋值操作
getServletConfig方法会返回当前的config对象
而我们重写了init方法时未调用父类的init(config)方法 导致 获得一个空的config对象
从而导致了 空指针异常 的产生
解决方案
必须加上super.init(config)
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);// 给父类GenericServlet的config对象注值
// 当前参数
System.out.println( "单独" + config.getInitParameter("encoding") );
// 全局参数
System.out.println( "全局" + config.getServletContext().getInitParameter("encoding"));
}
效果如下图



