danny block notes

martedì, 2 settembre 2008

JSP : Tag

Filed under: java,JSP,programming — danny @ 9:37 pm
Tags: ,
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>

venerdì, 9 maggio 2008

MySql 5

Filed under: mysql,programming — danny @ 9:43 pm
Tags: ,
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

Filed under: c,linux,programming — danny @ 4:29 pm
Tags: , , ,
/* 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);
*/

Blog su WordPress.com.