问题原因:期望我们调用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);就会空指针异常了
本文解释了Servlet中init方法的重要性及正确使用方式。特别是在继承GenericServlet时,必须在init(ServletConfig config)方法中调用super.init(config),以确保正确初始化Servlet配置。
2万+

被折叠的 条评论
为什么被折叠?



