为什么实例化我的类不适用于getServletContext()?

时间:2016-10-08 16:36:45

标签: java exception servlets this

我想为我的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 -

     

输入例外报告

     

消息

     

说明服务器遇到内部错误,导致无法完成此请求。

1 个答案:

答案 0 :(得分:0)

  

我想知道为什么我应该使用this.getServletContext()而不是创建我的类的实例让我们说HelloWorld world = new HelloWorld();那么world.getServletContext()......等等?

原因是Servlet不是按照您提到的方式工作的。以下是Servlet Specification中Servlet的定义:

  

servlet是一个基于Java技术的Web组件,由容器管理,可生成动态内容。

由容器管理的术语意味着servlet容器负责执行servlet的生命周期(创建,初始化,处理请求和销毁)。但是,如果您使用 new 来创建servlet,那么您正试图违反规范,它将无法工作。

阅读规范的 2.3 Servlet生命周期部分,它将彻底解答您的问题。