programmera.net -> jsp -> normal för utskrift | info@programmera.net |
JavaBeans i JSP
1. Vad är en JavaBean 2. En första böna 3. Testa din första böna i JSP 4. Deklaration 5. Räckvidd 6. Hur bönan initieras 7. Använda bönor i script |
1. Vad är en JavaBean
JavaBean (böna) är en klass som bara lagrar data. Ofta använder man bönor för att slussa data mellan databasen och webbläsaren. En böna är en implementation av DTO (Data Transfer Object). Nedan listas några anledningar till att använda bönor:
En böna är egentligen en vanlig klass men måste uppfylla vissa krav:
Men:
2. En första böna
Vi skapar en klass ollesBean.java med följande innehåll:
Klassen sparas till sökvägen CATALINA_HOME/webapps/examples/WEB-INF/classes/nu/programmera/ollesBean.java och kompileras. Nu har vi skapat en böna.
package nu.programmera;
class ollesBean{
private String firstname;
private String lastname;
public String getFirstname(){
return firstname;
}
public String getLastname(){
return lastname;
}
public void setFirstname(String s){
firstname=s;
}
public void setLastname(String s){
lastname=s;
}
}
3. Testa din första böna i JSP
För att använda bönan skapar vi två JSP-sidor, test1.jsp och test2.jsp. Koden förklaras längre ner på sidan. Vi börjar med att skapa test1.jsp med sökvägen CATALINA_HOME/webapps/examples/jsp/test1.jsp:
Sedan test2.jsp i samma katalog:
<HTML>
<BODY>
<H1>Testa bönan 1</H1>
<FORM ACTION="test2.jsp" METHOD="post">
Fyll i:
<BR/>förnamn: <INPUT type="text" name="firstname" >
<BR/>efternamn: <INPUT type="text" name="lastname">
<BR/><INPUT type="submit" value="skicka" >
</FORM>
</BODY>
</HTML>
Vi testar den första sidan:
<jsp:useBean id="ob" class="nu.programmera.ollesBean" scope="session" />
<jsp:setProperty name="ob" property="*" />
<HTML>
<BODY>
<H1>Testa bönan 2</H1>
<BR/>förnamn: <jsp:getProperty name="ob" property="firstname" />
<BR/>efternamn: <jsp:getProperty name="ob" property="lastname" />
</BODY>
</HTML>
Efter att vi tryckt på submit får vi:
4. Deklaration
Innan man kan använda en böna måste den deklareras med jsp:useBean. Deklarationen av bönan ollesBean i filen test2.jsp ser ut såhär:
Nedan förklaras de olika attributen i som kan användas i jsp:useBean:
<jsp:useBean id="ob" class="nu.programmera.ollesBean" scope="session" />
Attribut Obligatorisk Beskrivning id Ja Detta är det namn som man använder för att använda objektet senare i JSP-sidan. scope Ja Objektets livstid, förklaras nedan. class Nej Sökvägen till bönan. Webb-behållaren söker i /WEB-INF/classes/ efter bönan. type Nej Bönans klass, superklass, eller något gränssnitt som bönan implementerar. Objektet får den specifierade typen. Om attributet inte finns får objektet typen som specifieras i attributet class. beanName Nej Skapar ett objekt med metoden java.beans.Beans.instantiate().
De tre sista attributen är lite märkliga, ingen av dem är obligatorisk men antingen class eller type måste finnas. De förklars senare.
5. Räckvidd
Bönans räckvidd bestämmer hur länge ett objekt överlever och vilka som kan få tillgång till det. Räckvidden bestämms med scope då bönan deklareras. När jsp:useBean översätts till servletkod, tittar tolken på attributet scope för att avgöra i vilket objekt bönan ska lagras i. Följande märke:
Detta märke kommer att generera följande kod i Servletten:
<jsp:useBean id="ob" class="nu.programmera.ollesBean" scope="session" />
Alltså, vi ser att scope="session" gör att objektet lagras som attributet ob i session-objektet. Nedan beskrivs de olika räckvidderna en böna kan deklareras med:
HttpSession ses=request.getSession(true);
nu.programmera.ollesBean ob= (nu.programmera.ollesBean) ses.getAttribute("ob");
if(ob == null){
ob= new nu.programmera.ollesBean();
ses.setAttribute("ob",ob);
}
Räckvidd Lagras Beskrivning page Lokalt Objektet kastas då JSP-sidan är processad. request request Objektet överlever så länge som request-objektet, d.v.s. under hela bearbetningen av HTTP-förfrågan. request-objektet kan nås inifrån bönor, märkesbibliotek, JSP-sidor som inkluderas och JSP-sidor som man kommer till via jsp:forward. session session Objektet överlever så länge som session-objektet överlever. Detta är kanske den vanligaste räckvidden för bönor, och det är framförallt bönor man lagrar i session-objektet. Endast ägaren av sessionen kan komma åt objektet. application context Objektet överlever så länge som context-objektet överlever, d.v.s. tills servern stängs av. Webb-behållaren skapar bara ett enda objekt som alla webbanvändare delar på.
6. Hur bönan initieras
I vårt exempel har vi bara använt attributet class, men även type och beanName måste beskrivas. Detta är vad webb-behållaren generellt försöker göra när den träffar på en jsp:useBean:
Nu är det inte så enkelt, eftersom de tre attributen class, type och beanName kan kombineras på olika sätt. Följande kombinationer är godkända:
7. Använda bönor i script
I exemplet ovan har vi bara använt bönan med XML-märkena jsp:setProperty och jsp:getProperty. Detta är de enda XML-märken som en böna kan ha, och de räcker inte så långt. Ofta har bönor metoder som man vill använda, och då måste man använda scriptlets. För att demonstrera detta sätt lägger vi till följande metod i ollesBean:
Vi kompilerar om ollesBean.java, och skapar en ny sida test3.jsp:
public String getFullName(String title){
return title +" "+ firstname + " "+lastname;
}
Spara test3.jsp tillsammans med de andra i CATALINA_HOME/webapps/examples/jsp/. Gör följande:
<jsp:useBean id="ob" class="nu.programmera.ollesBean" scope="session" />
<HTML>
<BODY>
<H1>Testa bönan 3</H1>
<% ob.setFirstname("Frans"); %>
Hela namnet: <%= ob.getFullName("Herr") %>
</BODY>
</HTML>
Om man prompt inte vill använda sig av script i JSP-sidan kan man istället skriva märkesbibliotek där alla anrop sker via XML. Märkesbibliotek beskrivs på sidan
märkesbibliotek .