TAG JSP :
<!-- comment -->
Output Comment : sono commenti spediti al client e visibili nel codice sorgente (è un tag html).
<%-- comment --%>
<% // riga di commento %>
Hidden Comment : non sono spediti al browser.
<%! declarations %>
Declaration : permettono la definizione di variabili globali rispetto alla pagina.
Esempio :
<%! int i = 0; %>
<%! String strMyString = "hello"; %>
<%= expression %>
Expression : permettono l’inserimento di vere e proprie espressioni e variabili valutate in run time. Il risultato di una espressione viene inserito nell’output HTML esattamente nel punto dove essa è definita.
Esempio:
<INPUT TYPE="text" NAME="country="<%= strCountry %>">
<%@ page ... %>
<%@ include ... %>
Page Directive, Include Directive : sono particolari istruzioni che avvertono il JSP-Engine (ossia il web server o application server JSP enabled) di una particolare impostazione da utilizzare. Sono istruzioni processate quando la pagina JSP viene compilata.
Page directive : serve per definire una serie di attributi che vengono applicati all’intera pagina JSP.
Sintassi :
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import= "{ package.class | package.* }, ..." ]
[ session="true | false" ]
[ buffer="none | 8kb | sizekb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relativeURL" ]
[ contentType="mimeType"
[ isErrorPage="true | false" ]
%>
Esempi :
<%@ page import="java.util.*, java.lang.*" %>
<%@ page buffer="5kb" autoFlush="false" %>
<%@ page errorPage="error.jsp" %>
Include Directive : serve ad includere un file di testo o di codice in un file sorgente jsp.
Sintassi:
<%@ include file="relativeURL" %>
Esempio:
<HTML>
<BODY bgcolor="white">
<font color="blue">
The current date and time are
<%@ include file="date.jsp" %>
</font>
</BODY>
</HTML>
<% ... %>
Scriptlets : Uno scriptlet deve essere inserito all’interno della coppia di tag <% %> ed è semplicemente una porzione di codice java che verrà eseguito. Il codice qui contenuto può accedere a qualsiasi variabile o bean dichiarato e viene eseguito al momento della richiesta.
Esempio :
<% if (request.getParameter("utente").equals("nuovo")) { %>
<p> Per favore eseguire la procedura di registrazione utente! </p>
<% } else { %>
<p> Ben tornato !! </p>
<% } %>
<jsp:...>
Actions: sono una serie di tags che con la prticolare sintassi <jsp:xxx> e che assolvono diverse funzioni.
Le principali actions sono :
<jsp:forward>
<jsp:getProperty>
<jsp:setProperty>
<jsp:include>
<jsp:plugin>
<jsp:useBean>
Martedì, 2 Settembre 2008
JSP : Tag
Venerdì, 9 Maggio 2008
MySql 5
Avviare il Server MySQL
mysqld --user=root --default-storage-engine=InnoDB
oppure per gli utenti nt
mysqld-nt --user=root --default-storage-engine=InnoDB
---
Fermare il Server MySQL
mysqladmin --user root -p shutdown
---
Lanciare un client mysql come utente usr1.
Il -p si usa se il db è protetto da password.
mysql -u usr1 -p
oppure
mysql -u usr1 -p NOMEDB
se si vuole accedere direttamente al DB chiamato NOMEDB
es.
1. mysql -u pippo -p
2. mysql -u pippo
3. mysql --user pippo --password
4. mysql -u root
5. mysql -u root -p
6. mysql -u pippo -p primoDB
---
Disconnettersi da mysql
QUIT
---
Eseguire int batch una sequenza di istruzioni salvate in un file di testo
SOURCE c:\myScript.sql
---
---
Creare un utente
CREATE USER 'usr1'@'%' IDENTIFIED BY 'psw1';
dove: 'usr1' è il nome utente
'psw1' è la password
'%' indica che l'utente può connettersi da qualunque luogo. Altre possibilità sono
'localhost' solo in locale,
'aaa.bbb.ccc.ddd' solo da questo indirizzo ip.
nota: in alternativa è possibile lavorare direttamente sulla tabella 'mysql.user'
---
Assegnare i privilegi di SUPERUSER ad un utente
GRANT ALL PRIVILEGES ON *.* TO 'usr1'@'%' IDENTIFIED BY 'psw1' WITH GRANT OPTION;
---
Assegnare tutti i privilegi sulla tabella tab1 all'utente usr1 con password psw1 e dalla macchina localhost :
GRANT ALL ON tab1.* TO 'usr1'@'localhost' IDENTIFIED BY 'psw1';
oppure se solo alcuni
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,CREATE VIEW ON tab1.* TO 'usr1'@'localhost' IDENTIFIED BY 'psw1';
---
Rendere effettive le modifiche ai privilegi degli utenti del DB
FLUSH PRIVILEGES;
---
---
Impostare lo storage engine di default (quando il server è già avviato)
SET storage_engine=INNODB
o
SET storage_engine=MYISAM
---
---
Creare un database
CREATE DATABASE nomedb;
---
Visualizzare la lista dei databases esistenti
SHOW DATABASES;
---
Entrare in un database
USE nomedb;
---
Creare una tabella
CREATE TABLE nometab (attr1 TIPO1 opt1, attr2 TIPO2 opt2,...);
note : 1. per la sintassi complata vedere
http://dev.mysql.com/doc/refman/5.0/en/create-table.html
2. per i tipi di dato fare riferimento a
http://dev.mysql.com/doc/refman/5.0/en/data-types.html
3. esempi di opt1 : NOT NULL
PRIMARY KEY
DEFAULT default_value
4. per impostare lo storage engine della tabella (diverso da quello di default)
CREATE TABLE t (i INT) ENGINE = INNODB;
---
Modificare una tabella
ALTER TABLE <nome-tabella>
ADD [CONSTRAINT] <def-Vincolo> |
DROP [CONSTRAINT] <nome-Vincolo> |
ADD COLUMN <def-Attributo> |
DROP COLUMN <nome-Attributo>
}
esempi:
ALTER TABLE Maternita
ADD primary key (madre,figlio),
ADD key (code),
ADD foreign key (madre) references Persone,
ADD CONSTRAINT foreign key (figlio) references Persone;
ALTER TABLE Libro
ADD CONSTRAINT denom_unica UNIQUE (totolo, autori);
ALTER TABLE Prestito
ADD CONSTRAINT libro_prestato FOREIGN KEY (id_libro) REFERENCES Libro(id_libro);
ALTER TABLE Prestito
ADD CONSTRAINT Utente_richiedente FOREIGN KEY (id_utente_richiedente) REFERENCES Utente(id_utente);
ALTER TABLE Prestito ENGINE = INNODB
nota : Il costutto SQL check non è supportato da MySQL 5.0.
In realtà codice contenente una check viene accettato, ma l'effetto della check sarà assolutamente nullo.
Esempi :
1. un libro ha un numero positivo di pagine
ALTER TABLE Libro
ADD CONSTRAINT NUM_PAGINE_POS CHECK (NUM_PAGINE > 0);
2. la data di termine di un prestito se esiste, ovvero se il prestito non è ancora in corso,
è successiva alla data di inizio
ALTER TABLE PRESTITO ADD CONSTRAINT ORDINAM_DATE_INIZIO_FINE CHECK (DATA_FINE IS NULL OR DATA_FINE >= DATA_INIZIO);
---
Visualizzare la lista delle tabelle del database corrente
SHOW TABLES;
---
Visualizzare la struttura di una tabella
DESCRIBE tab1;
---
Creare un vista
CREATE VIEW <nome_vista>
AS
<query>
---
---
Inserire una tupla completa in una tabella
INSERT INTO tab1
VALUES ('info-a1','info-a2','info-a3',...);
---
Inserire più di una tupla in una tabella (tutte complete)
INSERT INTO tab1
VALUES ('info-a1','info-a2','info-a3',...) ,
('info-b1','info-b2','info-b3',...) ,
...
('info-x1','info-x2','info-x3',...);
---
Inserire tuple in una tabella caricandole da un file di testo
LOAD DATA LOCAL INFILE '/path/file.txt' INTO TABLE tab1;
oppure
LOAD DATA LOCAL INFILE '/path/file.txt' INTO TABLE tab1;
LINES TERMINATED BY '\r\n';
per specificare che le linee terminano con il carattere '\r\n' come nei sistemi Windows.
note: 1. ogni linea del file di testo indica una tupla;
2. per separare 2 oggetti della stessa tupla si utilizza il separatore TAB;
3. per indicare un campo vuoto si indica con la stringa '\N'.
---
---
Eseguire un'interrogazione o query **********************DA COMLETARE
SELECT
FROM
[WHERE]
[GROUP BY]
Domenica, 14 Ottobre 2007
Unix Programming : Pipe e Fifo
/* PIPE */ // permettono la comunicazione tra processi relazionati (es. padre-figlio) int pipe(int fd[2]) // Invoca la creazione di una PIPE // fd: puntatore ad un array di due interi (in fd[0] viene restituito il descrittore di lettura della PIPE, // in fd[1] viene restituito il descrittore di scrittura della PIPE) // fd[0] e fd[1] possono essere usati da subito (senza open() ) come normali descrittori di file tramite le chiamate read() e write() // 1 in caso di fallimento /* NOTE: 1. Un processo lettore vede la �fine� della PIPE quando tutti i processi scrittori hanno chiuso il descrittore fd[1]. 2. La chiamata read() effettuata da un lettore restituisce 0 come notifica dell�evento che tutti gli scrittori hanno terminato il loro lavoro 3. Un processo scrittore che tenti di scrivere sul descrittore fd[1] quando tutte le copie del descrittore fd[0] sono state chiuse (cioè non ci sono lettori sulla PIPE) riceve il segnale SIGPIPE 4. NB: Per evitare deadlock è necessario che tutti i processi chiudano i descrittori di PIPE che non gli servono usando la close(). */ /* FIFO */ // permettono la comunicazione tra processi relazionati e non int mkfifo(char* name, int mode) // Invoca la creazione di una FIFO // name: puntatore ad una stringa che identifica il nome della FIFO da creare // mode: intero che specifica la modalità di creazione e permessi di accesso alla FIFO (in genere O_CREATE | 0666) // 1 in caso di fallimento, altrimenti un descrittore per l�accesso alla FIFO int unlink (const char * nomefifo) // elimina dal sistema la fifo. // NB: con la close chiudo la fifo ma non la elimino // 1 in caso di fallimento int open (const char * nomefifo,int FLAGS) // NB: è bloccante : un processo che tenta di aprirla in lettura (scrittura) viene bloccato // fino a quando un altro processo non la apre in scrittura (lettura). // FLAGS principali : O_RDWR, O_RDONLY, O_WRONLY, O_NONBLOCK (per rendere la open non bloccante) // 1 in caso di fallimento, altrimenti un descrittore per l�accesso al canale della FIFO /* NOTE: 1. 2. La chiamata read() effettuata da un lettore restituisce 0 come notifica dell�evento che tutti gli scrittori hanno terminato il loro lavoro 3. Un processo scrittore che tenti di scrivere sulla fifo quando non ci sono lettori sulla fifo riceve il segnale SIGPIPE 4. per gestire una chiusura inaspettata del programma che ha creato la pipe si usa catturare i seguenti segnali (la funz. disconnetti_pipe contiene una unlink) signal(SIGTERM, disconnetti_pipe); signal(SIGHUP, disconnetti_pipe); signal(SIGINT, disconnetti_pipe); per i processi che invece non haano creato la pipe è sufficiente gestire un SIGPIPE signal(SIGPIPE, esci_dal programma); */