JSP, Tomcat Tutorial lavet af Jákup W. Hansen TSU 2006 3.semester 10.october 2007 Hvad er JSP(Java Server Pages): Det er en teknik som er bygget ovenover Servlets teknikken, men fidusen er at det skal vi ikke bekymre os om, fordi alt dette bliver lavet automatisk. Grunden til JSP er blevet udviklet er simpel, det er for besværligt for ikke IT-mennesker at lave dynamiske sider som f.eks. Servlets. Man har derfor udviklet en metode hvor siderne er lavet i HTML og så indeholder Java kode ind i mellem der hvor du måtte ønske det, og dette er modsat Servlets, som primært er Java kode med HTML i mellem. Men det som gør JSP noget nemmer at arbejde med (helst når systemet ikke skal være alt for kompliseret) er at JSP siderne IKKE skal compiles (det sker automatisk), hvor vi med Servlet nemlig selv skulle holde styr på alt dette. Nu er det engang sådan at de aller fleste dynamiske hjemmesider gør brug af database, men du kan sagtens bruge og forstå JSP uden disse dele. De eksempler jeg vil bruge her er både uden og med (ikke database men fil, som i princippet er det samma). Se billede nedenfor her... Billede lånt fra: (Lidt ændringer af mig) http://plato.acadiau.ca/courses/comp/dsilver/2513/slides/jsp%20101%20introduction%20to%20javaserver%20pages.htm Hvis du fjerne Beans og Database delen fra tegningen så ser vi at vi har en Server som har en JSP engine/motor og det er det vi skal fokusere på her. For at kunne køre JSP må vi have en server som har denne JSP engine/motor (der er det ikke alle som har). Sådan er server kan vi få Gratis i Tomcat.
Tomcat Serveren: Vi har brug for en server til at modtage clienternes requests, og dertil bruger man en server. Det kunne i princippet være en hvilken som helst server, men efter som serveren skal kunne aktivere/bruge java servlets så kan vi ikke bare vælge som det passer os. F.eks. IIS (Internet Information Server, som Microsoft laver), kan (tror jeg) ikke køre Servlets. Vi bruger en GRATIS server fra Apache som er lavet til servlets og JSP, som kaldes Tomcat. Download Tomcat Serveren: Som sagt, den er gratis og findes under følgende link, som er start siden http://tomcat.apache.org/ og derfra kan du vælge forskellige udgaver. Jeg har valgt Tomcat 6.0 under Downloads, som var den nyeste i dag. Så kommer følgende side frem. Så valgte jeg at downloade Windows Service Installer og jeg gemte den bare på hardisken, men det behøves du ikke.
Installering af Tomcat Serveren: Når den så er downloadet kommer et vindue frem, som spørger om du vil installere serveren, og det ønsker vi jo. Se følgend serie...
Nu er Apaceh Tomcat Serveren installeret, og klar til brug. Prøv og skriv localhost i browseren så bør følgende side troppe op..jeg blev nød til at Slukke serveren og genstarte den før det virkede. Her ovenover der der 2 forsøg med localhost. Det første er en normal index.html side som kommer frem (når man ikke skriver hvilken fil man ønsker, så går serveren ud fra at det er index filen du får, og det får vi så her også). Det næste forsøg er index.jsp, og her får vi en meget lignende side, men nu er det en jsp side. Og det er JSP vi skal arbejde med her, og hvis dette fungerer for dig, ja så er du godt kørende fordi dette beviser at din server kan køre JSP, så lad os gå vider. Tomcat start og slut: Det er lidt irriterende når man arbejder med Tomcat, og man måske ændrer lidt i mapper, javacode osv. Så skal man huske at slukke og tænde Tomcat. Så for at undgå denne irritation, så kan man faktisk gå ind i Tomcat og ændre i en fil, så at det hele sker automatisk, se følgende billede...
Browser start og slut: Du må også huske på, at når du ændrer i koden eller opsætningen og du så kører browseren igen, så husker den den sidste FUNGERENDE side, som vil sige at laver du en fejl, så ses dette ikke i browseren uden at du lukker den ned og åbner en ny browser.
Hvordan kører en JSP sider på Tomcat Serveren: I dag laver vi eksempler uden Beans, så derfor skal vi ikke bruge BlueJ. Vi arbejder kun med Nodesblok. Men lad det ikke få dig til at tvivle på kvaliteten af det vi skal gøre, fordi vi skal til sidst lave en applikation som kan gemme på fil. Dvs. At vi har Client, Server og Fil/DataBase alt kun med Nodesblok. Vi kunne starte med et total simpel eksempel så som Hello World, men det gider jeg ikke bruge tid på fordi det ikke viser nok. I stedet tager jeg et eksempel vor en client indtaster et eller andet og så svarer serveren afhængig af clientens indput. Således vil vi virkelig se en masse af det smarte med JSP (Samme grundlæggende ide som ASP og PHP). Vi skal have 2 jsp filer. De kommer her... FIL NAVN: first.jsp eller first.html <HTML> <BODY> <FORM METHOD=POST ACTION="next.jsp"> <INPUT TYPE=TEXT NAME=username SIZE=20> <BR><INPUT TYPE=SUBMIT VALUE= Tryk på mig > </FORM> </BODY> </HTML> FIL NAVN: next.jsp <HTML> <BODY> <% String name = request.getparameter( "username" ); if ( name.equals( "true") ) { out.println("true"); else { out.println("false"); %> </BODY> </HTML> Dette er så de filer vi skal bruge nu, men hvor skal de placeres hos Serveren?
Vi skal bare placere dem i en mappe (som vi definerer) under rod mappen i Tomcat. Hos mig ser det sådan ud... Ok, så har vi lagt filerne det rigtige sted, men hvordan kalder vi så på first.jsp fra browseren?
Når en klient kalder på vores first.jsp fil, så kommer det til at se sådan ud i browseren. Nu er denne jsp fil faktisk så simpel at den KUN indeholder HTML tekst, så vi kunne faktisk bare ændre fil navnet til first.html, og så ville den funger akkurat lige så godt. Det siger os så meget, at JSP sider er STØRRE end HTML sider fordi JSP sider har både HTML og Java kode, mens HTML kun har HTML. I dette eksempel vælger jeg at skrive false i textboksen og trykker så på Tryk på mig knappen. Så vil resultatet se sådan ud... Hvis jeg havde skrevet true, så ville resultatet have returneret true, det burde ikke komme som nogen overraskels.
Lad os undersøge koden for at forstå hvad der sker her. Selv om dette eksempel er simpel, så sker der rigtigt meget, og man kan hurtigt miste overblikket, så for at hjælpe lidt, har jeg lavet streger som indikerer at der er sammenhænge, og der er en del sammenhænge...men lad os først se billedet... Begge filer har HTML og BODY tags, prøv og ignorer dem i denne sammenhæng, fordi de skal bare være der. Det interessante sker i FORM i first.jsp som siger at den bruger POST metoden og ACTION skal være next.jsp. Dette betyder bare at formen sendes som POST og ikke som GET, det er bare den måde hvorpå formen sendes og ikke vigtig lige nu. Men ACTION er interessant fordi den siger hvilke fil som skal MODTAGE denne her form, og det er nemlig vores anden fil - next.jsp. Hvornår bliver så denne form sendt, jo når clienten trykker på knappen som vi kalder for Tryk på mig. Hvordan kommer så denne tekst som clienten skriver i textfeltet over til next.jsp filen. Den sendes med usename variablen/input. Så kommer vi til next.jsp som kommer i aktion når clienten tykker knappen. Det første som next.jsp gør, er at hente varablen/input texten. Når vi har denne tekst kan vi tjekke om den indeholder teksten true eller false og i dette tilfælde her har jeg/clienten skrevet true så IF sætningen ryger ind i true delen og udskriver true som html tekst. Next.jsp filen indeholder Java kode og den er omringet af <%...java kode... %>. Dette kan virke mystisk, men det som sker er at når serveren modtager POST kaldet med Formen fra clienten, så aktiverer serveren denne java kode. Og den vil så lave noget HTML tekst i stedet for Java koden, som i dette tilfælde enten er true eller er false.
Det kan du se, hvis du modtager next.jsp filen og højreklikker med musen på browseren og vælger view source...ser sådan ud... Så vil resultatet blive en meget simpel html side, som ser sådan ud... Det vil sige, at serveren kun returnere denne her simple html side, ud fra HTML teksten og java koden som er i next.jsp siden. Kikker du godt, så er det kun out.println( true ); som ses, og deraf fjernes også out.println, så der kun er true tilbage at sende til klienten. Dette simple eksempel skulle vise dig hvordan du modtager tekst fra clienten, og så undersøges denne af serveren og afhængig af denne tekst, vil der blive produceret et svar. Har man forstået denne her teknik, så er man kommet meget langt i at forstå hvordan man bygger en dynamisk applikation.
Alt i én fil: Normalt når man ville lave en applikation som skulle kunne det samme som denne her kan, så ville man ikke bruge 2 filer (first.jsp og next.jsp), man man ville samle det hele i en fil. Jeg har valgt at dele den op for at være lidt mere pædagogisk, men hvis du skulle ønske en fil, så ville den se sådan ud...nu kalder jeg filen firstnext.jsp <HTML> <BODY> <FORM METHOD=POST ACTION="firstnext.jsp"> <INPUT TYPE=TEXT NAME=username SIZE=20> <BR><INPUT TYPE=SUBMIT VALUE= "Tryk på mig"> </FORM> <% String name = request.getparameter( "username" ); if (name!= null) //Første gang er den selvfølgelig NULL, og så skal den ikke vider... { if ( name.equals( "true") ) { out.println("true"); else { out.println("false"); %> </BODY> </HTML>
Gem på fil: Vi starter nu et nyt projekt, og bruger ikke first.jsp og next.jsp mere. Vi lægger denne ene file ind i samme folder som du har brugt intil nu. Men i Browseren skal du nu bruge GemTekst.jsp i stedet for. Jeg ønsker her at kunne skrive ned på tekst fil, og sådan gemme det som clienten skriver (log bog). Det er faktisk ikke så svært, vi genbruger koden fra sidst og tilføjer lidt fil skrivnings haløj. Det er normal java kode vi bruger...se resultatet.. Fil Navn: GemTekst.jsp <%@ page import="java.util.*" %> <%@ page import="java.io.*" %> <HTML> <BODY> <FORM METHOD=POST ACTION="GemTekst.jsp"> <INPUT TYPE=TEXT NAME=username SIZE=20> <BR><INPUT TYPE=SUBMIT VALUE= "Tryk på mig"> </FORM> <% String gemmetekst= request.getparameter( "username" ); if(gemmetekst!= null) // Førstegang er den NULL. { try { FileWriter writer = new FileWriter("JSPgemmetekst.txt"); writer.write(gemmetekst); writer.close(); out.println("der er gemt i JSPgemmertekst.txt filen din tekst: " + gemmetekst); catch(ioexception e) { System.out.println("filen kunne ikke gemmes"); %> </BODY> </HTML> Det er koden, ikke alt for indviklet. Vi motager fra clienten lige som før, og denne tekst hentes og kaldes for gemmetekst. Så hvis den ikke er NULL som den er første gang klienten logger på, så kører vi vider, og laver en JSPgemmetekst.txt fil. Hvis denne fil er lavet før, så overskrives den bare. Så putter vi gemmetekst ind i denne fil, og lukker. Det var det. Nu har vi en meget simpel men smart web applikation som tillader at en klient
logger på og skriver en tekst ned på en fil hos serveren. Som nu er overskrives teksten hele tiden, men det er nemt at gør det sådan at den tilføjes i stedet for. Tak for denne gang. Jákup Wenningstedt Hansen.