webForumDet fria alternativet

Förhållande mellan JSP, Servlets och bönor

Javaur Java

18 svar · 1 029 visningar · startad av Chavez

ChavezMedlem sedan maj 20001 953 inlägg
#1

Hade tänkt och vidga mitt webbkunnande lite. Använder nu PHP till allt (server-side), men påväg mot riktigt programmering hade jag tänkt och lära mig lite av Java's tekniker för webben. Det känns lite mer robust än PHP (som jag dock inte klagar på, det fyller mina behov gott och väl).

Har läst en del om JSP och Servlets nu. Vad jag förstår är JSP ett "lager" ovanpå Servlets, för och få det och mer likna ett skriptspråk (med dess fördelar). Har jag rätt där? Om jag har det - kan man skippa JSP och bara köra Servlets, eller måste man alltid gå JSP vägen? I boken jag läser är huvudargumentet för JSP att det är lättare och hantera inbäddad HTML och att Servlets ("vanlig Java") hanterar strängar lite taskigt. Nu är inte det något problem eftersom jag kommer separera Java-kod från HTML-kod genom en templateklass. Om man inte behöver JSP, vad är argumenten för och använda det ändå?

Om man inte kan skippa JSP, vilket skall vara JSP och vilket skall vara Servlets? Och var kommer bönorna in? Har inte läst något om dem, så där kan jag ingenting alls.

Hmm, kort sagt - se rubriken ;)

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.

Tacksam om någon kan reda ut dessa otaliga frågetecken!

SPiNMedlem sedan mars 20007 896 inlägg
#2

kan man skippa JSP och bara köra Servlets, eller måste man alltid gå JSP vägen? I boken jag läser är huvudargumentet för JSP att det är lättare och hantera inbäddad HTML och att Servlets ("vanlig Java") hanterar strängar lite taskigt. Nu är inte det något problem eftersom jag kommer separera Java-kod från HTML-kod genom en templateklass. Om man inte behöver JSP, vad är argumenten för och använda det ändå?

Ja, du kan skippa JSP egentligen. Servlets "står" av sig själva de också. :)

En fördel med JSP är ju, som boken tog upp, att det är enkelt att "switcha" mellan JSP och HTML med <%-taggar. En nackdel är att JSP-sidor är lite söligare än vanliga Servlets, som jag har förstått det - för Servlets är ju redan kompilerade(?).

Och var kommer bönorna in?

Bönor är egna komponenter i en applikation, och man behöver dem inte när man programmerar JSP eller Servlets - även fast de kan göra livet enklare.

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.

Att man får ett kraftfullare språk i bakgrunden gör ju egentligen hela grejjen. Det är snabbt, enkelt att bygga upp applikationer/system med nTier-modellen och man kan integrera det mesta som behövs på sin server, mha t.ex. J2EE som gör din server ännu kraftfullare med connection pooling, EJB's, osv.

ViktorMedlem sedan aug. 20021 752 inlägg
#3

SPiN skrev:

Ja, du kan skippa JSP egentligen. Servlets "står" av sig själva de också. :)

En fördel med JSP är ju, som boken tog upp, att det är enkelt att "switcha" mellan JSP och HTML med <%-taggar. En nackdel är att JSP-sidor är lite söligare än vanliga Servlets, som jag har förstått det - för Servlets är ju redan kompilerade(?).

En JSP sida är teoretiskt sätt inte söligare än en vanlig Servlet eftersom en JSP sida, efter första besöket på den, kompileras om till en servlet. Skilnaden ligger, om det finns någon, i hur bra koden är skriven. Om man kör Tomcat kan man hitta dessa automatgenererade servlets i katalogen "work".

Om du vill ha riktigt snygga html/jsp sidor (nu menar jag snygg ur en programmerares synvinkel :)) så ska du även titta på Taglib, min personliga favorit i Java :)

/Viktor

ChavezMedlem sedan maj 20001 953 inlägg
#4

SPiN:

Bönor är egna komponenter i en applikation, och man behöver dem inte när man programmerar JSP eller Servlets - även fast de kan göra livet enklare.

På vilket sätt gör det livet enklare då? Vad kan en böna göra som en servlet inte klarar av? Jag skall läsa på om dem med, ni skall inte lära mig, men det känns som om jag måste greppa helheten lite också :)
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?
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.

Viktor: Taglib? En snabb förklaring mottages gärna. Eller var man kan läsa mer om det (beger mig till http://java.sun.com direkt efter jag postat detta ;)).

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.

ViktorMedlem sedan aug. 20021 752 inlägg
#5

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

SPiNMedlem sedan mars 20007 896 inlägg
#6

Nu hamnar jag off-topic, men det struntar jag i:
Viktor, jättekul att du har hittat hit till webForum! Väldigt genomtänkta och bra inlägg/svar, en stor upp-tumme! :) :bire

ChavezMedlem sedan maj 20001 953 inlägg
#7

Håller med SPiN, mycket trevligt!

