PDA

View Full Version : [Java + MySQL] applicazione per smartphone


Tommy81
23-02-2012, 22:33
Salve ragazzi, mi servirebbe qualche consiglio e delle delucidazioni. Ho un'applicazione web java, database mysql e server apache tomcat, compilata con eclipse. Tutto funziona. Ora vorrei però scrivere qualcosa per creare un'applicazione per smartphone in grado di vedere info prendendole direttamente dal database. Praticamente una semplice anagrafica... ad esempio nome/cognome/data di nascita ecc ecc coi valori presi dal database sql.
Come posso realizzarla? posso agganciarmi direttamente al database del sito web o servono passaggi intermedi? ho visto javaFX sembra parecchio potente. :D

Tommy81
25-02-2012, 12:51
nessuna dritta insomma su come approcciare un progetto mobile? :cry:

PGI-Bis
25-02-2012, 15:45
Be', se l'applicazione web ha già un front-end, una parte "client" scritta in html su protocollo http allora ti basta aprire l'indirizzo del front-end con il browser dello smartphone (ammesso che una frase italiana composta di tre parole inglesi abbia un senso).

Se vuoi fare qualcosa di dedicato allo smartphone - uno deve sempre avere l'occhio d'aquila per leggere una pagina web su un cellulare - dipende dalle API che ci puoi far girare.

Tommy81
25-02-2012, 16:47
Be', se l'applicazione web ha già un front-end, una parte "client" scritta in html su protocollo http allora ti basta aprire l'indirizzo del front-end con il browser dello smartphone (ammesso che una frase italiana composta di tre parole inglesi abbia un senso).

Se vuoi fare qualcosa di dedicato allo smartphone - uno deve sempre avere l'occhio d'aquila per leggere una pagina web su un cellulare - dipende dalle API che ci puoi far girare.

Grazie PGI-Bis per la risposta. La mia web application ha già un front-end per browser classico. L'idea era proprio di evitare la cecità degli utenti :D e di fare qualcosa di un minimo dedicato con un menù minimale ma leggibile. Stavo vedendo JavaFX ma con Eclipse ho avuto problemi pure a istallare il plugin. Quindi stavo cercando qualcosa di alternativo.

PGI-Bis
25-02-2012, 17:21
Devi vedere cosa supporta lo smartphone, se è un adroid o un ios o quel che è. Poi per parlare col server la tua interfaccia userà un connettore http, che può essere un socket ma sarà sperabilmente qualcosa di un livello un pelo più alto.

Tanto per intenderci se la tua applicazione web è vincolata all'indirizzo:

http:ilmiosito/lamiaapplicazione

significa che all'indirizzo ip corrispondente a www.ilmiosito.it c'è un socket aperto che accetta messaggi HTTP: se apri un socket a quell'indirizzo e mandi una richiesta di lettura in formato http ottieni la stessa cosa che otterrebbe un browser.

In java non usi il socket, usi un URL

new URL(indirizzoweb).openConnection()... leggi direttamente il corpo della risposta http.

Con nomi diversi tutte le api hanno la loro connessione url-http.

demos88
26-02-2012, 10:02
Oppure ottimizzi una interfaccia del sito per la navigazione da dispositivi mobile... secondo me ci perdi molto meno tempo e ti basta scriverla una volta sola (e non per ogni tipo di dispositivo: Android, IOs, Maemo, windows phone...) a meno che non fai una app java stand alone, ma non so se ne valga la pena.

Tommy81
26-02-2012, 12:23
Devi vedere cosa supporta lo smartphone, se è un adroid o un ios o quel che è. Poi per parlare col server la tua interfaccia userà un connettore http, che può essere un socket ma sarà sperabilmente qualcosa di un livello un pelo più alto.

Tanto per intenderci se la tua applicazione web è vincolata all'indirizzo:

http:ilmiosito/lamiaapplicazione

significa che all'indirizzo ip corrispondente a www.ilmiosito.it c'è un socket aperto che accetta messaggi HTTP: se apri un socket a quell'indirizzo e mandi una richiesta di lettura in formato http ottieni la stessa cosa che otterrebbe un browser.

In java non usi il socket, usi un URL

new URL(indirizzoweb).openConnection()... leggi direttamente il corpo della risposta http.

Con nomi diversi tutte le api hanno la loro connessione url-http.

Oppure ottimizzi una interfaccia del sito per la navigazione da dispositivi mobile... secondo me ci perdi molto meno tempo e ti basta scriverla una volta sola (e non per ogni tipo di dispositivo: Android, IOs, Maemo, windows phone...) a meno che non fai una app java stand alone, ma non so se ne valga la pena.

