【问题标题】:How to use session in JSP pages to get information?如何在 JSP 页面中使用 session 来获取信息?
【发布时间】: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>

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

【问题讨论】:

    标签: java jsp session


    【解决方案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;

          【讨论】:

            猜你喜欢
            • 2014-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-08-02
            • 2022-07-31
            • 1970-01-01
            • 2011-04-04
            • 2020-05-28
            相关资源
            最近更新 更多