2010-01-14 72 views
1

我知道我可以使用getParameter()来传递客户端对象,但我想知道如何使用服务器端对象来传递服务器端对象,就像我使用getParameter 。我已经看到了getAttribute,但是是否需要在第一个JSP页面上使用setAttribute,然后在第二个页面上使用getAttribute。任何帮助将大大appriciated。将服务器端对象从一个JSP页面传递到另一个页面

回答

1
  • 如果您正在使用forwardjsp:foprwardRequestDispatcher)从一个网页到另一个,然后使用request.setAttribute(..)request.getAttribute(),因为你是相同的请求
  • 内如果使用redirect(通过response.sendRedirect()),然后使用request.getSession().setAttribute(..)request.getSession().getAttribute()
2

您通常不希望将对象从JSP传递到JSP。您需要将对象放在的范围内,(其他)JSP可以访问。您通常也不想在JSP文件中编写原始Java代码来实现此目的。使用真正的Java类与普通香草Expression Language结合使用。

下面是其中JSP反过来可以访问使用EL请求范围存储信息的一个(半伪)的例子。首先在servlet:

protected void doGet(request, response) { 
    request.setAttribute("message", "Blah yadda blah."); 
    request.getRequestDispatcher("page.jsp").forward(request.response); 
} 

现在JSP:

<p>Message was: ${message}</p> 

如果你调用这个servlet通过如http://example.com/context/servlet,那么您将看到消息显示在输出中。

如果你想保持信息的时间长一点左右,如登录User,那么你可以使用会话此范围:

protected void doPost(request, response) { 
    String username = request.getParameter("username"); 
    String password = request.getParameter("password"); 
    User user = userDAO.find(username, password); 
    if (user != null) { 
     request.getSession().setAttribute("user", user); 
     response.sendRedirect("home"); 
    } else { 
     request.setAttribute("message", "Unknown user, please try again."); 
     request.getRequestDispatcher("login.jsp").forward(request.response); 
    } 
} 

User对象现在是在所有请求访问同一个会话,直到您明确从会话(注销)将其删除内部或直到会话得到失效(超时)。它可以在同一个会话中请求的任何JSP页面使用JSP例如:

<p>You're logged in as ${user.name}</p> 

备选地/另外地,可以使用JSTL<c:set>标记来设置的属性/对象在JSP内部在一定的范围文件。但你往往不需要这个这个特定目的(“传递对象到另一页”)。

相关问题