Les session et sessionScope la même dans les JSP EL?
public class LoginAction extends ActionSupport {
private String username;
private String password;
@Override
public String execute() throws Exception {
ActionContext ctx = ActionContext.getContext();
Integer counter = (Integer)ctx.getApplication().get("counter");
//put counter into application
ctx.getApplication().put("counter", counter);
//put username into session
ctx.getSession().put("user", username);
if (getUsername().equals("crazyit.org")
&& getPassword().equals("leegang")) {
ctx.put("tip", "Login Success! ");
return SUCCESS;
}
else {
ctx.put("tip", "Login Falied!");
return ERROR;
}
}
}
J'ai mis "counter"
en application "user"
en session et "tip"
dans ActionContext
. En JSP je peux utiliser ${session.user}
et ${sessionScope.user}
pour faire référence à l ' "utilisateur" de la propriété. ${request.tip}
et ${requestScope.tip}
de référence tip
.
Mes questions:
- Sont session, demande, demande la même chose que
sessionScope
,requestScope
,applicationScope
en EL? - Quelle est la relation entre
ActionContext
etrequest(requestScope)
?
P. S.:
Je test ${request == requestScope}
ce qui est vrai, cela signifie qu'ils sont les mêmes?
OriginalL'auteur StrikeW | 2013-07-11
Vous devez vous connecter pour publier un commentaire.
Avec l'expression language (EL), la portée des éléments de valeur sont des cartes d'attributs dans les objets qu'ils désignent. Par exemple, le requestScope est une représentation graphique des valeurs dans l'objet de requête. Ceci est expliqué assez clairement de détails sur cette page: Java Servlet et JSP. Si vous lisez le EL sections, vous remarquerez un point sur la demande vs demande portée ici: Le requestScope est PAS l'objet de demande.
Je recommande la lecture par le biais de cette page pour obtenir une meilleure compréhension de servlet/jsp en général.
Dont la ActionContext se rapporte à ces éléments, il est vraiment un wrapper utilisé par des haubans pour encapsuler la servlet. Vous pouvez lire plus de détails à ce sujet ici: Accéder à l'application, de la session, demander des objets.
Il y a eu quelques références à des valeurs implicites donné ici, mais j'ai envie de dire que c'est implicite n'a pas vraiment l'expliquer. Lorsque vous utilisez EL pour accéder à servlet variables, vous pouvez déclarer explicitement étendue que vous souhaitez pour référence, tels que:
Vous pouvez également référence implicitement par l'omission de la portée:
Maintenant, le problème qui peut se poser ici est que les variables avec le même nom peut provoquer une collision. EL va vérifier les valeurs implicites dans un ordre spécifique: pageScope, requestScope, sessionScope, et applicationScope, param, paramValues, en-tête, headervalues, initParam, cookie, pageContext. Ce que cela signifie est que si vous avez une variable dans la requête portée avec le même nom qu'une variable dans la session ou de la portée de l'application, par exemple, la portée de la requête de la valeur sera référencé.
Où puis-je trouver de la documentation sur le bon de commande que vous avez mentionné lors de champ est omis dans EL? Merci!
Je ne me souviens pas où précisément je l'ai trouvé, mais il y a quelques informations ici: docs.oracle.com/cd/E19159-01/819-3669/bnaij/index.html, qui indique: "Par exemple, lors de l'évaluation de l'expression ${produit}, le solveur va chercher le produit dans la page, request, session, et les applications étendues et sera de retour à sa valeur. Si le produit n'est pas trouvé, la valeur null est retournée." Faire une recherche Google pour "IMPLICITE des objets disponibles pour JSP EL de commande d'accès" fournit également des tonnes de points de départ pour la recherche.
OriginalL'auteur Russell Shingleton
Par défaut
page, request, session and application
les objets sont à la disposition des pages JSP.Vous pouvez donc accéder ensuite à l'aide d'EL syntaxe.
Et tableau suivant montre les objets IMPLICITES disponible pour EL.
Afin de session et sessionScope sont les mêmes mais diffère dans le contexte dans lequel elles sont utilisées.Plus précisément
session is object
etsessionScope is map (key, value) of Attribute and its value
.Si vous dites
${session.sessionAttr}
il se réfère à l'objet de sessiondisponible à la page JSP.
Si vous dites
${sessionScope.sessionAttr}
il se réfère IMPLICITEMENTobjet de session disponible pour EL.
oui...
Merci! Est-il une référence (documentation) à ce sujet?
Référence pour vous, mon cher ami @RoyLing
Merci! vraiment utile.
OriginalL'auteur Dipak Ingole
HttpSession
,HttpServletRequest
etServletContext
objets tout ensessionScope, requestScope and applicationScope
fournir l'accès à toutes la séance, demande d'application et l'étendue des attributs.Vous pouvez dire que applicationScope > sessionScope > requestScope.
Non, tous les champs ont des attributs différents. Ce que vous pouvez dire, c'est que L'étendue la plus étroite est reqeustScope, puis sessionScope et ensuite la portée de l'application.
OriginalL'auteur Prasad Kharkar
La
ActionContext
est un Struts2 chose, et il est créé dans chaque demande qui est géré par le framework. Quand il a créé le cadre remplit avec la servlet choses avec ses propres implémentations derequest
,session
, etapplicaton
. Et lorsque vous l'utilisez dans l'application de ces objets sont référencés. Pour accéder à la servlet trucs utiliser leServletActionContext
qui permet de récupérer les ressources appropriées. Struts2 également enveloppe leServletRequest
de donner l'accès aux propriétés de l'action etvalueStack
de l'EL expressions.sessionScope
,requestScope
, etapplicationScope
utilisé avec EL expressions à évaluer à la servlet trucs attributs. Que sont les différences.OriginalL'auteur Roman C
Jetez un oeil ci-dessous le code que j'ai essayé.
dans
EL
comme indiqué par Prasad et le Capitaine lorsque vous utilisez${sessionScope}
il seulement des cartes de la session d'étendue variable des noms à leurs valeurs.si vous souhaitez obtenir session client de l'objet que vous devez utiliser
pageContext.session
mais lorsque vous utilisez
${session}
,el
recherche pour l'attribut maped avec le nom de la session dans l'ordre:page->request->session->application
étendues à partir de la gauche vers la droite.${request == requestScope}
donnefalse
parce querequestScope
est à la demande du client de l'objet lors derequest
va provoquerEL
à la recherche pour objet maped avecrequest
nom dans diversscopes
. Mais dans votre cas, il esttrue
en raison destruts2
Et pourquoi dans struts2
request
est égal àrequestScope
? Pouvez-vous référencé certains matériaux pour moi?JSP
'session et${pageContext.session}
sont les mêmes objets, mais${session}
et${sessionScope}
ne sont pas les mêmes.jsp EL
n'asession
comme un objet implicite au lieu de cela il asessionScope
comme un objet implicite mais seulement des cartes de la session d'étendue variable des noms à leurs valeurs qui nous défini à l'aide desession.setAttribute()
ainsi, lorsque vous voulez consulter du client quepageContext.session
est préférable. Ceci est un lien officielEL
de la documentation.${session.getClass().getSimpleName() }
m'a donnéSessionMap
de la sortie et après beaucoup de recherche, et en se référant EL exemple de lien et Struts 2 SessionMap je suppose queStruts 2
etJSP EL
se réfère au même objet, lorsque nous écrire${session}
et${sessionScope}
tout en utilisantstruts 2
.OriginalL'auteur Kartik73