15. februar 2005 - 10:05Der er
10 kommentarer og 1 løsning
java Servlet
Hey
Jeg sidder og udvikler på nogle servlets og kom til at tænke på nogle ting: 1) Hvordan bliver request håndteret mht nye forbindelser? (altså hvis der allerede er Een bruger der bruger systemet, bliver der så oprettet en ny tråd til et nyt request fra en anden bruger? )
2) Jeg har lavet en superklasse, som jeg forestiller mig skal stå for adgangen til databasen, som de andre servlets så skal gøre brug af. Vil dette fremstå som et samtidighedsproblem? og skal det syncronizeres?
3) Når en ny forbindelse bliver oprettet til webserveren, opretter den så et objekt af min superklasse og nedlægger det igen ved hvert request? alle min Servlets nedarver fra superklassen, som nedarver fra HttpServlet.
Hvis du vil have en ny instans per request så lader du din servlet implemenetere interfacet javax.servlet.SingleThreadModel (ingen metoder bare en markering).
Wow.. Tak for det hurtige svar!.. mht. sprøgsmål 2: Jeg havde umiddelbart forestillet mig at når superklassen blev loaded, at den ville oprette en instans af min Db-controller (Dbframework singleton pattern) som så ville være public og som de andre servlets ville gøre brug af ala: nedarvede klasse { cUsers[] users = dbController.getUsers(); } hvor dbControlleren er lavet i superklassen under init();
og stik mig et svar så jeg kan fyrer nogle points din vej! ;-) Mvh Christian
Der er kun en connection.. ja, Og det vil så sige at ved hver tilgang til databasen skal der tilføjes en synkronized block rundt om?! eller vil det være nok at synkronisere mit dbframework? Det foregår på den måde at min dbController kalder en metode i dens superklasse, med SQL som argument og som returnere et resultset.
superklassen: public ResultSet getData(String sql) { ResultSet rs = null; Statement st = null; try{ st = getConnection().createStatement(); rs = st.executeQuery(sql); }catch(Exception er){ System.err.println("Error in DBmaster.getData(), er= "+er); } finally{ try{ st.close(); rs.close(); }catch(Exception f){} } return rs; } ville det være nok at synkronisere denne metode?! Den står for AL kommunikation med DB'en??
.. Du har fuldstændig ret! mht rs.close() Jeg har (til mit forsvar) endnu heller ikke brugt det endnu. Jeg har lavet en lille java bean klasse der indeholder en String som navnet på objektet og så selve objectet. smart?!? jeg har lavet koden om nu: public synchronized Vector getData(String sql){ ResultSet rs = null; Statement st = null; ResultSetMetaData rsmd = null; Vector tempObj = new Vector(); try { st = getConnection().createStatement(); rs = st.executeQuery(sql); rsmd = rs.getMetaData();
while(rs.next()){ ArrayList rows = new ArrayList(); // for each row.. for(int i =0; i<rsmd.getColumnCount(); i++) { cTempObject obj = new cTempObject(); //java bean obj.setName(rsmd.getColumnName(i)); obj.setObj(rs.getObject(rsmd.getColumnName(i))); //henter objektet med det tilsvarende Kolonne navn. rows.add(cTempObject); } tempObj.addElement(rows); } }catch(Exception er){ System.err.println("Error in DBmaster.getData(), er= "+er); } finally{ try{ st.close(); rs.close(); }catch(Exception f){ System.err.println("Error in getData() f=" +f); } } return tempObj; //returner Vectoren med arraylist's i. }
Hvad ville du foretrække at arbejde med ArrayList eller Vector?! her bruger jeg begge?! kan ikk lige overskue om det er smart eller hvad? Tak for hjælpen .. du er hermed inkludret i min aftenbøn! mvh Christian
Vector er der kun for kompabilitet med Java 1.0 og 1.1
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.