getRequestDispatcher()和forward()方法如何工作?

时间:2017-03-05 00:49:41

标签: java jsp servlets

我正在使用JSP,JSTL和Java servlet创建一个登录/注册页面,我正在使用servlet的doPost()方法:

request.setAttribute("message", "invalid login");
request.getRequestDispatcher("index.jsp").forward(request, response);

在用户从index.jsp输入无效登录凭据时提醒用户。

这有效,但我不知道为什么会有效;这是我的问题:

  1. 为什么在请求对象而不是响应对象上调用setAttribute()?

  2. 据我所知,我将请求和响应对象转发到index.jsp,但jsp页面如何处理这些对象?它是一堆html,因此更改了响应对象,以便它包含index.jsp的所有html代码?

  3. 为什么getRequestDispatcher()是一个实例方法?也就是说,为什么不能使用构造函数创建RequestDispatcher对象?

  4. 谢谢。

1 个答案:

答案 0 :(得分:0)

  1. 传递HttpServletRequest直到最终处理响应。也就是说,在呈现JSP时,请求对象仍然可用。这是在整个请求处理过程中传递任意数据的方法。

  2. JSP文件被编译为自定义servlet,用于将HTML写入响应。

  3. RequestDispatcher是根据请求创建的,因为它需要了解servlet环境。否则它不会知道如何派遣任何东西。