L'idea che avevo in mente era proprio quella di demos88, nel senso di scrivere qualcosa di ottimizzato come interfaccia per la navigazione mobile, avevo visto JavaME e in particolare JavaFX. Praticamente delle versioni light di java.

Per "dialogare" col server e in particolare col database come posso approcciare la cosa? i dati del database come li estraggo? a me basterebbe una semplice SELECT ALL che mi fa vedere in una tabella sul cellulare i dati del DB.

demos88
26-02-2012, 13:58
L'idea che avevo in mente era proprio quella di demos88, nel senso di scrivere qualcosa di ottimizzato come interfaccia per la navigazione mobile, avevo visto JavaME e in particolare JavaFX. Praticamente delle versioni light di java.

Per "dialogare" col server e in particolare col database come posso approcciare la cosa? i dati del database come li estraggo? a me basterebbe una semplice SELECT ALL che mi fa vedere in una tabella sul cellulare i dati del DB.
In realtà pensavo proprio a una interfaccia web nello standard XHTML Mobile. Le chiamate al db le fai con script php, come un normale sito web.
Niente java o altro...

Tommy81
26-02-2012, 14:08
In realtà pensavo proprio a una interfaccia web nello standard XHTML Mobile. Le chiamate al db le fai con script php, come un normale sito web.
Niente java o altro...

dicevo java perchè conosco decentemente solo quello :rolleyes: per php non saprei dove mettermi le mani.

new URL(indirizzoweb).openConnection()... praticamente mi connetto al database che sta sotto a quell'indirizzo web?

PGI-Bis
26-02-2012, 16:19
con openconnection ti connetti "alla servlet http" che il web server ha vincolato al tal indirizzo. Essendo una servlet http risponderà usando il protocollo http. Se il contenuto del messaggio http inviato dalla servlet è una pagina html, ritroverai il codice html di quella pagina nel corpo del messaggio ricevuto.

Ma in sè il protocollo http non serve solo per passare pagine html: è un formato di scambio di dati, ci puoi scambiare qualsiasi cosa.

php non ti serve perchè hai già la web application in java, al massimo userai jsp per generare dinamicamente le pagine per il client.

Tommy81
26-02-2012, 16:50
con openconnection ti connetti "alla servlet http" che il web server ha vincolato al tal indirizzo. Essendo una servlet http risponderà usando il protocollo http. Se il contenuto del messaggio http inviato dalla servlet è una pagina html, ritroverai il codice html di quella pagina nel corpo del messaggio ricevuto.

Ma in sè il protocollo http non serve solo per passare pagine html: è un formato di scambio di dati, ci puoi scambiare qualsiasi cosa.

php non ti serve perchè hai già la web application in java, al massimo userai jsp per generare dinamicamente le pagine per il client.

Quindi, visto che ho già un web application java in senso classico, la prima cosa da fare sarebbe capire con che browser ci si sta connettendo al server. Se è un browser classico va benissimo la mia web application... nel caso invece in cui la connessione provenga da un sistema mobile indirizzare tutto alla servlet http che potrebbe farmi la classica select SQL e poi prepararmi codice html da inviare e da dare in pasto al browser mobile tramite il protocollo di comunicazione http

Ho trovato questo... un esempio che potrebbe essermi utile... http://www.corsojava.it/articoli/servlet/un_esempio.jsp che dici fa al caso mio?

Ho capito per sommi capi o ho detto solo castronerie? :confused:

PGI-Bis
26-02-2012, 16:55
E' corretto. Tieni conto che il discorso sul protocollo http è implicito quando parliamo di servlet http o pagine jsp (che altro non è che un modo diverso per scrivere una servlet): ci pensa la servlet a tradurre in http quello che vuoi fare, attraverso i flussi e i campi della richiesta/risposta.

Tommy81
26-02-2012, 17:15
E' corretto. Tieni conto che il discorso sul protocollo http è implicito quando parliamo di servlet http o pagine jsp (che altro non è che un modo diverso per scrivere una servlet): ci pensa la servlet a tradurre in http quello che vuoi fare, attraverso i flussi e i campi della richiesta/risposta.

Infatti pensavo proprio a questo, una volta che si ricava se ci si sta connettendo dal classico pc o da un dispositivo mobile basterebbe fare anche delle jsp ad hoc per quest'ultimo, bypassando direttamente la fase di richiesta/risposta con la servlet http.

Un'altra cosa... visto che mi sei stato utilissimo... per capire con che cosa mi sto collegando al server che conviene utilizzare, c'è una procedura standard da seguire???