Tack för ett mycket utförligt svar. Nu har jag fått ett bra hum om de absoluta grunderna. Taglibs och Bönor verkar ju vara liknande tekniker (åtminstone, som du sa, på denna enkla nivån). Iden att separera presentation från logik tilltalar mig, och att ha det inbyggt direkt i språket är ju helt kanon!

I PHP har jag hanterat det med sk templatesklasser som ersätter templatesvariabler och dynamiska block som ligger i HTML-koden som kommentarer. Det funkar ju också fint, men detta verkar smidigare :)

Har installerat Resin nu. Och tror mig ha fattat grunderna för att börja koda lite smått. Nu skall vi bara ta en titt på JDBC (så heter det va?) så att jag kan snacka med min Mysql-databas.

Sen skall vi benchmarka lite och kolla PHP gentemot JSP/Servlets/Bönor/Taglibs och vad vi nu kan gräva fram, det skall bli intressant som bare den!

SPiNMedlem sedan mars 20007 896 inlägg
#8

JDBC (så heter det va?)

Jäpp, så heter det. ;)

JDBC kan vara rätt klurigt om man vill ha det så snabbt och stabilt som möjligt, eftersom att det finns tre olika typer av drivrutiner/bryggor att använda. Den första är ODBC-brygga, vilken är Microsofts API för att kunna koppla mot en databaskälla. Det är söligt och plattformsberoende, alltså ska man försöka undvika denna typ av databas-drivrutin. Den andra typen är halvt Java, halvt native-skrivna drivrutiner. De är mycket snabbare än ODBC-bryggan, men är den rätt lik den. Ett tredje alternativ är att använda rena Java-drivrutiner, vilket är det snabbaste - eftersom att en direkt socket-koppling skapas till databasen. Så se till att hitta rätt drivrutiner för JDBC.

Sen skall vi benchmarka lite och kolla PHP gentemot JSP/Servlets/Bönor/Taglibs och vad vi nu kan gräva fram, det skall bli intressant som bare den!

Jag hoppas att du presenterar resultatet här. :)

ChavezMedlem sedan maj 20001 953 inlägg
#9

Så se till att hitta rätt drivrutiner för JDBC.

Att koppla mot Mysql kräver alltså fler installationer och knepiga konfigureringar? :)
Som det är nu pakade jag i princip bara upp Resin och körde igång det.

Sen så beror det ju på webbhotellet man väljer. Vilken lösning på JDBC de valt.

Japp, om jag orkar göra det ordentligt skall jag presentera resultaten här, lovar!

SPiNMedlem sedan mars 20007 896 inlägg
#10

Chavez skrev:

Att koppla mot Mysql kräver alltså fler installationer och knepiga konfigureringar?

Absolut inte. Det räcker med att tanka ner drivrutinerna ( För MySQL rekommenderas org.gjt.mm.mysql.Driver ) och lägga till .jar:en i CLASSPATHen, så är saken biff. :)

ChavezMedlem sedan maj 20001 953 inlägg
#11

Okey, det verkar ju inte speciellt avancerat :)

Något mer som man skall utöka med? För och få det "som det brukar vara". En annan sak, om jag skapar en Servlet som indexsida. Vilket filtillägg brukar webbservrar lyssna till? .java är min chansning. index.java.

SPiNMedlem sedan mars 20007 896 inlägg
#12

Chavez skrev:

Något mer som man skall utöka med? För och få det "som det brukar vara".

Vad menar du nu? :)

Chavez skrev:

En annan sak, om jag skapar en Servlet som indexsida. Vilket filtillägg brukar webbservrar lyssna till? .java är min chansning. index.java.

Servlets kompilerar du själv med vanliga javac.exe, och lägger upp den i din Servlet-mapp. Anropar gör du sedan med: http://www.dinSida.se/ServletMapp/MinServlet ( Om din genererade .class-fil heter MinServlet )

Har jag för mig. :)

ViktorMedlem sedan aug. 20021 752 inlägg
#13

En servlets URL är inte samma som den fysika platsen där den finns lagrad, som det är med html, php osv. Det vanliga är att en servlet hamnar i den virtuella katalogen "/servlet/" direkt efter ditt webapp namn i url'n.

Läs även på om configurations filen web.xml. I den kan du mappa om ditt servet så att om du skriver "http://www.myserver.com/index.html" så är det servleten som svarar och inte någon html sida :)

Allt som jag säger bygger på hur det fungerar med Tomcat, jag vet inte hur det fungerar i Resin men det borde vara på samma sätt eftersom allt är definerat av Sun i J2EE blueprint.

/Viktor

AGMedlem sedan mars 20001 266 inlägg
#14

Resin har en inbyggd kompilator. Lägg java-filerna i mappen web-inf. Anropa sedan via http://adress:8080/servlet/servletnamn.
Resin fungerar bra, dock tycker jag senare verisioner har blivit något krångligare. Hör av dig om du har problem.

Andreas

ChavezMedlem sedan maj 20001 953 inlägg
#15

