Java Servlets och JSP
Hej,
Jag kan i dagsläget core Java okej och har kört en del PostgreSQL och lite JDBC. Jag vill nu använda detta till att skriva en web baserad applikation. Jag siktar på en basic meddelande-tjänst som bara kan sända meddelanden med text mellan användare.
Vad är mitt nästa steg här?
Designa databasen löser jag nog, JDBC-delen tror jag att jag löser men frontend har jag ingen koll. Har aldrig pysslat med HTML, CSS eller JS. Har rekat lite och Java Servlets och JSP m.h.a TomCat verkar vara det jag ska sikta in mig på. Så tre frågor angående allt detta:
1. Är Java Servlets och JSP det jag behöver läsa in mig på för att lösa frontend biten?
2. Jag har fått intrycket av att jag behöver kunna åtminstone CSS och HTML för att kunna använda iaf JSP(?), stämmer det och kan jag isf skippa att lära mig JS i det här stadiet? (Kör helst så mycket Java som bara går)
3. Har ni tips på resurser för att lära sig JSP och Java Servlets, föredrar att läsa före filmklipp och framförallt om det finns gratis på nätet som pdf eller liknande. Men om det finns någon bra bok som man får betala för gör jag gärna det :)
Allt gott!
Det finns lika många ramverk för web-klienter som det finns utvecklare (nästan) så där får man välja efter tycke och smak. Dock föreslår jag att du lär dig grunderna först genom att utveckla en klient med ren HTML/CSS och Javascript som körs på klienten och servern utvecklar du som en Java servlets applikation. En bra källa för att lära sig detta är w3schools.com där du hittar det mesta på ett lättfattligt sätt. Där hittar du det mesta men Java servlets får du leta upp på nätet. Sök på Java servlets så får du många bra tutorials för detta. Det är inte så komplicerat så med det kan du säkert göra en enklare applikation.
Med HTLM kan du bygga sidbaserade synkrona applikationer, vill du va lite mer asynkron och bara uppdatera enskilda fält så får du använda Javascript och/eller något lämpligt ramverk för det. Jag använder JQuery som är både enkelt och kraftfullt och gör det du kan göra med Javascript när det gäller kommunikation men det är enklare att använda.
Vill du sen göra större applikationer så rekommenderar jag att titta på Spring som ramverk både för serversidan och klientsidan. Det är overkill till att börja med men för mer omfattande och professionella applikationer är det mitt val.
Lycka till och säg till om du behöver mer
Stort tack för svaret! Ser ut som jag får sätta mig in i Javascript ändå tillslut hehe :)
Ja börja där och sen kan du titta på något lämpligt js ramverk som döljer det som är krångligt/kladdigt med js. JQuery är lågnivå och du måste ändå kunna js men det förenklar användandet. Titta annars på Angular eller React som döljer lite mer (högre abstraktionsnivå, andra typer av krångligheter :)och det finns andra som är mer eller mindre spridda.
Hej igen!
Nu har jag kommit lite längre. Jag har skrivit databasen i psql, fixat med ett user interface i HTML och CSS, men jag har lite svårt med hur jag ska ta mig vidare. Nu vill jag ju ha värden från <input> i HTML till min databas och tvärtom. Så om jag har förstått det rätt är det här Java Servlets kommer in?
Jag började kolla på TomCat men det verkar bara gå att köra i Eclipse som jag aldrig använt (använder intelliJ Community edition och det verkar bara gå att köra på Ultimate edition). Därför har jag duckat lite för det, men kanske är ett måste, att byta till Eclipse och köra TomCat där?
I alla fall så kollade jag på andra alternativ och påbörjade att skapa en HTTP server i Java, vilket jag strax insåg att det var nog overkill, hade inte tänkt skapa en från scratch...
Så nu står jag lite och stampar. Jag har sett att det finns ett package som heter com.sun, är det ett alternativ?
Tar tacksamt emot tips på hur jag tar mig vidare och vad jag borde läsa in mig på! :)
Som sagt har jag bara pysslat med "core" java, bygga ett snake-game osv och lite JDBC men aldrig något relaterat till networking.
Tillägg: Jag kan ingenting om socket, borde jag kolla på det först?
Din applikation består av en klientdel där du har HTML-fält för inläsning och presentation av värden. Säg att du har ett sökfält där du skriver in hela eller del av ett sökord. Till det har du en knapp ("Sök") som har en eventhandler för "keypress" som skickar data till serverdelen, som i sin tur letar upp resultatet som den sen skickar tillbaks till klienten som presenterar den på sidan.
Det här går att lösa på många sätt och jag beskriver två lösningar som exempel utan användning av andra ramverk.
Den enkla lösningen är att ha ett Form-element i HTML-sidan och göra knappen till en SUBMIT-knapp som då den aktiveras skickar allt data på formuläret till servern. Servern kan då ta värdet för sökfältet (som har ett namn) och göra sökningen och sen skicka ut en ny sida till klienten med sökresultatet presenterat i sidan. Då behöver du inte använda något annat än HTML på klienten. Du uppdaterar alltid hela sidan vid sökningar.
En lite mer komplicerad lösning är att använda AJAX. Då kopplar du javasccript-kod till sökknappens event som triggas när man trycker på den. I koden tar du sökfältets värden och skickar det med hjälp av AJAX-metoder till servern. AJAX-metoden är en fråga-svar sekvens så när servern letat upp resultatet så skickar den tillbaks svaret som då en bit javascript-kod skriver ut i resultatfältet. Det här kan göras asynkront så att klienten inte sitter o väntar på svaret (lämpligt om det är lång svarstid) eller synkront så att klienten frågar och väntar på svaret för utskrift. Sök på javascript och AJAX (metoderna börjar med xhr...)
Titta t ex på https://www.w3schools.com/js/js_ajax_intro.asp som förklarar det hela på ett bra sätt
Det här var klienten och det finns måååånga andra sätt att lösa detta med olika ramverk men ovanstående är enklast möjliga som jag tycker man ska behärska innan man döljer funktionen med ett ramverk
På serversidan behöver du kod som tar emot frågan (request), gör sökningen och skickar ett svar (response) och det är här servlets kommer in. Du kan hantera det här med andra teknologier (PHP,ASP, etc) men vill du göra det med Java är det servlets som gäller.
En servlet är javakod som ser ut på ett visst sätt. Den kompileras och packas i en war-fil och sen driftsätts den i en servlet-container. Det finns många såna och du nämner Tomcat som är den mest spridda och i mitt tycke den bästa. Den är gratis och den är dessutom "facit" för servlet-specifikationen så man vet att den fungerar. Den har en viss tröskel för att komma igång och ett alternativ är Jetty som man kan bygga in i sin applikation och den är lättare att hantera och förvånansvärt kapabel. Vilken man använder är en smaksak. Båda två kan både hantera servlets och statiska HTML-sidor.
Servlet-koden är rätt enkel, den ärver från ett visst interface och sen har du metoder för att hantera det som kommer in och returvärdet skickas tillbaks till klienten av servletcontainern.
Där hoppas jag du har lite att börja med och återkom gärna.
Jag ska lägga till också att du kan men behöver inte köra servlet-containern i Eclipse eller IntelliJ. Du kan köra den fristående som en applikation. Jetty kan du som sagt bygga in i din applikation som du sen startar från kommandopromten.
Grymt!! Tack så jättemycket för det utförliga svaret, jag håller den här tråden "öppen" för jag kommer nog komma tillbaka med mer frågor. Men nu vet jag hur jag ska ta mig vidare härifrån iaf! :)
Nu är jag tillbaka här och har kommit en bit längre så nu finns ett UI och klienter kan skriva till varandra och man kan klicka på olika kontakter för att skriva till olika klienter osv! :)
Jag fick dock problem med servlets så för att få upp en fungerande version bara för att se hur allt fungerar så körde jag på python med flask och psycopg2. Men tänkt ersätta med Java senare.
Nu har jag iaf följande upplägg: När en klient skickar ett meddelande så skickas det till databasen, men problemet här är att när jag är inne på klienten som får meddelandet så måste jag manuellt uppdatera sidan, så att ett nytt select statement körs på databasen och som retunerar in värdena till html-filen.
Jag vill att detta uppdateras automatiskt när en klient har skickat ett meddelande, jag har sett att man verkar kunna skriva koden på ett sätt så att man ligger och "pingar" servern och helt enkelt refreshar information från databasen automatiskt. Det låter lite ineffektivt, om man har många användare blir det inte en väldig belastning på servern om alla ligger och pingar regelbundet?
Går det på något sätt att istället få servern att berätta för mottagande klienten att en, för klienten relevant uppdatering, har skett i databasen när det väl har skett? Om det går är det Ajax jag ska använda för det?
Tack på förhand! :)
Låter som du vill använda websockets. Det är enkelt uttryckt en öppen pipa mellan klient och server.
Du kan också "polla" servern med ajax-anrop som körs från en timer. Det var vanligare innan websockets men bra sätt att lära sig grundläggande ajax. Responsen används för att uppdatera innehållet i en tag, t ex med jQuery.
Grymt, tack för svar! :)
Hade ingen aning om att det var websockets man skulle kika på för detta, ska se om jag lyckas få in det i applikationen