Hade ett långt svar till dig färdigt tidigare idag men allt försvan när jag tryckte på förhandsgranska och "Back" :( Men sånt är livet :)
En Java Böna är egentligen en vanlig java klass som du anroppar på ett snyggt sätt från en JSP sida. Vilken Java klass som hellst kan bli en böna, bara du lägger till lite "set" och "get" sattser i den. Det är via dessa som JSP sidan komuniserar med bönan.
Själv använder jag aldrig bönor eftersom jag inte tycker att de tillför något när jag använder taglib.
Bönor gör livet lättare eftersom du kan använda samma böna på flera olika ställen, behöver inte skriva om koden för varje sida.
Taglib är till för att du kan göra dina egna taggar och använda dessa i dina JSP sidor och därigenom dölja all Java kod från sidan. Har själv en ganska stor java applikation där det inte finns någon Java kod i någon av JSP sidorna.
Alltså, JSP är för presentation som jag förstår det. Servlets och Bönor är primärt för och gömma undan logik. Hur skiljer sig då Bön-logik från Servlet-logik?
Jag är inte så bra på att förklara så jag försöker visa det med lite exempel, alla dessa exempel kommer att skapa en html sida med denna kod
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>
JSP är som du säger för presentation, ser ut som ASP och PHP, kod blandat med HTML.
JSP (Scriptlet)
<html>
<head>
<title>test</title>
</head>
<body>
<h1><%out.println("Hello World")%></h1>
</body>
</html>
En Servlet fungerar som en JSP fast där blandas det inte in HTML utan all HTML kod kodas in i Java (titta på exemplet om du inte förstår den meningen)
Servlet
import javax.servlet.http.HttpServlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.ServletOutputStream;
public class Admin extends HttpServlet
{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{
ServletOutputStream out = response.getOutputStream();
response.setContentType("text/html");
out.println("<html><head><title>test</title></head>");
out.println("<body><h1>Hello World</h1></body></html>");
}
}
En böna är, som jag sa, bara en vanlig klass med set och get funktioner
JSP sidan
<jsp:useBean id="myBean" class="MyBean"/>
<html>
<head>
<title>test</title>
</head>
<body>
<h1><jsp:getProperty name="myBean" property="text"/></h1>
</body>
</html>
Java Bönan
public class MyBean
{
private String text="Hello World";
public String getText()
{
return(text);
}
public void setText(String text)
{
this.text=text;
}
}
Som du förstår så kan du göra bönan mycket mer avanserad än vad jag har gjort. Du kan hämta databas information till bönan som du sedan hämtar upp på din JSP sida osv.
Taglib, jag gör samma exempel fast med taglib
JSP sidan
<%@ taglib prefix="chavez" uri="chavez.tld" %>
<html>
<head>
</head>
<body>
<h1><chavez:hello/></h1>
</body>
</html>
Taggen hello's kod (den kod som körs vid taggen <chavez:hello/>)
import javax.servlet.jsp.tagext.TagSupport;
public class Hello extends TagSupport
{
private String type="";
public int doEndTag()
throws JspTagException
{
pageContext.getOut().print("Hello World");
}
}
Som du ser så kan man göra allt som en böna kan med ett taglib, men man kan också göra mycket mer som jag inte kommer att gå in på här och nu :)
Tycker själv att taglibs är grymt mycket snyggare än bönor och när man har lärt sig lite mer om dem så är de mycket bättre också.
Om vi utgår från att vi skriver allt själv och inte använder oss av andras jobb - när skall man välja bönan och när skall man välja servleten.
Jag kan bara prata för mig själv och det är såhär som jag har använder dem
JSP: All HTML kod blandat med mina egna taggar.
Servlet: Hanterar alla anropp from HTML forms (login, lägg till ny data osv, allt som skickas till servern)
Taglib: Hämtar data från databasen, JSP sidan kan hämta den data den vill ha för tillfället genom att använda olika taggar eller olika argument med taggarna.
En annan fråga som jag har. Om man köper sig plats på ett webbhotell som stödjer JSP och Servlets, hur mycket av "krimskramset" (som jag antar Taglib är?) kan man använda? Ännu är jag bara i "Hello World" stadiet så frågan kanske verkar dum. Men det känns som om detta kommer bli riktigt roligt och lära sig! Dessutom nyttigt.
Det vet jag inte, det är upp till webbhotellet. Taglib är en del av J2EE och J2EE behövs aven för JSP och Servlets så det finns nog en ganska stor chans att det stödjs.
Kan säga efter egen erfarenhet att det är när man börjar lära sig det här (JSP, Servlet, EJB osv) som man börjar förstå att Java är fantastiskt roligt och bra.
Ps. En sak till, JSP/Servlets/Bönor anses som en snabb lösning va? Om man jämför mot t ex PHP. Nämn gärna fler fördelar (förutom att man får ett kraftfullare språk i bakgrunden) och även nackdelar där de finns.
Jag tror att JSP/Servlet är snabbare än PHP när det gäller stora saker, mycket data och uträkningar, medans PHP nog är snabbare om det är mindre saker. Java kräver också mycket RAM minne, jag kör min sida på en 64 mb server och det går ruskigt trögt och det är pga att Java kräver så mycket minne, men om man har 128 eller mer så är det inga problem.
Hoppas detta svar hjälper dig lite.
/Viktor