【发布时间】:2012-12-07 21:19:11
【问题描述】:
我的问题是:我想在我的 JSP 页面上使用会话,而不使用 servlet(例如 php)
问题是:怎么做?我读到 session 就像 jsp 中的 request 一样隐含,但我实际上并不知道如何使用它。
我有一个主页,它在 url 上传递了一些变量(如 index.jsp?id=1)。
感谢您的帮助。
【问题讨论】:
我的问题是:我想在我的 JSP 页面上使用会话,而不使用 servlet(例如 php)
问题是:怎么做?我读到 session 就像 jsp 中的 request 一样隐含,但我实际上并不知道如何使用它。
我有一个主页,它在 url 上传递了一些变量(如 index.jsp?id=1)。
感谢您的帮助。
【问题讨论】:
您可以使用JSTL <c:set> 和<c:remove> 来管理会话属性。
以下内容实际上是session.setAttribute("foo", "bar"):
<c:set var="foo" value="bar" scope="session" />
以下内容实际上是session.removeAttribute("foo"):
<c:remove var="foo" scope="session" />
当然,你可以使用通常的EL方式访问属性,下面打印session.getAttribute("foo")。
${foo}
与具体问题无关,您应该努力消除对 servlet 的厌恶。这不是一个好习惯。 JSTL 不能提供使业务逻辑变得轻而易举的一切,这将迫使您回退到遗留的scriptlet。我希望这只是无知。仔细阅读我们的 servlets wiki 页面,了解如何轻松创建和使用它:https://stackoverflow.com/tags/servlets/info 这个答案可能有点启发性:How to avoid Java code in JSP files?
【讨论】:
假设你有两个jsp
index.jsp = 获取 index.jsp 中的参数并将值添加到会话(隐式对象)
<%String empId = request.getParameter("id");
session.setAttribute("empId", empId);
response.sendRedirect("homePage.jsp");
%>
现在在 homePage.jsp = 编写代码以检索先前使用键 empId
添加的值<%
String employeId = (String)session.getAttribute("empId");
%>
【讨论】:
你必须在jsp代码中使用这个
<%
HttpSession sess = request.getSession();
if (sess==null)
{
RequestDispatcher dispatcher = request.getRequestDispatcher("/login.jsp");
dispatcher.forward(request, response);
}
%>
你可以获得会话及其属性
对于 index.jsp?id=1 你可以使用
request.getParameter("id")
【讨论】: