Avatar billede hansa Nybegynder
05. februar 2003 - 22:13 Der er 28 kommentarer og
3 løsninger

Uden beans?

Hej,

Hvordan kan jeg lettest lave en databasebaseret webapplikation i JSP?
Mit problem er, at jeg ikke må benytte beans, så hvordan klarer jeg databaseadgangen lettest?
Kan jeg gøre brug af servlets i stedet, eller er der andre gode løsninger?
Avatar billede r9 Nybegynder
05. februar 2003 - 22:16 #1
Du skriver at du ikke må bruge beans..

Må du bruge alm. java klasser?
Avatar billede arne_v Ekspert
05. februar 2003 - 22:19 #2
Det var et ret "specielt" krav (jeg er sikker på at disky kan finde
et værre ord !).

Men selvfølgelig kan du skrive din kode inline i JSP.

Det er imod alle regler for design, men hvsi det er kravet så ...
Avatar billede andersdp Nybegynder
05. februar 2003 - 22:19 #3
Du kan lave en connection.jsp med det dette indhold:

_____________________________________
<%@ page import="java.sql.*" %>
<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
java.sql.Connection con;
con = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbnavn?user=etellerandet&password=noget");
%>
_____________________________

I dine andre jsp filer bruger du så denne linie til at inkludere din connection fil: <%@ include file="../connection.jsp" %>

Og så kommer dine statements og ResultSet...
Avatar billede arne_v Ekspert
05. februar 2003 - 22:21 #4
Servlets kvalificerer sig vel heller ikke til "webapplikation i JSP".

JSP med masser af inline java kode som laver JDBC kald lyder som det der
opfylder kravet.

Men hvorfor f..... er det krav der ?
Avatar billede r9 Nybegynder
05. februar 2003 - 22:25 #5
du skal jo bruge en Jsp-engine til at hoste dine jsp sider, og alle jsp-engine kan bruge java klasser/beans...
Avatar billede andersdp Nybegynder
05. februar 2003 - 22:46 #6
Argh, skal lige huske at lave et svar istedet for en kommentar....
Avatar billede disky Nybegynder
06. februar 2003 - 07:23 #7
hansa:
Det krav er helt umuligt at opfylde, for din applikationsserver laver din jsp side om til en bean inden den bliver kompilet.

Og som arne siger er det dårligt design at havde kode i en JSP side.
Derfor brug denne klasse til at lave forbindelsen istedet:

Da den ikke extender en bean, kan man godt argumentere for at det ikke er en bean, men bare en alm. klasse.

Hvilket du godt må bruge, da du ellers slet ikke kan udskrive så meget som 1 linies text.

/*
* DataBase.java
*
* Created on 3. december 2000, 21:06
*/

import java.sql.*;

import disky.database.*;

/**
*
* @author  Søren Reinke
* @version
*/

/*
* Funder lidt over om database forbindelsen kun skal åbnes ved brug, eller x antal altid skal være åben
* og man så bruge den/de som connection pool
*/


public class DbHandler extends Object
{
   
    private Connection con=null;

    /** Creates new DataBase */
    public DbHandler()
    {
    }

    public boolean open(String dbDriverName, String dbClassName, String user, String pass)
    {           
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        return true;
    }
   
