如何在 JSP 页面中使用会话来获取信息?

2022-08-31 20:48:08

我有一个用于编辑某些用户信息的JSP页面。当用户登录到网站时,我将信息保留在会话中,然后在我的编辑页面中尝试以下操作:

<%! String username=session.getAttribute("username"); %>
<form action="editinfo" method="post">
    <table>
        <tr>
            <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
        </tr>
    </table>
</form>

但它给出错误,说会话无法解决。我该怎么办?


答案 1

JSP 隐式对象等在 JSP 声明标记中不可用。sessionrequest<%! %>

您可以直接在表达式中使用它

<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>

另一方面,在 JSP 中使用 scriptlet 早已被弃用。强烈建议使用 EL(表达式语言)和 JSTL 标记。例如,在这里,您可以将 EL 用作

<td>Username: </td>
<td><input type="text" value="${username}" /></td>

最好的部分是范围解析是自动完成的。因此,此处的用户名可以按该顺序来自页面,或请求,会话或应用程序范围。如果对于特定实例,由于名称冲突而需要覆盖此内容,则可以将范围显式指定为

<td><input type="text" value="${requestScope.username}" /></td> or,
<td><input type="text" value="${sessionScope.username}" /></td> or,
<td><input type="text" value="${applicationScope.username}" /></td>

答案 2

<% String username = (String)request.getSession().getAttribute(...); %>

请注意,您对 的使用已转换为类级别,但请求仅在已翻译的 servlet 的方法中可用。<%! ... %>service()

了解如何将 JSP 代码转换为 servlet。


推荐