我知道我可以使用getParameter()传递客户端对象,但我想知道如何使用传递服务器端对象,就像我使用getParameter一样。我见过getAttribute但是我需要在第一个JSP页面上使用setAttribute,然后在第二个页面上使用getAttribute。任何帮助都会受到极大的关注。
答案 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)
forward
(jsp:foprward
或RequestDispatcher
),请使用request.setAttribute(..)
和request.getAttribute()
,因为您位于同样的要求redirect
(通过response.sendRedirect()
),请使用request.getSession().setAttribute(..)
和request.getSession().getAttribute()