2017-03-05 112 views
1

我正在使用JSP,JSTL和一个Java servlet登录/注册页面,而且我使用,在servlet的doPost()方法:getRequestDispatcher()和forward()方法如何工作?

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对象?

谢谢。

回答

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

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

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