    public void close()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con=null;
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
    }
   
    public int doUpdate(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
                System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms  "+sql);
                return stat.executeUpdate(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return 0;
    }

    public ResultSet doQuery(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
                System.out.println("SQL Update = "+(System.currentTimeMillis()-time)+" ms  "+sql);
                return stat.executeQuery(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return null;
    }
}




kald open("org.postgresql.Driver","jdbc:postgresql://SERVERNAME/DATABASENAME", "USERNAME", "PASSWORD");

Derefter kan du f.eks. kalde:

executeQuery("select * from table where navn='damski'");

Den leverer et resultset tilbage som du så behandler.


Klassen er blevet brugt i flere projekter,
Avatar billede arne_v Ekspert
06. februar 2003 - 08:51 #8
Der synes at være en stor stemning for DriverManager.getConnection,
men hvis det skal køre i en fuld J2EE server og ikke i en
standalone JSP/servlet container, så er det faktisk mere
rigtigt at slå en DataSource op i JNDI og bruge dens getConnection !
Avatar billede hansa Nybegynder
06. februar 2003 - 08:59 #9
Jeg har læst at man kan lave sit eget tag, og tilgå databasen igennem det.
Er det en dårlig løsning?
Avatar billede disky Nybegynder
06. februar 2003 - 09:07 #10
nej det er en langt bedre løsning end at smide java koden direkte i JSP siden.

arne:
At bruge datasource osv, er nok totalt overkill til dette problem, hvor vi snakker om 'bare at connecte til en db'
Avatar billede arne_v Ekspert
06. februar 2003 - 09:33 #11
disky>

Nope. En DataSource er den bedste måde at gøre applikationen
skalerbar på (alternativt er selv at skulle skrive en pool manager).
Avatar billede disky Nybegynder
06. februar 2003 - 09:42 #12
spørgeren skal have hjælp til at snakke med en database server, jeg tror ikke han bekymrer sig om scalability lige nu.
Du har ret, men det er overkill i øjeblikket gætter jeg på.
Avatar billede hansa Nybegynder
06. februar 2003 - 10:19 #13
Nu kender jeg desværre ikke meget til hverken JNDI eller custom tags i JSP.
Jeg leder bare efter den (for mig) letteste løsning til at tilgå databasen. Det jeg gerne vil prøve at undgå er, at skulle skrive den samme connection igen og igen i hver JSP-fil.

Det jeg helst ville have gjort var, at lave en connection pool med beans, men har fået at vide at jeg ikke må benytte beans (har ikke fået at vide hvornår).

Jeg prøvede at slå JNDI op på Google, og fandt et par sider, der med det samme også snakkede om beans.

Custom tags ved jeg desværre ikke hvor fleksible de er. Jeg har fundet en løsning (http://www.stardeveloper.com/articles/display.html?article=2001082301&page=1) jeg næsten beskriver hvad jeg gerne vil kunne.
Avatar billede disky Nybegynder
06. februar 2003 - 11:01 #14
Held og lykke med projektet :)
Avatar billede hansa Nybegynder
06. februar 2003 - 11:02 #15
Tak for hjælpen!

Jeg har valgt at kigge nærmere på custom tags.
Jeg håber jeg kan lave en slags "connection-klasse" derigennem, så jeg slipper for at skrive db-connection i hver jsp-fil.
Avatar billede disky Nybegynder
06. februar 2003 - 11:48 #16
husk ingen java kode i JSP filerne, allerhøjest kald af metoder der ligger i klasser.
Avatar billede arne_v Ekspert
06. februar 2003 - 12:05 #17
DataSource og JNDI lookup er kun muligt i en fukd J2EE server.

Men det leverer en connection pool uden at man skal kode noget
særligt.
Avatar billede disky Nybegynder
06. februar 2003 - 12:15 #18
du kan finde MANGE connection pools på nette, bare søg her på sitet, jeg har flere gange postet den jeg selv anvender.
Avatar billede arne_v Ekspert
06. februar 2003 - 12:43 #19
Der er uden tvivl lavet ti tusinder af connection pools.

Men derfor er det stadig bedre at bruge serverens end putte
noget kode i ens egen apps code base.
Avatar billede disky Nybegynder
06. februar 2003 - 13:07 #20
Det er stadigvæk totalt overkille at installere J2EE og anvender fuld J2EE server, hvis man kun skal lave en site der har 10 side visninger om dagen.

J2EE er godt til STORE sites, men ellers ikke besværet værd.
Avatar billede arne_v Ekspert
06. februar 2003 - 13:26 #21
Det forstår jeg ikke helt.

Normalt er installation, konfiguration etc. af en JSP/servlet
engine og en fuld J2EE server ca. det samme.

Forskellen ligger normalt i prisen.

IBM og BEA har det med at tilføje et ubehageligt antal
nuller bagerst i prisen, når det er en fuld J2EE server.

Så man kan have meget gode økonomiske grunde til ikke
at vælge fuld J2EE server, hvis ikke man har brug for det.

Om man har brug for det afhænger ikke så meget af antal sider om
dagen, men mere omh vilken funktionalitet man har brug for.

Men for f.eks. JBoss+Tomcat til 0 kr. sammenlignet med Tomcat
til 0 kr. er der ikke rigtig nogen forskel.
Avatar billede disky Nybegynder
06. februar 2003 - 14:01 #22
ja vi ved godt du elsker tomcat, men vi er nu nogen der foretrækker kommercielle produkter af mange årsager, men det gider jeg ikke diskutere nu.
Avatar billede arne_v Ekspert
07. februar 2003 - 08:13 #23
Det var såmænd ikke ment som hverken pro eller con OSS.

Bare en konstatering af, at hvis man bruger kommercielle servere, så
er der normalt meget gode økonomiske grunde til at nøjes med
JSP/servlet container, hvis man kan nøjes med det. Mens hvis man bruger
gratis software, så kan man ligeså godt tage den fulde stak.
Avatar billede disky Nybegynder
07. februar 2003 - 09:29 #24
Nu modsiger du da dig selv.

Hvis man netop af økonomiske årsager kun har jsp/servlets, har man jo heller ikke J2ee fuld understøtter.
Avatar billede arne_v Ekspert
07. februar 2003 - 10:11 #25
????

Hvad refererer du til ?
Avatar billede disky Nybegynder
07. februar 2003 - 10:33 #26
Du skrev lige:
"Bare en konstatering af, at hvis man bruger kommercielle servere, så
er der normalt meget gode økonomiske grunde til at nøjes med
JSP/servlet container"

Og tidligere:
"Der er uden tvivl lavet ti tusinder af connection pools. Men derfor er det stadig bedre at bruge serverens end putte
noget kode i ens egen apps code base."

Du kan kun bruge serverens via JNDI på en ful J2EE server.


Men pyt nu med det, vi mener sikkert det samme alligevel.
Avatar billede arne_v Ekspert
07. februar 2003 - 10:54 #27
Ja - jeg kan ikke følge dig.

Jeg har argumenteret for:

- at *hvis* man havde fuld J2EE server så burde man bruge
  DataSource for at bruge serverens connection pool
- at *hvis* man bruger commerciel server så er der økonomiske
  grunde til at vælge JSP/servlet container fremfor
  fuld J2EE stak
- at *hvis* man bruger gratis server så er der ingen
  grunde til at vælge JSP/servlet container fremfor
  fuld J2EE stak

Der er der så vidt jeg kan se ikke noget specielt
selvmodsigende i.

Det andet citat er *hvis* man har fuld J2EE server, se f.eks.
mine indlæg 08:51:45 og 12:05:08 !
Avatar billede soelvpil Nybegynder
07. februar 2003 - 17:23 #28
Hmmm den diskussion kom da vist ud på et sidespor :-)

