Jak korzystać z sesji na stronach JSP, aby uzyskać informacje?

Mam stronę JSP służącą do edycji informacji o użytkowniku. Kiedy użytkownik loguje się do serwisu, przechowuję informacje w sesji, a następnie na mojej stronie edycji staram się wykonać następujące czynności:

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

Ale to daje błąd mówiąc, że sesji nie można rozwiązać. Co mogę z tym zrobić?

Author: beaver, 2013-07-02

6 answers

JSP implicit objects likes session, request itd. nie są dostępne wewnątrz znaczników deklaracji JSP <%! %>.

Możesz użyć go bezpośrednio w wyrażeniu jako

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

Z drugiej strony, używanie skryptów w JSP jest od dawna przestarzałe. Zalecane jest użycie znaczników el (expression language) i JSTL. Na przykład tutaj możesz użyć EL jako

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

Najlepsze jest to, że rozdzielczość zakresu jest wykonywana automatycznie. Więc tutaj nazwa użytkownika może pochodzić z page, or request , or session , or application zakresy w tej kolejności. Jeśli dla konkretnej instancji musisz to nadpisać z powodu kolizji nazwy, możesz jawnie określić zakres jako

<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>
 82
Author: Ravi Thapliyal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 07:41:17

Powodem, dla którego pojawia się błąd kompilacji, jest próba uzyskania dostępu do sesji w bloku deklaracji (<%! %>), gdzie nie jest ona dostępna. Wszystkie obiekty niejawne jsp są dostępne tylko w metodzie service. Kod bloków deklaratywnych wychodzi poza metodę serwisową.

Radziłbym ci użyć EL. Jest to podejście uproszczone.

${sessionScope.username} dałoby ci pożądaną wydajność.

 8
Author: Darshan Mehta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 07:29:28

Użyj

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

Zauważ, że Twoje użycie {[1] } jest tłumaczone na poziom klasy, ale żądanie jest dostępne tylko w metodzie service() przetłumaczonego servletu.

Zobacz jak kod JSP jest tłumaczony na serwlet.

 8
Author: Uooo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:27
<%! 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>

Dodaj <%! String username=(String)session.getAttribute("username"); %>

 -1
Author: suresh manda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 07:27:42

Możesz bezpośrednio użyć (String)sesji.getAttribute ("username"); wewnątrz znacznika scriptlet ie.

 -1
Author: sanguine,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-02 12:17:45

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>
 -1
Author: Chirag,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-22 15:41:40