将服务器端对象从一个JSP页面传递到另一个JSP页面

时间:2010-01-14 15:27:24

标签: web-services jsp

我知道我可以使用getParameter()传递客户端对象,但我想知道如何使用传递服务器端对象,就像我使用getParameter一样。我见过getAttribute但是我需要在第一个JSP页面上使用setAttribute,然后在第二个页面上使用getAttribute。任何帮助都会受到极大的关注。

2 个答案:

答案 0 :(得分: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文件中的特定范围内设置属性/对象。但是你通常不需要这个用于这个特定目的(“将对象传递到另一个页面”)。

答案 1 :(得分:1)

  • 如果您从一个页面到另一个页面使用forwardjsp:foprwardRequestDispatcher),请使用request.setAttribute(..)request.getAttribute(),因为您位于同样的要求
  • 如果您使用redirect(通过response.sendRedirect()),请使用request.getSession().setAttribute(..)request.getSession().getAttribute()