![](/img/trans.png)
[英]getServletContext().getRealPath() doesn't work in controller (NPE), but works in jsp
[英]Why instantiating my class doesn't work with getServletContext()?
我想为我的 jsp 页面创建一个控制器,我想知道为什么我应该使用this.getServletContext()
而不是创建我的类的实例。 假设HelloWorld world = new HelloWorld();
然后world.getServletContext()
等。
这是我的代码:
public class HelloWorld extends HttpServlet {
/**
*
* @param request
* @param response
* @throws javax.servlet.ServletException
* @throws java.io.IOException
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HelloWorld world = new HelloWorld();
world.getServletContext().getRequestDispatcher("/WEB-INF/index.jsp").forward(request, response);
}
我明白了:
HTTP 状态 500 -
输入异常报告
信息
说明 服务器遇到内部错误,无法完成此请求。
我想知道为什么我应该使用 this.getServletContext() 而不是创建我的类的一个实例让我们说 HelloWorld world = new HelloWorld(); 然后 world.getServletContext() ...等?
原因是 Servlet 不是按照您提到的方式工作的。 这是Servlet Specification中Servlet的定义:
servlet 是基于 Java 技术的 Web 组件,由容器管理,可生成动态内容。
容器管理一词是指servlet容器负责执行servlet的生命周期(创建、初始化、处理请求和销毁)。 但是,如果您使用new来创建 servlet,那么您将尝试违反规范,它将无法正常工作。
阅读规范的2.3 Servlet Life Cycle部分,它将彻底回答您的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.