SPiN, Viktor och AG: Misstänkte också att mitt antagande var galet eftersom det inte riktigt funkat "som vanligt" (utifrån mina PHP-ögon mätt) i de exemplen jag läst. Skall ta en koll på web.xml men det är väl ingenting som man kan få tillgång till på ett webbhotell. Det blir en .htaccess lösning där eller en HTML sida som bara skickar vidare? Lite förvirrad här, men något måste ju fånga upp användaren som kommer till www.domänen.com (utan filnamn). I vanliga fall lägger jag ju en index.html eller index.php där, antar att man kan ha en index.jsp också. Men om jag nu skippar JSP, ja ... ni fattar nog.

Försöker fortfarande ställa om i huvudet så jag kan nog verka lite förvirrad :)

En annan sak, Tomcat vs. Resin. Vad skall jag använda? Har fått igång Resin lokalt, men om Tomcat som det verkar nästan är de facto standard så kanske det är dumt och lära in "fel"? Läste någon introduktion till Java på serversidan tidigare idag, där la de stor vikt vid att man skulle lära sig "JSP containern" och dess specialfunktioner mm. Men Tomcat är alltså det vanligaste? Ni kan ju diskutera vilken som är bäst också, ni lärda :)

SPiNMedlem sedan mars 20007 896 inlägg
#16

Hm, som Viktor tidigare sa så bör ett system inte enbart byggas upp av enbart Servlets, utan Servlets ska helst bara användas mot formulär, när en inloggning ska ske, när man ska lagra information, osv. Annars kör du på med JSP-sidor som vanligt, som bl.a. indexsida. Det där med Taglib såg onekligen mycket intressant ut, där kan du ju på samma sätt skapa en indexsida. :)

AGMedlem sedan mars 20001 266 inlägg
#17

Ska då passa på att rekommendera https://www.servletsuite.com mycket bra sida. Har själv anlitat de som programmerare till ett projekt. De arbetar rätt igenom med taglibs.

Andreas

sgtpepperMedlem sedan apr. 20007 588 inlägg
#18

Skall ta en koll på web.xml men det är väl ingenting som man kan få tillgång till på ett webbhotell

Lite förenklat så är det så att varje projekt kör i sin egen s.k webapp, dvs webbapplikation. Du som kund har kontroll över din webapp och kan konfigurera den som du vill mha web.xml.

I web.xml kan du sätta upp en mängd saker, t.ex registrera servlets och deras URL:er, dvs. du kanske vill att servleten MyPageServlet skall hantera alla anrop till filer som har ändelsen *.mypage, det gör du i så fall där.

Lite förvirrad här, men något måste ju fånga upp användaren som kommer till www.domänen.com (utan filnamn). I vanliga fall lägger jag ju en index.html eller index.php där, antar att man kan ha en index.jsp också. Men om jag nu skippar JSP, ja ... ni fattar nog.

Tja, antingen en html-sida som gör redirect till servleten eller så mappar du servleten mot den URL du vill den skall svara på, t.ex /.

När det gäller JDBC-drivare så följer dessa med de flesta databaser (bl.a DB2 och Oracle) eller finns att hämta hem gratis (bl.a MySQL). Däremot vet jag inte hur det är med SQLServer.

Bönor och Servlets: Det finns ett antal olika designmönster, ett av dom är MVC (Model-View-Control) eller Model 2 som det även kallas i Javavärlden. Tanken med detta är att man separerar data, logik och presentation. I sådana designer så brukar kontrollerna vara en eller flera servlets som tar hand om användarens kommando (Controller), datat läggs i en böna (Model) som skickas till en JSP-sida för presentation (View).

Sök efter MVC och Model 2 så hittar du en hel del info, bl.a den här genomgången: http://www.javaworld.com/javaworld/jw-12-1999/jw-12-ssj-jspmvc.html

När det gäller appserver så har du rätt i att Tomcat är något av de facto-standard, i vart fall inom OpenSourcevärlden och många exempel utgår från Tomcat så det är inte fel att lära sig den. Själv gillar jag dock Resin eftersom den är snabb, enkel och trevlig. Det finns så många applikationsservrar att välja på att det nog är bäst att prova sig fram :). Jetty (jetty.mortbay.com) är också trevlig eftersom den är så sjukt liten, går att få ned till ungefär 1.6 MB.

ChavezMedlem sedan maj 20001 953 inlägg
#19

Hmm, nu känns det nästan som om jag har kläm på hur jag skall ställa mig till allt i fortsättningen, i vilken tur man skall testa och lära sig allting.

web.xml - Verkar lösa mycket av mina bryderier. Skall läsa på om den.
MVC - Japp, läste om den tidigare idag, och skillnaderna mot Model 1 som visst var lite sämre på och skilja på logik och presentation?
appserver - Då skall vi se om vi inte skall kunna få installerat Tomcat, är väl relativt enkelt och få den och funka direkt med Apache webbservern?

156 ms totalt · 3 externa anrop · v20260731065814-full.94fcd635
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
153 ms — hämta tråd, inlägg och bilagor (db)