Documente Academic
Documente Profesional
Documente Cultură
Server Pages
În cele ce urmeaza voi prezenta modul de dezvoltare a unei aplicatii web cu ajutorul tehnologiei Java
Server Pages (JSP). Aplicaţia va fi construită în NetBeans, iar baza de date va fi dezvoltată în SGBD-ul MySql.
Figura 1
Pentru a crea diagram “database” am folosit aplicataia MySQL Workbench. Am folosit tool-ul
specializat din aplicatie, pentru a crea fiecare tabela in parte. Tehnica folosita a fost Drag & Drop.
Dupa alegerea celor adaugarea celor trei tabele, le-am redenumit : “continente”, “tari”, “orase”.
Am introdus coloanele dorite pentru fiecare tabela, mai jos fiind disponibila forma finala a diagramei.
(Figura 2 )
Figura 2
Pentru fiecare dintre cele 3 tabele am setat un PRIMARY KEY cu AUTO_INCREMENT. Astfel tabela:
continentete are ca si PK “idContinent” , tabela tari are ca si PK “idTari”, tabela orase are ca si PK “idOras” .
Figura 3
Dupa stabilirea PK-urilor pentru cele 3 tabele am setata asocierile dintre acestea. Astfel pentru tabelele
continentete şi tari se realizează asocierea 1:N, iar intre tabelele tari si orase se realizeaza asociera 1:M.
In urma asocierilor facute cu ajutorul tool-ului folosind Drag& Drop sau implementat si FOREIGN_KEY
pentru tabela tari si orase. Dupa cum se poate vedea in imaginea precedent.
Dupa crearea diagramei am putut trece la pasul crearii bazei de date database.
Astfel am folosit comanda Forward Engineer to Database pentru a crea baza de date pe un server local.
Figura 4
Serverul a fost creat in aceeasi aplicatie folosind optiunea MySQLConection, configuratiile fiind disponibile
in imagine urmatoare.
Figura 5
Dupa crearea bazei de date pe serverul localhost am exportat aceasta baza intr-un script pentru a-l putea
folosi ca si fisier .sql in crearea aplicatiei JSP. (Figura 6)
Figura 6
Dupa obtinerea fisierului database.sql, se poate incepe constructia aplicatiei Web cu JSP.(Figura 7)
Figura 7
Construirea aplicatiei JSP in NetBeans
Figura 8
In primul rand, dupa constructia bazei de date trebuie sa creeam conexiunea in IDE NetBeans, pentru a
avea acces in interiorul mediului de dezvoltare ala baza de date create in MySQL Workbench. Astfel, alegem
optiunea Service -> Database->click dreapta -> New Conection. Din fereastra aparuta alegem opriunea
MySQL (conector/ J drive) . Figura 9
Figura 9
Figura 10
Dupa acest pas vom putea vizualiza conexiunea in partea dreapta in dreptul pachetului Database.
In urma conexiunii la baza de date (apasand click dreapta-> Connect pe baza de date serverul tocmai
creadin ), merrgem la pasul urmator si anume creare tuturor fisierelor de tip .jsp si a clasei JavavBean , in
pachetul db . Urmand pasii tutorialului din Cursul 5,am trecut la editarea fiecarui fisier in parte.
In clasa JavaBean.java am scris metodele ce vor fi apelate de catrre fisierele jsp, metode de conectare,
deconectare la baza de date, metode de adaugare , vizualizare , modificare si stergere a datelor din tabele.
Acestea sunt operatii de tip CRUD, de lucru cu o baza de date.
String error;
Connection con;
public JavaBean() {
}
Am implementat 3 metode pentru adaugarea de date in cele trei tabele: adaugaContinent, adaugaTara,
adaugaOras
// Am implementat 3 metode pentru a vizulaiza datele corespondente fiecarei coloane ale celor trei
//tabele: vedeTabela, vedeTara, vedeOras.
//Am implimentat o metoda specifica pentru modificarea datelor dorite din tabel, aceasta modificare se va
//face pe linia selectata cu ajutorul unui marker in jsp
public void modificaTabela(String tabela, String IDTabela, int ID, String[] campuri, String[] valori) throws
SQLException, Exception {
String update = "update " + tabela + " set ";
String temp = ""; // cream variabila update de tip string ce preaia tabela pe care dorim sa o modificam
if (con != null) {
try {
for (int i = 0; i < campuri.length; i++) {
if (i != (campuri.length - 1)) {
temp = temp + campuri[i] + "='" + valori[i] + "', ";
} else {
temp = temp + campuri[i] + "='" + valori[i] + "' where " + IDTabela + " = '" + ID + "';";
} // realizarea modificarii tabelei prin suprascrierea vechilor date
}
update = update + temp;
// create a prepared SQL statement
Statement stmt;
stmt = con.createStatement();
stmt.executeUpdate(update);
} catch (SQLException sqle) {
error = "ExceptieSQL: Reactualizare nereusita; este posibil sa existe duplicate.";
throw new SQLException(error);
}
} else {
error = "Exceptie: Conexiunea cu baza de date a fost pierduta.";
throw new Exception(error);
} // erori aparute on urma nerealizarii modificarilor
} // end of modificaTabela()
// O alta metoda utila pentru determinarea Id liniei pe care dorim sa o modificam. Acesta metoda am
//particularizat-o pentru fiecare dintre cele trei tabele : intoarceLinieDupaId (aceasta este pentru tabela
//“continente”), intoarceTaraId, intoarceOrasId
public ResultSet intoarceLinieDupaId(String tabela, String denumireId, int ID) throws SQLException,
Exception {
ResultSet rs = null;
try {
// Execute query
String queryString = ("SELECT * FROM " + tabela + " where " + denumireId + "=" + ID + ";");
// preluam Id liniei dorite din tabela interogata prin variabila “tabela”
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs = stmt.executeQuery(queryString); //sql exception
} catch (SQLException sqle) {
error = "SQLException: Interogarea nu a fost posibila.";
throw new SQLException(error);
} catch (Exception e) {
error = "A aparut o exceptie in timp ce se extrageau datele.";
throw new Exception(error);
} // erori posibile in urma nerealizarii metodei
return rs;
} // end of intoarceLinieDupaId()
Incepem prin configurarea paginii index.html, fiind pagina pringipala a aplicatiei noastre.
<body>
<hr>
<hr>
<br/>
<h2 align="center"> Bun venit! Alege una dintre tabelele de mai jos! </h2>
<p align="center"> <a href="tabela_Continent.jsp"><b><strong>Continente</strong></b></a></p>
<p align="center"> <a href="tabela_Tara.jsp"><b><strong>Tari</strong></b></a></p>
<p align="center"> <a href="tabela_Oras.jsp"><b><strong>Orase</strong></b></a></p>
<br/>
<hr> // implementarea link-urilor catre tabela_Continent.jsp, tabela_Tara.jsp, tabela_Oras.jsp, pentru
adaugarea de date
<ul >
<li ><a href="modifica_Continent.jsp"><b><strong>Modifica Continent</strong></b></a></li>
</ul>
<ul >
<li><a href="modifica_Tara.jsp"><b><strong>Modifica Tara</strong></b></a></li>
</ul>
<ul >
<li><a href="modifica_Oras.jsp"><b><strong>Modifica Oras</strong></b></a></li>
</ul>
<hr> // implementarea link-urilor catre modifica_Continent.jsp, modifica_Tara.jsp, modifica_Oras.jsp,
pentru modificarea datelor din tabele
<hr>
<br/>
</body>
tabela_Continent
<body>
<h1 align="center"> Tabelă Continente:</h1>
<br/>
<p align="center"><a href="nou_Continent.jsp"><b>Adaugă un nou continent.</b></a> </p>
<form action="sterge_Continent.jsp" method="post"> // permite link catre pagina sterge_Contient
// activate ptin butonul Sterge
<table border="2" align="center">
<tr>
<td><b>Mark:</b></td>
<td><b>IdContinent:</b></td>
<td><b>Continent:</b></td>
//Setam coloanele pe care dorim sa le aibe tabela Continent
</tr>
<%
jb.connect();
ResultSet rs = jb.vedeTabela("continente");
int x;
while (rs.next()) {
x = rs.getInt("idContinent"); // preluam PK din tabela continente
%>
<tr>
<td><input type="checkbox" name="primarykey" value="<%= x%>" /></td><td><%= x%></td>
<td><%= rs.getString("Continent")%></td> // campuri specifice pentru scrierea datelor
<%
}
%>
</tr>
</table><br/>
<p align="center">
<input type="submit" value="Șterge liniile marcate"> // butonul care activeaza sterge_Continent
</p>
</form>
<%
rs.close(); // inchiderea conexiunii
jb.disconnect();
%>
<br/>
<p align="center">
<br/>
<a href="modifica_Continent.jsp"><b>Modifică continente</b></a>
// lnk catre pagina de modificari
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
</html>
tabela_Tara
<body>
<h1 align="center"> Tabelă Țări:</h1>
<br/>
<p align="center"><a href="nou_Tara.jsp"><b>Adaugă o nouă țară.</b></a> </p>
<form action="sterge_Tara.jsp" method="post"> // link catre pagina de stergere activat prin buton
<table border="1" align="center">
<tr>
<td><b>Mark:</b></td>
<td><b>IdȚară:</b></td>
<td><b>IdContinent:</b></td>
<td><b>CodȚară:</b></td>
<td><b>Țară:</b></td>
<td><b>Continent:</b></td>
<td><b>Suprafață (în km<sup>2</sup>):</b></td>
//Am ales coloanele care vor forma coponenta tabelei pe care dorim sa o vizualizam
</tr>
<%
jb.connect();
ResultSet rs = jb.vedeTara();
int x;
while (rs.next()) {
x = rs.getInt("idTara");
%>
<tr>
<td><input type="checkbox" name="primarykey" value="<%= x%>" /></td>
<td><%= x%></td>
<td><%= rs.getInt("idContinent_tara")%></td> // salvarea FK in database in tabela tari
<td><%= rs.getString("Cod_Tara")%></td>
<td><%= rs.getString("Tara")%></td>
<td><%= rs.getString("Continent")%></td>
<td><%= rs.getFloat("Suprafata")%></td>
//campuri pentru srierea datelor, corespunzatoare coloanelor alese mai sus
<%
}
%>
</tr>
</table><br/>
<p align="center">
<input type="submit" value="Șterge liniile marcate"> // buton care actioneaza stergerea
</p>
</form>
<%
rs.close();
jb.disconnect();
%>
<br/>
<p align="center">
<br/>
<a href="modifica_Tara.jsp"><b>Modifică țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
sterge_Continent
<body>
<%
String[] s = request.getParameterValues("primarykey");
jb.connect();
jb.stergeDateTabela(s, "continente", "idContinent");
jb.disconnect();
%>
// Stergerea se face in urma apelarii metodei stergeDateTabel, optinant mai intai PK (s)
<p align="center">
<br/>
<a href="tabela_Continent.jsp"><b>Mergi la tabela Continente</b></a>
// buton de acitune catre vizualizarea tabeleii
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
</html>
Incepem cu modificare fisierlor nou_Continent, nou_Tara, nou_Oras.
Mai jos avem codul sursa pentru nou_Oras
Adaugarea unui nou oras in functie de o tara adaugata in tabela tara, folosind astfelt asocierea 1:M (tari :
orase)
<body>
<%
int idtara;
String id, CodTara, Tara, Suprafata, Oras, Numar_loc;
id = request.getParameter("idTara");
Oras = request.getParameter("Oras");
Numar_loc = request.getParameter("Numar_locuitori");
if (id != null) {
jb.connect();
jb.adaugaOras(java.lang.Integer.parseInt(id), Oras, Numar_loc);
jb.disconnect();
%> // Setam variabile specific pentru fiecare din datele introduce
<tr>
<td align="right">Selectați țara:</td>
<td>
<SELECT NAME="idTara">
<%
while(rs1.next()){
idtara = rs1.getInt("idTara");
CodTara = rs1.getString("Cod_Tara");
Tara = rs1.getString("Tara");
%>
<OPTION VALUE="<%= idtara%>"><%= idtara%>,<%= CodTara%>,<%=
Tara%></OPTION>
<%
}
%>
</SELECT>
</td>
</tr>
// mai sus este implementat un meniu de selectie, astfel be baza FK din tabela
// orase : idTara, avem acces la datele din tabela tari , pe care le vom aduga si in
//tabela curenta
<tr>
<td align="right">Oraș:</td>
<td> <input type="text" name="Oras" size="30" /></td>
</tr>
<tr>
<td align="right">Număr de locuitori:</td>
<td> <input type="text" name="Numar_locuitori" size="30" /></td>
</tr>
</table>
<input type="submit" value="Adaugă oraș" />
</form>
<% // Adaugam date in fiecare coloanal din tabela Orase, si-anume: Oras si Numar_locuitori
}
%>
<br/>
<a href="nou_Oras.jsp"><b>Adaugă mai multe orașe</b></a> // link catre nou_Oras
<br/>
<br/>
<a href="tabela_Oras.jsp"><b>Mergi la tabela Orașe</b></a> // link catre tabela_Oras
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a> // link catre pagina principala
<br/>
</body>
<body>
<h1 align="center"> Tabelă Țări:</h1>
<br/>
<p align="center"><a href="nou_Tara.jsp"><b>Adaugă o nouă țară.</b></a></p>
<%
jb.connect();
ResultSet rs = jb.vedeTara();
int x;
while (rs.next()) {
x = rs.getInt("idTara"); // obtinerea PK pentru modificarea tabelei in urmatorea sintaxa
%>
<tr>
<td><input type="checkbox" name="primarykey" value="<%= x%>" /></td>
<td><%= x%></td>
<td><%= rs.getString("Cod_Tara")%></td>
<td><%= rs.getString("Tara")%></td>
<td><%= rs.getInt("idContinent_tara")%></td> //FK care leaga tabela continente de tabela tari
<td><%= rs.getString("Continent")%></td>
<td><%= rs.getFloat("Suprafata")%></td>
<%
}
%>
</tr>
</table><br/>
<p align="center">
<input type="submit" value="Modifică linia"> // butonul care determina modificarea si
//incarcarea datelor in baza de date in tabela tari
</p>
</form>
<%
jb.disconnect();%>
<br/>
<p align="center">
<a href="tabela_Tara.jsp"><b>Mergi la tabela Țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</p>
</body>
</html>
Incepem cu modificare fisierlor m1_Continent, m1_Tara, m1_Oras.
Mai jos avem codul sursa pentru m1_Tara
<%
jb.connect();
String Continent, CodTara, Tara, Suprafata;
Continent = rs.getString("Continent");
CodTara = rs.getString("Cod_Tara");
Tara = rs.getString("Tara");
Suprafata = rs.getString("Suprafata");
%>
<form action="m2_Tara.jsp" method="post"> // urmatoarea pagina accesata este m2_Tara
<table align="center">
<tr>
<td align="right">IdTara:</td>
<td> <input type="text" name="idTara" size="30" value="<%= aux%>" readonly/></td>
</tr>
<tr>
<td align="right">IdContinent:</td> // preluam FK pe baza caruia avem acces la datele dein
//tabela continente ce vor fi adaugate in tabela tari prin meniul de mai jos
<td>
<SELECT NAME="idContinent">
<%
while (rs1.next()) {
idcontinent = rs1.getInt("idContinent");
Continent = rs1.getString("Continent");
if (idcontinent != id1) {
%>
<OPTION VALUE="<%= idcontinent%>"><%= idcontinent%>, <%= Continent%></OPTION>
<%
} else {
%>
<OPTION selected="yes" VALUE="<%= idcontinent%>"><%= idcontinent%>, <%=
Continent%></OPTION>
<%
}
}
%>
</SELECT>
</td>
</tr>
// modificam datele din fiecare coloanal a tabelei
<tr>
<td align="right">Cod Țară:</td>
<td> <input type="text" name="Cod_Tara" size="30" value="<%= CodTara%>"/></td>
</tr>
<tr>
<td align="right">Țară:</td>
<td> <input type="text" name="Tara" size="30" value="<%= Tara%>"/></td>
</tr>
<tr>
<td align="right">Suprafață (în km<sup>2</sup>):</td>
<td> <input type="text" name="Suprafata" size="30" value="<%= Suprafata%>"/></td>
</tr>
</table><p align="center">
<input type="submit" value="Modifică linia">
</p>
</form>
<p align="center"">
<a href="tabela_Tara.jsp"><b>Mergi la tabela Țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</body>
<%
rs.close();
rs1.close();
jb.disconnect();
%>
Incepem cu modificare fisierlor m2_Continent, m2_Tara, m2_Oras.
Mai jos avem codul sursa pentru m2_Tara
<body>
<h1 align="center"> Tabelă Țări:</h1>
<br/>
<p align="center"><a href="nou_Tara.jsp"><b>Adaugă o nouă țară.</b></a></p>
<%
jb.connect();
int aux = java.lang.Integer.parseInt(request.getParameter("idTara"));
String idContinent = request.getParameter("idContinent");
String Tara = request.getParameter("Tara");
String CodTara = request.getParameter("Cod_Tara");
String Suprafata = request.getParameter("Suprafata");
// crearea de variabile pentru datele noi introduse
String[] valori = {idContinent, CodTara, Tara, Suprafata};
String[] campuri = {"idContinent", "Cod_Tara", "Tara", "Suprafata"};
jb.modificaTabela("tari", "idTara", aux, campuri, valori); // se apeleaza metoda modificaTabela
//pentru a aduga datele noi introduse de user
jb.disconnect();
%>
<h1 align="center">Modificările au fost efectuate !</h1>
<p align="center">
<a href="tabela_Tara.jsp"><b>Mergi la tabela Țări</b></a>
<br/>
<br/>
<a href="index.html"><b>Pagină principală</b></a>
<br/>
</body>
</html>
Bibliografie:
- Materialele din cursul de PAI, aplicatile create si puse la dispozitie in : Curs_5, Curs_6