Torna indietro   Hardware Upgrade Forum > Software > Programmazione > Corsi, Tutorial e FAQ

Apple MacBook Air M3: chi deve davvero comprarlo? La recensione
Apple MacBook Air M3: chi deve davvero comprarlo? La recensione
A distanza di circa 8 mesi arriva l’importante aggiornamento dei MacBook Air: nessun cambiamento estetico, ma una revisione hardware interna con l’upgrade al processore M3. Le prestazioni migliorano rispetto alle generazioni precedenti, e questo fa sorgere una domanda spontanea: a chi è rivolto oggi questo laptop? Cerchiamo di capirlo nella nostra recensione 
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono
Da ASUS un monitor particolare ma molto completo: principalmente indirizzato al videogiocatore, può essere sfruttato con efficacia anche per attività creative e di produzione multimediale
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza
Il nuovo robot aspirapolvere domestico di Dreame abbina funzionalità complete a un moccio flottante che raggiunge al meglio gli angoli delle pareti. Un prodotto tutto in uno semplice da utilizzare ma molto efficace, in grado di rispondere al meglio alle necessità di pulizia della casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-05-2005, 18:32   #1
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
[Aplz web] Installazione "webserver" x programmazione "lato server"

Lo scopo di questo prontuario [della serie for Dummies ] è quello di far diminuire l'ignoranza informatica in Italia, poco importa se qualcuno si limiterà a fare copia/incolla di queste righe od imparerà qualcosa col solo scopo di lucrarci.
Confido nelle "nuove luci" per rischiarare il "nostro" paese dalla oscurità in cui è.
Forza & onore!


Copyright Matrixbob 2004/2005.

Varie configurazioni potrebbero essere queste:
Apache (o Tomcat) + MySQL (o PostgreSQL) + PHP (o PERL per la CGI) + phpMyAdmin (o phpPgAdmin)
... in sostanza il solito minestrone con licenza GNU Copyleft immagino, giusto?!
Ad esempio con la sigla LAMP si tendi indicare Linux + Apache + MySQL + PHP.

SOFTWARE
Anzitutto, nell'ordine, queste sono le versioni che andrò a tentare d'installare
... che dovrebbero essere le ultime stabili con Winzoz:

