繁体   English   中英

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

[英]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 SpecificationServlet的定义:

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

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

阅读规范的2.3 Servlet Life Cycle部分,它将彻底回答您的问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM