Java 在RequestDispatcher之前,如果不从setAttribute()方法赋值,请求如何拥有属性?

Java 在RequestDispatcher之前,如果不从setAttribute()方法赋值,请求如何拥有属性?,java,jsp,setattribute,requestdispatcher,Java,Jsp,Setattribute,Requestdispatcher,当我们试图使用RequestDispatcher将请求从servlet转发到jsp时,我们使用request.setAttribute()方法。 但当我们试图将请求从servlet转发到另一个servlet时,我们不使用request.setAttribute()方法,结果打印得很好 RequestDispatcher dis=request.getRequestDispatcher("welcome"); dis.forward(request, response

当我们试图使用
RequestDispatcher
将请求从servlet转发到jsp时,我们使用
request.setAttribute()
方法。

但当我们试图将请求从servlet转发到另一个servlet时,我们不使用
request.setAttribute()
方法,结果打印得很好

  RequestDispatcher dis=request.getRequestDispatcher("welcome");          
  dis.forward(request, response);      
你能举例说明为什么吗?多谢各位


login.jsp

 <form action="login" method="post"> 
     User Name:<input type="text" name="uname"/><br/> 
     Password:<input type="password" name="upass"/><br/> 
     <input type="submit" value="SUBMIT"/> 
 </form> 

那么请求中可能已经有了属性。除非您希望它以某种方式神奇地出现在请求属性中?JSP在运行时被编译成servlet,所以转发到JSP还是servlet没有区别。@Kayaman我的问题是servlet如何具有该请求属性而JSP没有?因为它们使用相同的方法来转发结果。请求要么有属性,要么没有属性。Servlets和JSP在这里与任何事情都无关。如果您的方法完全按照您所展示的那样编写——两行紧跟在后面,那么您可以在JSP请求中设置属性,然后将相同的请求(已经具有该属性)转发给servlet@VeselinDavidov不,我不是两种方法都用。这只是一个例子
 <form action="login" method="post"> 
     User Name:<input type="text" name="uname"/><br/> 
     Password:<input type="password" name="upass"/><br/> 
     <input type="submit" value="SUBMIT"/> 
 </form> 
    String name = request.getParameter("uname");
    String pass = request.getParameter("upass");
    if (name.equals("dilini") && pass.equals("123")) {
    // ONLY ONE OPTION IS USING HERE
    // for a jsp
    request.setAttribute("uname", name);
    request.getRequestDispatcher("welcome.jsp").forward(request, response);

    // for a servlet
    request.getRequestDispatcher("welcome").forward(request, response);

   }