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ć?
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>
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ą.
${sessionScope.username}
dałoby ci pożądaną wydajność.
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.
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"); %>
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.
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>
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