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

yra*_*lik 43 java session jsp

我有一个用于编辑某些用户信息的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>
Run Code Online (Sandbox Code Playgroud)

但它给出了错误,说会话无法解决.我能做些什么呢?

Rav*_*yal 93

JSP 隐含对象喜欢session,request等不可用JSP声明中<%! %>的标签.

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

<td>Username: </td>
<td><input type="text" value="<%= session.getAttribute("username") %>" /></td>
Run Code Online (Sandbox Code Playgroud)

另外值得注意的是,长期以来不推荐在JSP中使用scriptlet.强烈建议使用EL(表达式语言)和JSTL标记.例如,在这里你可以使用EL作为

<td>Username: </td>
<td><input type="text" value="${username}" /></td>
Run Code Online (Sandbox Code Playgroud)

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

<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>
Run Code Online (Sandbox Code Playgroud)


Uoo*_*ooo 9

使用

<% String username = (String)request.getSession().getAttribute(...); %>
Run Code Online (Sandbox Code Playgroud)

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

了解JSP代码如何转换为servlet.


Dar*_*hta 8

您收到编译错误的原因是,您尝试访问声明块(<%! %>)中不可用的会话.jsp的所有隐式对象仅在服务方法中可用.声明性代码的代码超出了服务方法.

我建议你使用EL.这是一种简化的方法.

${sessionScope.username} 会给你想要的输出.