Champ d'application de la jsp:useBean
la maison.jsp
<jsp:useBean id="username" class="java.lang.String" scope="application"/>
<%
username="Jitendra";
%>
<jsp:include page="include.jsp"/>
inclure.jsp
<%=username%>
Cela donne un message d'erreur indiquant “nom d'utilisateur” n'est pas défini dans la comprennent.jsp, même si le champ d'application de Haricot est une application...
Vous devez vous connecter pour publier un commentaire.
À votre problème, quelque chose qui vous déclarer localement en utilisant l'ancienne, scriptlets est pas lié avec un
jsp:useBean
. Aussi, déclaration d'un local scriptlet variable est pas visible dans les pages incluses, vous devez explicitement les mettre dans au moins la demande portée. Que l'utilisation de scriptlets est un mauvaise pratique. Je recommande d'oublier à tous.Dans votre cas particulier, il suffit de créer un réel java bean pour contenir les données. C'est une classe avec un (implicite) constructeur par défaut et de propriétés privées qui sont exposés en public getters/setters. Voici un exemple de base:
Ensuite, vous pouvez utiliser une classe de servlet pour traiter les demandes. Vous pouvez utiliser des servlet
doGet()
méthode pour cela.Carte cette servlet dans
web.xml
sur unurl-pattern
, par exemple, de/show
. Cette servlet doit donc être accessible parhttp://example.com/context/show
et sesdoGet()
serait immédiatement exécuté.Puis changer/créer le fichier JSP
show.jsp
qui vous place dans/WEB-INF
pour empêcher l'accès direct (de sorte que les clients ne peuvent pas y accéder parhttp://example.com/context/show.jsp
mais sont "forcés" à l'appel de la servlet) avec la ligne suivante:La
${user}
fait référence à l'objet qui est associé à toute demande/session/l'application de l'attribut cléuser
. Cela ne les coulissesjspContext.findAttribute("utilisateur")
. Comme le retour de l'User
instance est conforme au javabean spec, le${user.name}
appeler legetName()
méthode sur laUser
instance et de la EL afficher ses résultats.Oh, je dois ajouter, que vous ne pas besoin
jsp:useBean
pour cela que la servlet a déjà créé et mis souhaité haricot dans le champ d'application.Cela dit, je recommande de commencer avec un décent JSP/Servlet tutoriel/livre. Exemples:
Espère que cette aide.
Votre code est "mal", parce qu'une
java.lang.String
n'est pas vraiment un haricot. De manière significative, il n'a pas un "set" de la méthode de modifier son texte (c'est volontaire, il est destiné à être immuable).La façon dont vous accédez à grains est de déclarer un, et ensuite utiliser ses propriétés (c'est à dire les noms derrière le get() et set ()) pour le changer. Vous ne pouvez pas modifier directement l'exemple réel d'haricot, seulement ses valeurs.
Sur Tomcat 6,
home.jsp
est traduit dans le code de la Servlet:Bien que le comportement est le même, le code exact généré dépend de l'implémentation du serveur d'applications.
Le champ d'application de la locale
username
variable ne se prolonge pas dans la Servlet qui sera généré à partir deinclude.jsp
. Vous n'êtes pas à la définition de la valeur "Jitendra" dans le champ d'application, seul le réglage de la valeur de la variable locale.Comme d'autres l'ont souligné, immuable Chaîne de ne pas faire une très bonne bean.