PGI-Bis
26-02-2012, 18:19
Bisognerebbe sentire un web-designer perchè so che ci sono delle procedure traducibili in javascript per rilevare il browser - e il sistema operativo, ma quello che mi viene in mente è che se la struttura dell'interfaccia client è uguale e cambia solo l'aspetto (proporzioni ed effetti) forse basta usare un foglio di stile condizionale, un po' come quelli che si usano per separare la visualizzazione di un documento dalla stampa. Cioè le pagine servite dalla tua applicazione resterebbero uguali, cambia solo lo stile associato. Bisognerebbe fare un po' di esperimenti.

banryu79
27-02-2012, 09:26
Un'altra cosa... visto che mi sei stato utilissimo... per capire con che cosa mi sto collegando al server che conviene utilizzare, c'è una procedura standard da seguire???
Ciao, che io sappia di solito si analizza il campo "User Agent" presente nell'header della richiesta http che arriva al server...
Se non ti va di reinventare la ruota prova con la libreria user agent utils:
http://java.net/projects/user-agent-utils

L'uso è semplicissimo, una volta che hai estratto dall'header della richiesta http la stringa contenente il valore del campo user agent, è sufficiente fare una cosa del tipo:

// import bla bla

String uaValue= ... //valore campo user-agent in http header
UserAgent ua = UserAgent.parseUserAgentString(uaValue);
Browser browser = ua.getBrowser();

OperatingSystem os = ua.getOperatingSystem();
DeviceType device = os.getDeviceType();
if (device == DeviceType.MOBILE) {
// genera risposta per dispositivi mobile
} else {
// genera risposta per tutto il resto, DeviceType.COMPUTER
// | DMR | GAME_CONSOLE | TABLET | UNKNOWN...
}

Vedi i javadoc per maggiori info, comunque la libreria la impari in un attimo.

Tommy81
28-02-2012, 09:13
Bisognerebbe sentire un web-designer perchè so che ci sono delle procedure traducibili in javascript per rilevare il browser - e il sistema operativo, ma quello che mi viene in mente è che se la struttura dell'interfaccia client è uguale e cambia solo l'aspetto (proporzioni ed effetti) forse basta usare un foglio di stile condizionale, un po' come quelli che si usano per separare la visualizzazione di un documento dalla stampa. Cioè le pagine servite dalla tua applicazione resterebbero uguali, cambia solo lo stile associato. Bisognerebbe fare un po' di esperimenti.

Anche questa potrebbe essere una strada veloce e percorribile. Però visto che le pagine dedicate al mobile sarebbero davvero poche, non avrei neanche tanti problemi a rimodellare il loro aspetto quel tanto da renderle "simpatiche" anche su un cellulare :sofico:


Ciao, che io sappia di solito si analizza il campo "User Agent" presente nell'header della richiesta http che arriva al server...
Se non ti va di reinventare la ruota prova con la libreria user agent utils:
http://java.net/projects/user-agent-utils

L'uso è semplicissimo, una volta che hai estratto dall'header della richiesta http la stringa contenente il valore del campo user agent, è sufficiente fare una cosa del tipo:

// import bla bla

String uaValue= ... //valore campo user-agent in http header
UserAgent ua = UserAgent.parseUserAgentString(uaValue);
Browser browser = ua.getBrowser();

OperatingSystem os = ua.getOperatingSystem();
DeviceType device = os.getDeviceType();
if (device == DeviceType.MOBILE) {
// genera risposta per dispositivi mobile
} else {
// genera risposta per tutto il resto, DeviceType.COMPUTER
// | DMR | GAME_CONSOLE | TABLET | UNKNOWN...
}

Vedi i javadoc per maggiori info, comunque la libreria la impari in un attimo.

Beh questa classe DeviceType sembra fare al caso mio, è perfetta. Ora vedo nel dettaglio come estrarre l'header della richiesta http. Non mi piace reinventare la ruota preferisco capire la logica che c'è dietro :) Devo fare un pò di prove e vi faccio sapere gli sviluppi.


Un'ultima cosa, abbiamo parlato sempre di pagine html... ma se volessi mandare al mio dispositivo mobile pagine .jsp (ibride java/javascript/html, supponendo che il dispositivo abbia la sua bella java virtual machine), ci sarebbero problemi? Devo richiedere anche la presenza della JVM al momento della connessione smartphone/server? Ho visto jquery mobile, per creare layout davvero carini per smartphone, ma in quel caso non mi basterebbe mandare semplici pagine html no?