[1] apache_2.0.53-win32-x86-no_ssl.msi
(in versione 2 stabilmente già da qualche anno)
[2] php-5.0.4-Win32.zip
(perchè mi pare sia l'ultimo modulo stabile di php)
[3] mysql-4.1.11-win32.zip
(che ha già supporto a transizioni, chiave straniera sulla tabella & vincoli d'integrità referenziali: non è maxDB, ma la fusione di MySQL con MySQL max)
[4] MyODBC-3.51.11-1-win.exe
(in modo da evitare l'uso di funzioni native in php verso dbms)
[5] phpMyAdmin-2.6.1-pl3.zip
(per dargli script in pasto e creare basi di dati in fretta)
[6] Un buon tools per progettare basi di dati
(se ne conoscete sprate pure..)
[7] Static DNS for Your Dynamic IP

INSTALLAZIONE
Ho installato Apache mettendo come network domain: localhost & come server name: localhost.
L'email il mio.
lo ho lasciato in attesa sulla porta 80.
Installazione "tipica" nella cartella di default.
Fine installazione di Apache per ora.
Lo provo digitando localhost nel browser e se tutto è ok compare la pagina di Apache.
Altra documentazione, comprese le direttive, le trovate nella sua cartella /htdocs/manual

Passiamo al PHP.

Scompatto il file ZIP riguardante il PHP5. La documentazione è in install.txt.
Rinomino la cartella creatasi con indicata la versione in semplice cartella php.
Copio php5ts.dll e php5apache2.dll nella cartella system32 di Winzoz.
Rinomino php.ini-dist in php.ini e mi preparo ad aprirlo con un semplice editor di testo standard.

Apro php.ini e setto stando attenti ad usare un path WINDOWS like:

extension_dir "... path della cartella php\extensions"
upload_tmp_dir "... path della cartella Winzoz\Temp"
SMTP "URI del nostro mailer"
sendmail_from "il mittente della email spedita dal nostro mailer"
session.save_path "... path della cartella Winzoz\Temp"

Salvo il file php.ini e lo taglio per incollarlo nella cartella di WINDOWS.

Torniamo alla configurazione di Apache2.

Apriamo l'httpd.conf del webserver precedentemente installato con l'installer ed aggiungiamo al fondo in append, stando attenti ad usare path in formato UNIX like stavolta:

LoadModule php5_module c:/php/php5apache2.dll
AddType application/x-httpd-php .php

Poi cerchiamo e modifichiamo la DocumentRoot path della cartella che voglio rendere “public_html" e sempre 20 righe sotto la stesso path alla voce <Directory>.

Infine a DirectoryIndex aggiungiamo index.php.

Si salva l'httpd.conf e si fa ripartire Apache nel qualcaso fosse stato acceso durante tutta la modifica del suo file di configurazione.

Ora il tipico test in grado di verificare la collaborazione di Apache con il linguaggio lato server php è quella di creare un file.php contenente <?php phpinfo(); ?> salvarlo e richiamarlo da browser con Apache attivo.

ERRORI TIPICI
in caso d’errore all’avvio di Apache controllare che il file php_mysql.dll stia nella cartella ext o extensions perchè io l'avevo chiamata così nel php.ini la cartella contenente le estensioni.
Poi si decommentata (togliendo il ; innanzi) la stringa extension=php_mysql.dll nel file php.ini. Inoltre il file libmysql.dll deve stare nella cartella system32.

Se tutto è andato bene si riveleranno a noi le caratteristiche del webserver appena creato.

Tocca all’installazione di MySQL, faccio l’installazione approfondita e rispondo leggendo attentamente alle domande.

A MySQL installato è meglio provare se tutto è ok mettendo da prompt di winzoz:
> mysql -u root –p

poi inserite la password da voi scelta per root durante l'installazione del DBMS e se tutto è ok, allora compare il wellcome!

(oppure > mysql -help per sapere tutti i comandi)

[N.B.]
Sia Apache che MySQL si settano come servizi in autorun all'avvio, se volete altrimenti settateli come volete, io li setto ad avvio manuale.

Installo l’ODBC che sarà utile nel caso non si interrogasse il DBMS in modo nativo.

Adesso trattiamo PMA che è 1 applicazione scritta in PHP e quindi che per funzionare ha bisogno della corretta installazione di webserver + il linguaggio lato server PHP. All'interno della cartella di PhpMyAdmin#versione c'è Documentation.html che spiega approfonditamente la configurazione di quest'ultimo.

Provo a riassumerla alla buona:

[1]
si apre il file config.inc.php con 1 semplice editor di testo

[2]
setto l'URI della directory di PMA:
Codice PHP:
$cfg['PmaAbsoluteUri'] = 'http://localhost/phpMyAdmin-2.6.1-pl3/'
[3]
setto l'accesso a MySQL:
Codice PHP:
$cfg['Servers'][$i]['auth_type'] = 'config';
// Authentication method (config, http or cookie based)? 
$cfg['Servers'][$i]['user'] = 'root';
// MySQL user 
$cfg['Servers'][$i]['password'] = 'LA TUA PASSWORD MySQL';
// MySQL password (only needed with 'config' auth_type) 
Se tutto è ok, allora avete appena finito di configurare le diversi componenti in modo da che queste possano interagire tra loro in una applicazione web.



ERRORI TIPICI
"l'estensione PHP mbstring non è stata trovata e sembra che si stia utilizzando un set di caratteri multibyte. Senza l'estensione mbstring, phpMyAdmin non è in grado di dividere correttamente le stringhe di caratteri e questo può portare a risultati inaspettati".

Cioè c'è scritto: manca l'estensione mbstring e quindi va decommentata (togliendo il ; innanzi) la stringa extension=php_mbstring.dll nel file php.ini ed il file php_mbstring.dll messo in extensions. Praticamente è la stessa cosa che andava fatta anche col file php_mysql.dll in precedenza.

SICUREZZA
Nel file httpd.conf si va a cercare questa parte di testo:
Codice:
<Directory "path della mia cartella www pubblica"> 
# 
# Possible values for the Options directive are "None", "All", 
# or any combination of: 
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews 
# 
# Note that "MultiViews" must be named *explicitly* --- "Options All" 
# doesn't give it to you. 
# 
# The Options directive is both complicated and important. Please see 
# http://httpd.apache.org/docs-2.0/mod/core.html#options 
# for more information. 
# 
Options Indexes FollowSymLinks 
# 
# AllowOverride controls what directives may be placed in .htaccess files. 
# It can be "All", "None", or any combination of the keywords: 
# Options FileInfo AuthConfig Limit 
# 
AllowOverride AuthConfig 
# 
# Controls who can get stuff from this server. 
# 
Order allow,deny 
Allow from all 
</Directory>
Il settaggio corretto di Allow & Deny permettono di controllare l'accesso al nostro web server.

Order è l'ordine di valutazione ovvero prima permetto chi e poi vieto a chi, oppure, prima vieto a chi e poi permetto a chi.

Quindi una configurazione valida potrebbe essere:
Order allow,deny
Allow indirizzoIP indirizzoIP dominio_qualsiasi .... etc etc ....
Deny indirizzoIPcattivo

Quindi l'indirizzoIPcattivo ha il divieto d'accesso al nostro web server Apache.

AllowOverride AutoConfig da il risultato di permettere agli utenti del web server di poter configurare loro stessi in locale alcune direttive di Apache in un file ".htaccess". Un esempio tipico dell'uso di ".htaccess" è quello di gestire le autenticazioni all'accesso.

In caso di questo errore:

[Wed May 11 15:14:03 2005] [alert] [client 127.0.0.1] D:/www/.htaccess: Invalid command 'AuthDigestFile', perhaps mis-spelled or defined by a module not included in the server configuration

Va decommentata, in httpd.conf, questa stringa:

LoadModule auth_digest_module modules/mod_auth_digest.so

Ok il contenuto del mio file .htaccess è:
AuthType Digest
AuthName "nome_gruppo_cui_far_appartenere_l'autentificazione_dell'utente"
AuthDigestFile path_assoluto_unix_like/.htpasswd
Require valid-user

Il file .htpasswd lo create col comando di apache (quindi nella sua cartella bin) lanciato da shell (o si dice prompt dei comandi?! o_O) in questo modo:

> htdigest -c .htpasswd nome_gruppo_cui_far_appartenere_l'autentificazione_dell'utente username

Dopo di che seguite cosa vi chiede il programma.

Require valid-user indica che a poter essere autenticato deve essere un utente presente in .htpasswd.

VIA LIBERA ALLA FANTASIA
A questo punto non rimane che progettare in EER la base di dati e trasformarla in relazionale preferibilmente con qualche tool per non perdere giorni della propria vita a creare il DB manualmente.



La maggior parte di quei tool permettono una creazione automatica di script in SQL puro che potete mandare in esecuzione in svariati modi (sqlconsole, phpmyadmin, etc …).

Dopo di che s'interroga il DB con PHP in ODBC se si vuole indipendenza dal DBMS installato quindi MySQL piuttosto che PostgreSQL.
Oppure se si vuole + efficienza con funzioni "native" verso il DBMS scelto (quindi qui ci tocca scegliere se efficienza o portabilità):

my_connect(...);
pg_connect(...);
odbc_connect(...);

e + in generale:

X_connect(...);

Altra piccola cosa degna di nota sono i "trigger" che in PostgreSQL sono implementati e vi permettono di agire ad eventi sulle tabelle della base di dati, cose che potrebbero essere molto utili in alcune applicazioni web.

MULTIUTENZA APACHE
Informazioni riguardanti la multiutenza di Apache le trovate QUI per ora.
---

Link inerenti:
[Tutorial] Installazione di Apache+php e IIS+PHP

Perle di conoscenza:
[php] Reindirizzamento
[MySQL] Come implemento le transazioni in PHP?!
[php] Mandare email con PHP: come setto il php.ini?!
[MySQL] Voglio memorizzare 1 pathfile ma fallisco ..
[MySQL-PHP] Confronto tra date: come?!
[PHP-MySQL] Cercare sottostringhe nel DB, come fan le Pagine Gialle
[PHP-MySQL] Rendere NON CASE SENSITIVE una ricerca nel DB è possibile?!
[MySQL] Consiglio x backup dei dati.
[WEB] X avere 1 URL così "miocliente.miosito.it" cosa devo fare?!
[php] Posso "vendere" 1 aplz web fatta da me in PHP?!
[Hack] Chi conosce la "SQL injection" e come si evita?! (parte 1)
[Hack] Chi conosce la "SQL injection" e come si evita?! (parte 2)
[PHP-MySQL] Miglior HW x far girare questi SW?!
[Web] URL o URI?!
date in php e mySQL
[PHP-Apache] Più sicura l'autenticazione digest d'Apache o la PWD nel codice PHP?!
[MySQL] chi usa mysql_free_result() ?!
Chiarimenti: a che servono le variabili d'ambiente?!
[W3C] Rendere valida 1 pagina con bottoni flash si può?!
Che file devo modificare x inserire in Winzoz il path di 1 prg ...
PHP: Self submission, onclick, onsubmit ..
config.inc che cosa significa?!
Che editor web usate?!
.. il modulo Perl per Apache?!
E' possibile non mostrare le pagine nel URL?!
xml, xhtml, dhtml, html, .. ho 1 po di confuzione!
DTD di tutti i gusti .. ma xkè in alcuni compare xml ad esempio?!
accedere a mysql da altra macchina
[php] VC9 x86 Thread Safe: cosa significa?
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 08-02-2010 alle 10:47.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 13-05-2005, 20:55   #2
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Webserver >> CGI << PERL

Autore Matrixbob-kingv 2004/2005

La coppiata webserver/PERL è resa possibile dalle Common Gateway Interface (interfaccia d'ingresso comune?!) che sono un insieme di protocolli tali che 1 client possa richiedere ed ottenere risultati da 1 server che interpreta uno script od esegue la compilazione di un qualche programma.

PERL (Practical Extraction and Report Language ovvero linguaggio pratico d'estrazione e rapporto?!) è 1 famosissimo linguaggio interpretato (proprio per essere + portatile rispetto ad 1 linguaggio compilato) nato nel 1987 x la gestione delle stringhe di caratteri, inseguito riutilizzato anche per alcune semplici applicazioni web.
In quest'ultimo caso invece di mandare lo standard output a video, il flusso viene rindirizzato in "qualche modo" al browser client sotto forma di risposta xhtml.

INSTALLAZIONE
La versione x Winzoz mi risulta essere quella della:
http://www.activestate.com

La si installa e poi si va a decommentare nel httpd.conf la stringa riguardante il modulo CGI:
LoadModule cgi_module modules/mod_cgi.so

Inoltre va specificata la posizione della cartella tipica dei cgi e vale a dire cgi-bin & lo ScriptAlias al riguardo. Quindi nel nostro caso:

<Directory "D:/www/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

e

ScriptAlias /cgi-bin/ "D:/www/cgi-bin/"

Questa direttiva ScriptAlias permette di settare una directory, anche esterna alla DocumentRoot, come CGI container (soluzione adottata di default).
In questo caso Apache interpreterà tutte le richieste con l'url che conterrà cgi-bin come richieste per risorse all'interno della directory D:\www\cgi-bin\


A questo punto tutti le applicazioni CGI scritte in PERL andranno messe nella cartella cgi-bin per essere eseguite, mentre le parti di xhtml resteranno della cartella www, insieme ai file.php o file.htm nel qualcaso fossero presenti.

Come script di prova create un file col nome printenv.cgi, in cgi-bin, contenente:
Codice:
#! D:\Perl\bin\perl.exe
##
##  printenv -- demo CGI program which just prints its environment
##
print "Content-type: text/plain\n\n";
foreach $var (sort(keys(%ENV)))
{
    $val = $ENV{$var};
    $val =~ s|\n|\\n|g; 
    $val =~ s|"|\\"|g;
    print "${var}=\"${val}\"\n";
}
e richiamatelo correttamente da browser:
http://localhost/cgi-bin/printenv.cgi
scordatevi di poter accedere alla cartella cgi-bin, perchè essa di default è protetta dal listing.

Se tutto è ok otterrete lo stesso risultato della "phpinfo()" del PHP!!

Se non sapete già programmare in questa maniera, allora ve la sconsiglio, trovo personalmente molto + facile il PHP o linguaggi proprietari come ASP.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 18-06-2005 alle 01:17.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2005, 11:08   #3
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
What is DBI?
The DBI is the standard database interface module for Perl. It defines a set of methods, variables and conventions that provide a consistent database interface independent of the actual database being used.

Autore Matrixbob 2004/2005

Per usarlo occorre installare il modulo, e quindi seguire una delle 2 procedure.

[INSTALLAZIONE 1]
Scaricare: DBD-mysql-2.9006.tar.gz

ed installarlo:

INSTALL - How to install and configure DBD::mysql
-----------------------------------------------------------------
SYNOPSIS
perl Makefile.PL [options]
make
make test
make install


[INSTALLAZIONE 2]
Usare il Perl Package Manager presente in ActivePerl:

BINARY INSTALLATION
Binary installation is possible in the most cases, depending on your system. I give some examples:

Windows
ActivePerl offers a PPM archive of DBD::mysql. All you need to do is typing

[1] ppm
[2] install DBI
[3] install DBD-mysql


__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 30-05-2005 alle 12:17.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2005, 13:20   #4
Poix81
Senior Member
 
L'Avatar di Poix81
 
Iscritto dal: Nov 2001
Città: Trento
Messaggi: 7095
per eseguire un java script bisogna avere qualcosa di particolare?

ciao ciao e grazie
__________________
MyPC: A7A266 - Thoro1800+@2000+ - SK6 - 512DDR - FX5200 128MB - SBLive!1024 - MAXTOR120GB - Liteon LTR52327S LDW-451S
HTPC: Case uATX QTec - GA 7VM400M - Duron1600 - ALX800 - 256DDR - Radeon7000 - LiteOn166 - Pow by GeexBox 0.98.5
Utenti con cui ho trattato
Poix81 è offline   Rispondi citando il messaggio o parte di esso
Old 14-05-2005, 14:14   #5
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Quote:
Originariamente inviato da Poix81
per eseguire un java script bisogna avere qualcosa di particolare?

ciao ciao e grazie
Queste domande ponetele nella sezione programmazione non qui in tutorial per piacere.
CMQ i JavaScript sono implementati automaticamente dal browser client in locale.
Tieni presente che la domanda è così "ciclica" che bastava fare una ricerca su google e forse anche sul forum.

Non far seguir risposta, tnx.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 21-05-2005 alle 18:49.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2005, 17:46   #6
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Passiamo alle altre alternative utili allo sviluppo d'applicazioni web, ed ahi me sempre sotto Winzoz (che il Signor ci aiuti ).

Autore Matrixbob 2004/2005

INTRODUZIONE
Le nomencalture Java della Sun:

>1<
RE o Runtime Enviroment = è l'ambiente d'esecuzione di applicazioni Java desktop/client.
>2<
SDK o Software Development Kit = è 1 insieme di strumenti per lo sviluppo d'applicazioni Java. E' il "core" di questo linguaggio.
Tutte le altre librerie possono essere ricavate a partire dal "core".
>3<
SE o Standard Edition = è il gestore d'applicazioni desktop/client. Contiene sia l'edizione RE che l'SDK.
>4<
EE o Enterprise Edition = è tutto il mondo Java e la tecnologia che da esso scaturisce.
>5<
JDK o Java Development Kit = è 1 alias del'SDK.
>6<
Esistono altre sigle che non prenderemo in considerazione, tipo le ME o Micro Edition, etc ..


SOFTWARE
Nell'ordine, queste sono le versioni che andrò a tentare d'installare
... che dovrebbero essere le ultime stabili con Winzoz:

[1] jdk-1_5_0_03-windows-i586-p.exe
(qui i nomi SDK<-->JDK continuano ad alternarsi nel tempo, mah ...)
[2] jakarta-tomcat-5.5.9.exe
(il webserver Tomcat)
[3] j2eesdk-1_4_01_2005Q1-windows.exe
(il mondo Java, lo installiamo perchè al suo interno ci sono "cose" e librerie già sviluppate molto interessanti)


NOZIONI CULTURALI
<> Jakarta è il nome del gruppo di persone che lavorano col Java per l'Apache Software Foundation.
<> Tomcat è 1 webserver che soddisfa le specifiche Java "server side" di Sun.
<> Catalina è il "motore o engine" Java di Tomcat che fornisce l'ambiente d'esecuzione delle Servlet.
<> Jasper è il gestore delle pagine JSP di Tomcat.
<> Coyote è il connettore HTTP di Tomcat che fornisce l'implementazione del protocollo HTTP per permettere ai browsers di accedere a Tomcat.
<> 1 server è 1 {servizi}.
<> 1 servizio è 1 {connettori}.
<> 1 connettore è 1 protocollo di comunicazione su 1 porta;

Es:
oltre a Coyote esiste 1 connettore chiamato AJP (Apache Java Protocol) su porta 8009 al quale verranno dirottate da Apache le richieste http ad Apache, che però son previste svolgere da Tomcat, nel qualcaso Tomcat fosse settato come modulo d'Apache e non in "stand alone".

<> 1 connettore -- associato --|> 1 "engine" come Catalina.
<> 1 "engine" -- associato --|> + host virtuali come il nostro localhost.
<> 1 host virtuali -- associato --|> + contesti come quello della nostra applicazione web.

Per i problemi di compilazione col Java vi rimando qui:
[Tutorial Java] Guida alla compilazione

e per una panoramica globale qui:
[Java] Corsi e tutorial.

Per le domande relativamente "banali" che vi saltano in mente questo altro:
Programmazione F.A.Q.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 05-06-2005 alle 16:46.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 21-05-2005, 19:16   #7
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Autore Matrixbob-kingv 2004/2005

Installazione di Tomcat "stand alone", quindi non come modulo d'Apache.
L'installazione avviene nel ordine prima elencato, seguendo i wizard.
Ad installazione completata avrete Tomcat in attesa sulla porta 8080 e per raggiungerlo dovrete dare http://localhost:8080 invece che solo http://localhost il quale sottointende di default sia la porta 80.
Sulla porta 80 ci resta Apache se lo avete installato precedentemente.
A installazione completata in:
C:\Programmi\Apache Software Foundation\Tomcat 5.5\conf\server.xml
avrò la configurazione generale del webserver Tomcat.

Deploying Servlet
L'administrator si dovrà occupare di creare i file.xml di contesto nella cartella:
C:\Programmi\Apache Software Foundation\Tomcat 5.5\conf\Catalina\localhost

Meglio dare 1 nome intuitivo a questi file per ricordarvi che contesto vanno a settare, come sarebbe sempre opportuno fare in programmazione al fine di non complicare la vita ad altri programmatori ed a noi stessi col passare del tempo.

Per contesto s'intende associare 1 alias di contesto al path assoluto alla cartella public_html dell'utente.

Ad esempio, il mio file "www.xml":
Codice HTML:
<!-- Context configuration file for ... la mia cartella www --> 
<Context path="www" docBase="D:\www\public_html"> 
</Context> 
Quando l'administrator ha completato questo settaggio di contesti allora i vari utenti potranno iniziare a preparare la propria area allo sviluppo di Servlet, le quali saranno richiamate con 1 URL simile a http://localhost:8080/www/.

[NB]
Se avete inserito 1 "Tilda" ovvero l'ondicella ~ nel alias (come si è soliti fare tra utenti UNIX like), allora nell'URL dovrete mettere "%7E" per rimpiazzare la "Tilda" nel qualcaso non aveste quel carattere a disposizione altrove.


Per non avere 1 "shared directory" (la tipica DocumetRoot di Apache per esempio) accessibile a tutti, gli utenti dovrano crearsi nella loro public_html la cartella "WEB-INF" ed al suo interno creerenno ancora: 1 cartella "src", 1 cartella "classes", 1 cartella "lib" ed 1 file "web.xml" inizialmente vuoto.

[1] "src" conterrà i file.java delle Servlet, ovvero i sorgenti.
[2] "classes" conterrà le Servlet compilate e quindi i file.class.
[3] "lib" conterrà le classi di altri che mi servono, probabilmente in formato JAR cioè file.jar, come ad esempio il driver JDBC.
[4] "web.xml" è il file di configurazione delle mie applicazioni web e quindi anche di tutte le Servlet che compongono 1 applicazione web.

ESEMPIO
... il mio file "web.xml" per la Servlet "GreetingServlet":
Codice HTML:
<web-app> 
<servlet> 
<servlet-name>GreetingServlet</servlet-name> 
<servlet-class>GreetingServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>GreetingServlet</servlet-name> 
<url-pattern>/GreetingServlet</url-pattern> 
</servlet-mapping> 
</web-app> 
... richiamata in 1 pagina HTML col link:
Codice HTML:
<p> 
Run the servlet Greeting: click 
<a href="http://localhost:8080/www/GreetingServlet?name='Roberto'&email='matrixbob@tin.it'">here</a> 
</p>
Vi ricordo ancora che io il file compilato "GreetingServlet.class" lo ho qui:

D:\www\public_html\WEB-INF\classes

ed il file di contesto "www.xml" è fatto così:
Codice HTML:
<Context path="www" docBase="D:\www\public_html"> 
</Context> 
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 21-06-2005 alle 18:48.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2005, 18:47   #8
sirus
Senior Member
 
Iscritto dal: Mar 2004
Messaggi: 16052
bel lavoro complimenti, ho fatto una cosa simile per la mia tesi di 5a superiore con Linux + Apache + PHP + MySQL e con Windows + IIS + PHP + MySQL...
magari quando ho finito gli esami la metto anche io

EDIT Ops

Ultima modifica di sirus : 22-05-2005 alle 19:15.
sirus è offline   Rispondi citando il messaggio o parte di esso
Old 22-05-2005, 18:56   #9
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Quote:
Originariamente inviato da sirus
bel lavoro complimenti, ho fatto una cosa simile per la mia tesi di 5a superiore con Linux + Apache + PHP + MySQL e con Windows + IIS + PHP + MySQL...
magari quando ho finito gli esami la metto anche io
Ma dovevi dirlo nel tutorial, non potevi farlo altrove e mettere il link solo al tutorial?!
Non vedi che in questo modo lo spezzi?!

Tutto ben venga.

Nn far seguir risposta qui plz. Tnx.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 23-05-2005, 21:19   #10
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Autore Matrixbob-kingv 2004/2005

Riepilogo delle mie prove.
Alla fine mi sono creato 1 file "web.xml" così fatto per 3 Servlet differenti:
Codice HTML:
<web-app>

  <servlet>
    <servlet-name>GreetingServlet</servlet-name>
    <servlet-class>GreetingServlet</servlet-class>
  </servlet> 
  <servlet-mapping>
    <servlet-name>GreetingServlet</servlet-name>
    <url-pattern>/GreetingServlet</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>GreetingServletPost</servlet-name>
    <servlet-class>GreetingServletPost</servlet-class>
  </servlet> 
  <servlet-mapping>
    <servlet-name>GreetingServletPost</servlet-name>
    <url-pattern>/GreetingServletPost</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>QueryJdbc</servlet-name>
    <servlet-class>QueryJdbc</servlet-class>
  </servlet> 
  <servlet-mapping>
    <servlet-name>QueryJdbc</servlet-name>
    <url-pattern>/QueryJdbc</url-pattern>
  </servlet-mapping>

</web-app>
ed ho provato a richiamare le Servlet scritta apposta per il metodo "doGet" attraverso 1 "GET" con:

<p>
Run the servlet Greeting: click
<a href="http://localhost:8080/www/GreetingServlet?name='Roberto'&email='matrixbob@tin.it'">here</a>
</p>

ed a richiamare le Servlet scritta apposta per il metodo "doPost" attraverso 1 "POST" con:

<form name="myform" method="post" action="GreetingServletPost">
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 18-06-2005 alle 01:11.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2005, 08:53   #11
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Autore Matrixbob-kingv-mjordan 2004/2005

CONSIDERAZIONI
* Per evitare di aggiungere il CLASSPATH a mano ogni volta che compilavo 1 Servlet da stringa di comando,
(Cmd> javac -classpath c:\tuopath\file_che_contiene_le_classi.jar TuaServlet.java)
è stato necessario aggiunger il CLASSPATH come "variabile d'ambiente" di Winzoz.
* Ah, non dimentichiamo che anche i comandi JAVA vanno aggiunti comodamente nella "variabile d'ambiente" PATH, in modo di poter compilare in qualsiasi directory.



* E' stata creata anche la "variabile d'ambiente" CATALINA_HOME che a dir di molti serve avere, anche se io per ora non ne ho sentito il bisogno.



Con la sintassi %NOME_VARIABILE%, ti riferisci al valore della "variabile d'ambiente" NOME_VARIABILE, che è l'equivalente di $NOME_VARIABILE in bash.

Infatti facendo:

Shell> cd $CATALINA_HOME (Unix like)
Cmd> cd %CATALINA_HOME% (Windows like)

si ragginge la cartella d'installazione di Tomcat.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 30-05-2005 alle 12:29.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2005, 11:54   #12
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Autore Matrixbob 2004/2005

JDBC
Vedremo se riusciremo ad accedere al DBMS utlizzando il connettore JDBC.
Non occorre altro che sistemare il file.jar relativo al JDBC nella cartella "lib" precedentemente creata.
(io proverò questo: "mysql-connector-java-3.1.8-bin.jar")

Sperando che implementi questa tipologia di JDBC:



Perfetto, funziona!
Bisogna solo stare attenti a come utilizzare il driver dentro la Servlet, tenendo presente che i file JAR sono archivi contenenti anche sottocartelle e quindi che per raggiungere 1 file org\gjt\mm\mysql\driver.jar occorre usare la sintassi JAVA "org.gjt.mm.mysql.Driver".

MIEI CONSIGLI
Alcune parti di codice potrebbero essere:
Codice:
try{
Class.forName("org.gjt.mm.mysql.Driver");
// Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException e) {e.printStackTrace(); throw new ServletException(e.getMessage());}
Per quanto riguarda la connessione al DBMS si fa qualcosa del genere:
Codice:
private static String url="jdbc:mysql://localhost/queryjdbc?user=root&password=la_tua_password";
private Connection conn=null;

try{
conn=DriverManager.getConnection(url);
} catch (SQLException s) {s.printStackTrace(); throw new ServletException(s.getMessage());}
dove queryjdbc è il nome del nostro DB a cui possiamo accedere.

Meglio, secondo me, trattare questa "parte di programmazione" nel metodo:
Codice:
public void init(ServletConfig config) throws ServletException
... e poi fare le elaborazioni nei metodi doGet e/o doPost.

Magari, chiudere la connessione nel metodo:
Codice:
public void destroy()
perchè automaticamente sono questi i 4 metodi che Tomcat manda ordinatamente in esecuzione delle Serlvet.

[NB]
Meglio sempre catturare le eccezioni di JAVA altrimenti si rischia di diventare pazzi nel capire come mai le cose non fuzionano.
I connettori JDBC/ODBC sono scaricabili dal sito dei produttori del DBMS.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 21-06-2005 alle 18:46.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 25-05-2005, 16:53   #13
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Autore Matrixbob 2004/2005

JSP (Java Server Pages): San Francisco 1998.

Come qualche saggio disse: "... le Servlet sono per i programmatori, mentre le JSP son per i webmaster/webdesigner"!

Se PERL-CGI e Servlet sono simili allora anche PHP/ASP e JSP son simili.

Noi scriviamo la pagina.jsp in stile "XHTML like" e Jasper la trasforma automaticamente in Servlet al momento del primissimo richiamo, ovviamente tutto in maniera trasparente all'utente.

JSP: quali possibilità?!
Sicuramente le + diffuse, se ben non le sole, sono:
[1] Scriptlet.
[2] Standard actions: include, forward, plugin & useBean.

[NB]
Java Bean: codice riusabile scritto, probabilmente da altri, secondo determinate regole. A noi interessano principalente le sue interfacce.
La scrittura di questa "particolare" classe ci permette di separare la logica dalla presentazione nella nostra applicazione.
Per saperne di più:
http://www.mokabyte.it/1997/01/beans.htm
http://java.sun.com/products/javabeans/

[3] Direttive: page & include.
[4] Librerie di TAG: di tipo DBTAG, di tipo JSLT & di tipo custom (cioè scritte da noi).

Trovate parte della descrizione qui:
JspItalia
JSP Area

Oggetti impliciti
Per tutte le 4 entità sopra elencate esistono degli oggetti già implicitamente istanziati, tra i + importanti: config, out, response e request.
La cui visibilità (il famoso scope della variabile) può essere di tipo:
[1] application: sempre visibile.
[2] page: visibile nella pagina.
[3] request: visibile per la singola richiesta.
[4] session: visibile per tutta la sessione.


[NB]
° Dato che già in molti hanno cercato di spiegarli (anche se pasticciando troppo) come, tra i + famosi:
http://www.risorse.net/jsp/
http://www.html.it/jsp/
http://www.latoserver.it/eventi/plut...sp/slide1.html
allora io trattero solo qualche "cosina" e magari come al solito dal punto di vista pratico e curioso, cercando di essere anche "pedantico" nella sostanza.

° Vi consiglio comunque di procurarvi un libro decente al riguardo, io solitamente uso quelli da 4 soldi della Mondadori o Apogeo anche se sarebbe consigliabile un bel testo come il Deitel.


VELOCE PANORAMICA
[1] Scriptlet: vanno bene quando il contenuto statico di 1 pagina "XHTML like" è per la maggior parte statico e con qualche macchia di dinamicità.

Es di file "date.jsp":
Codice HTML:
Inizio codice XHTML
...
<%= new java.util.Date(); %>
...
Fine codice XHTML
dove il carattere "=" mi trasforma in stringa il risultato.

[2] Standard actions: le azioni sono quelle citate in precedenza, si differenziano dalle direttive per il fatto che sono estremamente dinamiche, vengono rieseguite ad ogni richiesta HTTP, mentre le direttive vengono eseguite solo alla prima richiesta HTTP.

Es di file "include.jsp":
Codice HTML:
Inizio codice XHTML
...
<jsp:include page = "bunner.html" flash = "true" />
...
Fine codice XHTML
dove bunner.html è un bunner e flash = "true" deve per forza essere settato così.

Es di file "forward.jsp":
Codice HTML:
Inizio codice XHTML
...
<jsp:forward page = "elabora.jsp" flash = "true">
<jsp:param name = "date" value = "<%= new java.util.Date(); %>" />
</jsp:forward>
...
Fine codice XHTML
dove in elabora.jsp avrò un bel: <%= request.getParameter("date") %>

Es di file "useBean.jsp":
Codice HTML:
<?xml version = "1.0"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<jsp:useBean id = "rotator" scope = "application" class = "Rotator" />
<html xmlns = "http://www.w3.org/1999/xhtml">
<head>
<title>AdRotator Example</title>
<%-- update advertisement --%>
<% rotator.nextAd(); %>
</head>
...
altro codice XHTML
dove Rotator è il nome del mio bean Rotator.java costituito da variabili private e metodi pubblici.
id = "rotator" mi crea l'istanza del bean Rotator.java e la chiama rotator.
Codice HTML:
altro codice XHTML
...
<jsp:getProperty name = "rotator" property = "link" />
...
<jsp:getProperty name = "rotator" property = "image" />
...
Fine codice XHTML
dove ho l'equivalenza con "rotator.getLink();" e "rotator.getImage();"

[3] Direttive: Utilizza la sintassi <%@ qualcosa %> sono meno dinamiche rispetto alle standard actions che vengono eseguite ad ogni refresh del browser, mentre le direttive sono eseguite solo al primo richiamo e quindi alla prima compilazione in Servlet dal JSP.

[4] TAG libreries: si dividono in DBTAG (semplici ma deprecate), JSLT (complesse in stile "C like", ma standard) & custom (quelle che definiamo noi).

# Delle DBTAG ho scaricato queste:
jakarta-taglibs-dbtags-20050605.zip
da qui:
http://cvs.apache.org/builds/jakarta...ojects/dbtags/
e sembrano andare bene.

# Per le JSLT ho deciso di scaricare queste:
jakarta-taglibs-standard-1.1.2.zip
da:
http://jakarta.apache.org/site/downl...s-standard.cgi

[NB]
I rispettivi file.JAR andranno inseriti in D:\www\public_html\WEB-INF\lib.
Per la loro documentazione invece visitate il sito ufficiale:
http://jakarta.apache.org/taglibs/index.html

# Quando invece lavoriamo con la custom avremo sempre a che fare con 3 file:
[i] 1 file.tld che è scritto in XML. Dice quel file.class eseguire per 1 determinato TAG.
[II] 1 file.java che è una Servlet implementante il nostro "effetto" TAG. Ovviamente andrà compilato in 1 file.class.
[III] 1 file.jsp che utilizza i TAG custom da noi realizzati.
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 21-06-2005 alle 18:44.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 05-06-2005, 16:54   #14
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
JSP: ESEMPI DI CHIARIMENTO
esempio di bean
esempio di custom tags
esempio di DBTAGS
esempio di JSTL tags

JSP: problemi con PostgreSQL!
Inoltre con PostgreSQL pare NON esistere 1 driver di Type 4 e questo potrebbe essere la spiegazione al fatto che le query invece di essere eseguite, vengono stampate a video in formato SQL:


Mente l'output corretto sarebbe stato qualcosa di simile:
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 28-06-2005 alle 20:05.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 12-08-2005, 15:29   #15
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Link interessanti:
[JSP] Problema di conversione dei tipi usando DBTAGS
[JSP] File upload: qualcuno lo sa fare?!
[JAVA] 4 domande: package, WAR, JAR, ...
[Java] Jakarta e Tomcat: perchè sti nomi?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 03-09-2005 alle 15:15.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 09-09-2005, 23:14   #16
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Ultime cose imparate:
[1]
Si possono rendere insiemi d'attributi UNIQUE in modo da non utilizzare una chiave composta su questi attributi, ma solo un semplice attributo ID.
Dillemma che avevo affrontato qui, non comprendendolo completamente:
[DBMS] Secondo voi 1 evento da cosa è identificato?!
[2]
Prestare + attenzione a come si utilizzano i link GET.

Altre cose utili:
Differenze tra prompt e shell?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 14-09-2005 alle 11:09.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 22-10-2005, 15:07   #17
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
[UPDATE]
Tutto funziona anche con:

apache_2.0.55-win32-x86-no_ssl.msi
php-5.0.5-Win32
mysql-4.1.15-win32.exe
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
Old 04-11-2005, 19:46   #18
glazio
Senior Member
 
L'Avatar di glazio
 
Iscritto dal: Aug 2005
Messaggi: 2766
azzzzz mi serviva proprio!!!
complimenti! mi toccherebbe fare un server per il mio sito ma vedendo tutta sta robba mi passa la voglia !
glazio è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2006, 11:09   #19
Matrixbob
Senior Member
 
L'Avatar di Matrixbob
 
Iscritto dal: Jul 2001
Messaggi: 9945
Problemi con l'installazione di:

apache_2.2.2-win32-x86-no_ssl.msi
http://archive.apache.org/dist/httpd/binaries/win32/
php-5.1.4-Win32
http://www.php.net/downloads.php
MySQL 5.0.22
http://dev.mysql.com/get/Downloads/...2.zip/from/pick
phpMyAdmin-2.8.1
http://prdownloads.sourceforge.net/....1.zip?download


Vedere:
[Apache 2.2.2] Sorgono problemi configurazione x PHP

e vedere:
[LAMP] MySQL - Apache: nelle ultime versioni vanno in conflitto?!
__________________
Aiuta la ricerca col tuo PC: >>Calcolo distribuito BOINC.Italy: unisciti anche tu<<
Più largo è il sorriso, più affilato è il coltello.

Ultima modifica di Matrixbob : 03-06-2006 alle 16:37.
Matrixbob è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Apple MacBook Air M3: chi deve davvero comprarlo? La recensione Apple MacBook Air M3: chi deve davvero comprarlo...
ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ultrawide si fondono ASUS ROG Swift OLED PG49WCD: quando QD-OLED e ul...
Dreame L10s Pro Ultra Heat: la pulizia di casa tutta sostanza Dreame L10s Pro Ultra Heat: la pulizia di casa t...
HONOR Magic6 Pro: come funziona Magic Portal, il modo ''intelligente'' di condividere HONOR Magic6 Pro: come funziona Magic Portal, il...
L'innovazione richiede fiducia: Workday si propone come guida nell'era dell'IA L'innovazione richiede fiducia: Workday si propo...
RocketStar FireStar Drive: un propulsore...
Roscosmos: il lancio del razzo spaziale ...
Italia strategica per Oracle. Arriva la ...
Sam-Bankman Fried: 25 anni di reclusione...
Mobility Analytics di WINDTRE Business p...
Il lander lunare JAXA SLIM si è r...
Warframe conquista l'iPhone: senza soluz...
Marvel Rivals!, l'inaspettato shooter Pv...
Twitch aggiorna le linee guida sui conte...
Galaxy M55 ufficiale: la nuova fascia me...
Google corregge sette vulnerabilit&agrav...
IA: le imprese italiane sono in prima li...
Garmin Dash Cam 57: un'alleata perfetta ...
Elgato Facecam MK2: come rendere ancora ...
2 iRobot Roomba al prezzo più sco...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 22:11.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Served by www1v