【问题标题】:Why instantiating my class doesn't work with getServletContext()?为什么实例化我的类不适用于 getServletContext()?
【发布时间】:2016-10-08 16:36:44
【问题描述】:

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

输入异常报告

消息

描述服务器遇到了一个内部错误,导致它无法完成这个请求。

【问题讨论】:

    标签: java exception servlets this


    【解决方案1】:

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

    原因是 Servlet 不是按照您提到的方式设计的。这是Servlet Specification中的Servlet定义:

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

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

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

    【讨论】:

    • 哦,我想现在我明白了,这就像我想做一个容器应该做的工作,即创建 servlet 的实例 :) 感谢您的有用评论! :)
    猜你喜欢
    • 2022-01-16
    • 1970-01-01
    • 2013-01-25
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-17
    • 1970-01-01
    相关资源
    最近更新 更多