问题原因:期望我们调用super.xxx()方法但是我们没有调用
除去部分误报,需要注意修改的是Servlet的init(ServletConfig servletConfig)方法中,是必须要加上super.init(servletConfig)调用的。
首先,为什么我们重写的不是init()而是带参数的呢?因为我们有直接从web.xml里读取配置项的操作
this.path = servletConfig.getInitParameter("path");
然后,为什么必须要加上super.init(servletConfig)呢?查看源码可以发现,在调用super.init(servletConfig)时,会在GenericServlet中将本对象赋值给config对象
public void init(ServletConfig config) throws ServletException
{
this.config = config;
init();
}
然后对外是提供了getServletConfig()方法来获取config对象
public ServletConfig getServletConfig()
{
return config;
}
所以如果不调用super.init(servletConfig),那么getServletConfig()会返回null,如果恰好我们用这种方式去跳转页面
getServletConfig().getServletContext().getRequestDispatcher(pageName).forward(request, response);
就会空指针异常了