Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在JSP页面中使用会话来获取信息?_Java_Jsp_Session - Fatal编程技术网

Java 如何在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><

我有一个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>

用户名:
但它给出了一个错误,表示会话无法解决。对此我能做些什么?

使用

<% 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);