Jeg må nu nok erklære mig enig med Disky (og det er vist første gang det sker i et spørgsmål hvor ordet Tomcat nævnes!!!)

Hvis man kun bruger servlets, jsp og en stak simple javaklasser, bør man alt andet lige nøjes med en ren servlet-container (Tomcat, Resin ...) fremfor en fullblown J2EE-server. Mindre at overskue, mindre at konfigurere, mindre der kan gå galt. At der ofte også er en prisforskel, er så bare en yderligere gevinst.

Eneste grunde til at vælge en fuld J2EE-server er
1. Hvis du kender den bedre.
2. Hvis den indeholder noget du har brug for
3. (den mest almindelige) Hvis du har en tåbelig boss eller kunde der insisterer på at smide penge ud af vinduet.

Jeg vil langt hellere  nøjes med den "lille" server, som jeg bedre kan overskue, og så til gengæld hapse en gratis connectionpool (bare under Jakarta-projekterne findes vist en 2-3 stykker), fremfor JNDI o.s.v., hvor man som urutineret hurtigt kan miste lidt hår på at finde ud af, hvorfor lortet ikke virker. Jeg ser ikke den store gevinst ved at spare et par 100K på ikke at bruge en gratis connectionpool, og så til gengæld have en serverinstallation, der er 100M større.
Avatar billede arne_v Ekspert
07. februar 2003 - 18:03 #29
Hmmm. Man kunne godt få det indtryk, at I har læst mine
indlæg som om at jeg taler for en fuld J2EE løsning. Det er faktisk
ikke tilfældet. Jeg jar kun sagt at hvis man gør det, så kan man
ligeså godt benytte sig af de features der er.

Så har jeg sagt at hvis det er gratis software, så kan jeg ikke se den
store grund til ikke at vælge fuld J2EE. Det ikke det samme som at
man skal gå igang med EJB etc.. Men hvis der ikke er nogen omkostning
ved det så kan man ligeså godt tage de muligheder der med.

Det lyder jo selvfølgeligt meget logisk at der skulle være ekstra
arbejde med at installere og konfigurere mere funktionalitet. Men
jeg synes bare ikke at det passer med virkeligheden. Tager det
længere tid at installere og konfigurere JBoss+Tomcat end Tomcat ?
Tager det længere tid med WAS AE end WAS Express ? Tager
det længere tid med BES ASE end BES WE ? Det mener jeg ikke !

Ja - det koster lidt disk-plads og lidt RAM, men det er altså
i småtings-afdelingen.

Og ja - der er masser af connection pools, men hvormange af dem
giver mulighed for konfiguration udenfor app og hvormange af dem
er dokumenteret ? Den slags er ikke noget problem med en DataSource
og JNDI.
Avatar billede soelvpil Nybegynder
08. februar 2003 - 14:58 #30
OK, måske er jeg lidt ekstra kritisk overfor JNDI, fordi jeg (delvist uretfærdigt) associerer det med EJB og dermed bøvl.

Ofte er forskellen nu mest på, om man konfigurerer den via en fil i server-config'en (f.eks. en datasources.xml) eller man bruger en lidt proprietær fil rettet direkte mod connectionpoolen.

Men ok, hvis jeg alligevel havde en fuld J2EE-server, vil jeg da  også bruge serverens connectionpool. Jeg mener nu forskellen er så lille, at den er værd at ignorere hvis man vælger, om man skal bruge en fuld J2EE-server.

Og ja, out of the box er de fleste servere rimeligt lette at gå til (kender ikke meget til Websphere, men har dog kun hørt dårligt om den!). Det er snarere når man skal have applikationen til at køre, at flere ting potentielt kan gå galt.

I langt de fleste situationer er værdien af en fullblown server et rundt 0. Spørgsmålet er så, om man er så heldig at arbejde for et firma og en kunde der tror på en server til denne pris (JBoss).
Avatar billede arne_v Ekspert
09. februar 2003 - 22:19 #31
Jeg har iøvrigt lige checket.

Både Tomcat og Resin understøtter faktisk opslag af DataSource
via JNDI selvom de ikke er fuld J2EE.

Så selvom man ikke kører fuld J2EE stak, så er DataSource og JNDI
alligevel en mulighed i mange tilfælde.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester