我想为我的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 -
输入例外报告
消息
说明服务器遇到内部错误,导致无法完成此请求。
答案 0 :(得分:0)
我想知道为什么我应该使用this.getServletContext()而不是创建我的类的实例让我们说HelloWorld world = new HelloWorld();那么world.getServletContext()......等等?
原因是Servlet不是按照您提到的方式工作的。以下是Servlet Specification中Servlet的定义:
servlet是一个基于Java技术的Web组件,由容器管理,可生成动态内容。
由容器管理的术语意味着servlet容器负责执行servlet的生命周期(创建,初始化,处理请求和销毁)。但是,如果您使用 new 来创建servlet,那么您正试图违反规范,它将无法工作。
阅读规范的 2.3 Servlet生命周期部分,它将彻底解答您的问题。