Java 如何在JSP页面中使用会话来获取信息?
我有一个JSP页面用于编辑一些用户的信息。当用户登录到网站时,我会将信息保留在会话中,然后在编辑页面中尝试以下操作:Java 如何在JSP页面中使用会话来获取信息?,java,jsp,session,Java,Jsp,Session,我有一个JSP页面用于编辑一些用户的信息。当用户登录到网站时,我会将信息保留在会话中,然后在编辑页面中尝试以下操作: <%! String username=session.getAttribute("username"); %> <form action="editinfo" method="post"> <table> <tr> <td>Username: </td><
<%! 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>
用户名:
但它给出了一个错误,表示会话无法解决。对此我能做些什么?使用
<% String username = (String)request.getSession().getAttribute(...); %>
请注意,您对
的使用已转换为类级别,但请求仅在转换后的servlet的service()
方法中可用
JSP隐式对象,如会话
,请求
等,在JSP声明
标记中不可用
你可以把它直接用在你的表达中
用户名:
另一方面,在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>
或,
或
form action=“editinfo”method=“post”>
用户名:
添加
出现编译错误的原因是,您试图访问声明块(
)中不可用的会话。jsp的所有隐式对象仅在服务方法中可用。声明性块的代码超出了服务方法
我建议你用EL。这是一种简化的方法
${sessionScope.username}
将为您提供所需的输出。您可以直接使用(String)session.getAttribute(“用户名”);内部scriptlet标记ie。
formaction=“editinfo”method=“post”>
用户名:
假设您想在任何其他网页中使用ID,那么您可以通过以下代码片段来实现:
String id=(String)session.getAttribute("uid");
在这里,uid是您先前存储ID的属性。您可以通过以下方式进行设置:
session.setAttribute("uid",id);
@bigO哦,对了,那是因为
被翻译成类级别的表达式。我添加了额外的信息。与其发布代码,不如随附解释。Scriptlet很糟糕,不受欢迎,但有时您会被遗留代码所困扰,没有时间进行重构。
String id=(String)session.getAttribute("uid");
session.setAttribute("uid",id);