Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java getRequestDispatcher()和forward()方法是如何工作的?_Java_Jsp_Servlets - Fatal编程技术网

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

Java getRequestDispatcher()和forward()方法是如何工作的?,java,jsp,servlets,Java,Jsp,Servlets,我正在使用JSP、JSTL和Java servlet创建登录/注册页面,并且在servlet的doPost()方法中使用: request.setAttribute("message", "invalid login"); request.getRequestDispatcher("index.jsp").forward(request, response); 当用户从index.jsp输入无效的登录凭据时发出警报 这是有效的,但我不知道为什么有效;以下是我的问题: 为什么对请求对象而不是响应

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

request.setAttribute("message", "invalid login");
request.getRequestDispatcher("index.jsp").forward(request, response);
当用户从index.jsp输入无效的登录凭据时发出警报

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

  • 为什么对请求对象而不是响应对象调用setAttribute()

  • 据我所知,我正在将请求和响应对象转发到index.jsp,但是jsp页面如何处理这些对象呢?这是一堆html,那么响应对象是否被修改,从而包含index.jsp的所有html代码

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

  • 多谢各位

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

  • JSP文件被编译成自定义servlet,用于将HTML写入响应

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

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

  • JSP文件被编译成自定义servlet,用于将HTML写入响应

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