通常,您不希望将对象从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:
Message was: ${message}
如果您通过以下方式调用此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示例:
You're logged in as ${user.name}
或者/另外,您可以使用JSTL的标记在JSP文件中的特定范围内设置属性/对象。但是你通常不需要这个用于这个特定目的(“将对象传递到另一个页面”)。