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

Posted

技术标签:

【中文标题】如何在 JSP 页面中使用 session 来获取信息?【英文标题】:How to use session in JSP pages to get information? 【发布时间】:2013-06-29 11:23:36 【问题描述】:

我有一个用于编辑某些用户信息的 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】:

假设你想在任何其他网页中使用 ID,那么你可以通过以下代码 sn-p 来实现:

String id=(String)session.getAttribute("uid");

这里的 uid 是您之前存储 ID 的属性。您可以通过以下方式设置:

session.setAttribute("uid",id);

【讨论】:

【参考方案2】:

form action="editinfo" method="post">
<table>
  <tr>
    <td>Username:</td>
    <td>
      <input type="text" value="<%if( request.getSession().getAttribute(" parameter_whatever_you_passed ") != null

request.getSession().getAttribute("parameter_whatever_you_passed ").toString();

 %>" />
    </td>
  </tr>
</table>
</form>

【讨论】:

与其只是发布代码,不如给出解释。【参考方案3】:

你可以直接使用 (String)session.getAttribute("username");在 scriptlet 标记内,即 .

【讨论】:

【参考方案4】:

JSP 隐式 对象喜欢sessionrequest 等在JSP 声明&lt;%! %&gt; 标记中不可用。

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

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

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

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

最好的部分是范围解析是自动完成的。所以,这里的 username 可能来自 page,或 request,或 session,或 application em> 按此顺序排列范围。如果对于特定实例,由于名称冲突而需要覆盖它,则可以将范围明确指定为

<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>

【讨论】:

Scriptlet 不好且已被弃用,但有时您会被遗留代码困住而没有时间重构。【参考方案5】:

使用

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

请注意,您对&lt;%! ... %&gt; 的使用被转换为类级别,但请求仅在转换后的servlet 的service() 方法中可用。

See how JSP code is translated to a servlet.

【讨论】:

@bigO 哦,对,那是因为&lt;!% ... %&gt; 被转换为类级别的表达式。我添加了其他信息。【参考方案6】:

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

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

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

【讨论】:

【参考方案7】:
<%! String username=(String)session.getAttribute("username"); %>
form action="editinfo" method="post">

    <table>
        <tr>
            <td>Username: </td><td> <input type="text" value="<%=username %>" /> </td>
        </tr>

    </table>

添加&lt;%! String username=(String)session.getAttribute("username"); %&gt;

【讨论】:

以上是关于如何在 JSP 页面中使用 session 来获取信息?的主要内容,如果未能解决你的问题,请参考以下文章

session中存放两个键值对,JSP页面该如何获取

如何在js页面获取session

前一个将jsp页面能用session获取值,再打开一个新的jsp页面用session怎么获取不到??

jsp中session的使用

jsp中如何获取session的值 (第三方获取session的值)

关于js在jsp页面中获取session的问题