原因 : 我重写了 init() 方法, 但没有在方法内部调用 super.init(config);
我重写了init(ServletConfig)方法,但重写的init方法内部没有调用super.init(config);
父类的 init(ServletConfig)有处理获取ServletContext对象的引用,在doGet/doPost/service方法方法中才能够通过 getServletContext()方法获取到SeverletContext对象
重写了Servlet的init方法后一定要记得调用父类的init方法,否则在service/doGet/doPost方法中使用getServletContext()方法获取ServletContext对象时就会出现java.lang.NullPointerException异常
- 我的servlet代码
package servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; public class ServletDemo4 extends HttpServlet { private ServletConfig config; @Override public void init(ServletConfig config) throws ServletException { this.config = config; } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { ServletContext context = getServletContext(); String path = context.getContextPath(); System.out.println("path = " + path); String value2 = context.getInitParameter("globalDesc"); System.out.println("value2 = " + value2); String realPath = context.getRealPath("/"); System.out.println("realPath = " + realPath); } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req, resp); } }