小编典典

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

jsp

我正在使用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对象?

谢谢。


阅读 391

收藏
2020-06-10

共1个答案

小编典典

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

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

  3. RequestDispatcher,因为它需要了解servlet环境从请求创建。否则它将不知道如何调度任何东西。

2020-06-10