Sunteți pe pagina 1din 14

Laborator TPI - 2009 (draft) 2008-2009 1/14 4/11/2009 2009_TPI_Lab_4_vers01.

htm

Catedra de Telecomunicatii

SwRTc ISw
POO an II 11/04/2009

Tehnologii de Programare in Internet


ISC an IV
(TPI)

Laborator 4
Programarea Web utilizand tehnologia Java ServerPages (JSP)

4.1. Descrierea laboratorului


In aceasta lucrare de laborator vor fi acoperite urmatoarele probleme:
- Tehnologia Java ServerPages (JSP), Crearea aplicatiilor Web bazate pe JSP utilizand NetBeans
- Teme de casa
- Anexa

4.2. Tehnologia Java ServerPages


4.2.1. Introducere in JSP
Servlet-urile folosite in lucrarea anterioara au unele dezavantaje. In cazul utilizarii lor trebuie
scrise String-uri complexe (care includ caractere escape, de exemplu \" in locul fiecarei ghilimele
care trebuia trimisa pe flux pentru a face parte din continutul HTML) pentru fiecare linie de cod
HTML care urma sa ii fie trimisa clientului. Sunt necesare cunostinte de Java pentru a scrie intreg
codul unui servlet. In plus, exista si alte tehnologii concurente pe piata, ca de exemplu ASP (Active
Server Pages), care le permit programatorilor sa creeze mai usor continut dinamic.
Pentru ca puterea servlet-urilor Java sa fie pusa la dispozitia celor ce se ocupa de dezvoltare Web
fara a-i obliga sa invete Java a aparut specificatia Java ServerPages (JSP), care combina puterea si
extensibilitatea limbajului Java cu simplitatea si usurinta de folosire a scripturilor pe baza de
etichete.
O pagina JSP este un document text ce contine 2 tipuri de text: static, ce poate fi exprimat in
orice tip de format bazat pe text (HTML, WML, XML, etc.), si continutul JSP propriu-zis altfel spus
dinamic.
Pentru a se ajunge de la continutul unei pagini JSP la continut generat dinamic se parcurg
trei etape:
- translatia, in care pagina JSP este transformata de catre containerul de JSP-uri intr-un servlet (de
ex. pagina.jsp este translatata in pagina_jsp.java) realizata doar atunci cand servlet-ul nu a fost
anterior generat sau atunci cand servlet-ul este mai vechi decat pagina JSP (vezi si anexa)
- compilarea, in care servletul obtinut la primul pas este compilat de catre containerul de JSP-uri
(de ex. Din pagina_jsp.java se obtine prin compilare pagina_jsp.class) realizata doar atunci cand
containerul a generat un nou servlet
- executia (prelucrarea cererii), in care cererile catre pagina JSP sunt directionate catre servlet
(care va genera raspunsul).
Laborator TPI - 2009 (draft) 2008-2009 2/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

4.2.2. Elemente de limbaj JSP

Comentariile din paginile JSP sunt de doua feluri:


- comentarii JSP propriu-zise, care nu ajung in paginile generate dinamic:
<%-- Comentariu JSP propriu-zis --%>

- comentarii SGML (HTML, WML, XML), care ajung in paginile generate dinamic:
<!-- Comentariu HTML -->
Laborator TPI - 2009 (draft) 2008-2009 3/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

Elementele constitutive ale sintaxei JSP sunt tiparul (template text HTML, WML, XML) si
elementele JSP:
- directivele,
- elementele de scripting si
- actiunile (vezi si JSP Quick Reference Card).

Directivele sunt elemente JSP care furnizeaza informatii globale pentru faza de translatie (se
adreseaza containerului). De exemplu, directiva page specifica atribute ale paginii generate, cum ar fi
bibliotecile importate sau tipul de continut generat.
<%-- import clasa biblioteca --%>
<%@ page import=java.util.Date %>

<%-- tip de continut generat --%>


<%@ page contentType=text/html %>

Directiva include specifica includerea continutului unui fisier in continutul celui curent in faza de
translatie (anterioara compilarii):
<%-- includere continut fisier --%>
<%@ include file=altJSP.jsp %>

Elementele JSP, inclusiv directivele, pot fi specificate si folosind sintaxa echivalenta de tip
XML:
<%-- includere continut fisier format XML --%>
<jsp:directive.include file=altJSP.jsp %>

Actiunile sunt elemente JSP care furnizeaza informatii pentru faza de executie (se adreseaza
containerului). De exemplu, actiunea include specifica includerea continutului unui fisier in continutul
celui curent in faza de executie (dupa compilare):
<%-- includere continut fisier in timpul executiei --%>
<jsp:include page=altJSP.jsp %>

Actiunea useBean conduce la instantierea unui obiect dintr-o clasa JavaBean (cu rol de helper,
model, etc.) specificata (prin class) si cu nume al referintei specificat (prin id) care va putea fi
utilizat apoi prin intermediul referintei:
<%-- instantiere obiect JavaBean --%>
<jsp:useBean id=orar class=model.Orar %>

Elementele de scripting sunt elemente JSP cu ajutorul carora se include cod Java in pagina
(urmand ca acesta sa ajunga nemodificat in codul servletului obtinut prin translatie).
Exista 3 categorii de astfel de elemente:
- declaratiile,
- expresiile si
- scriptlet-urile.

Declaratiile introduc metode (situatie rar intalnita) si campuri (variabile instanta - care nu sunt
thread safe) ale servlet-ului (sintaxa include caracterul ! care poate fi interpretat ca atentie):
<%-- declaratie variabila instanta a servlet-ului --%>
<%! private String s; %>
<%-- declaratie metoda a servlet-ului --%>
<%! public String getS() {return s;} %>
Laborator TPI - 2009 (draft) 2008-2009 4/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

Expresiile Java ajung sa fie evaluate in codul servlet-ului obtinut prin translatie (spre deosebire de
declaratii si scrptlets, sintaxa nu include caracterul ;):
<%-- expresie --%>
<%= 2*a*b %>

Un scriptlet este o secventa de instructiuni Java care ajung sa fie incluse nemodificate in codul
servlet-ului obtinut prin translatie (variabilele declarate in interiorul lor sunt locale):
<%-- scpriptlet --%>
<%
String user = null; // variabila locala
username = request.getParameter("user"); // request este un obiect implicit
%>

Servlet-urile si JSP-urile pot delega executia catre alte servlet-uri si JSP-uri folosind interfata
RequestDispatcher si o sintaxa de genul:
RequestDispatcher view = request.getRequestDispatcher("pagina.jsp");
view.forward(request, response);

Pentru a-si transmite informatii in astfel de situatii, servlet-urile si JSP-urile care deleaga
executia pot crea atribute ale cererii (in cazul JSP-ului obiectul implicit numit request, in cazul
servlet-ului obiectul request de tip HTTPServletRequest) carora le dau valori:
request.setAttribute("raspuns", "Comanda a fost trimisa");

Servlet-urile si JSP-urile carora li se deleaga executia pot obtine valorile acestor atribute:
String raspuns = request.getAttribute("raspuns");

4.2.3. Arhitecturi de baza ale aplicatiilor Web bazate pe JSP

Principalul avantaj al JSP-urilor consta in introducerea template-urilor de continut static


(posibil de creat in formate non-HTML: WML, XML) care pot fi realizate de dezvoltatori specializati
in proiectarea interfetelor Web.
Deoarece insa partea de prelucrare a informatiei necesara generarii de continut dinamic este mai
greu de scris in JSP, si este preferabil sa fie separata pentru a fi scrisa de programatori Java, s-a trecut
rapid de la lucrul exclusiv cu pagini JSP (arhitectura numita model-0) la delegarea sarcinilor de
stocare si prelucrare catre coduri Java care pot fi clase Java clasice (POJO Plain Old Java
Objects) sau componente JavaBeans. Arhitectura care a rezultat poarta numele de model-1.
Laborator TPI - 2009 (draft) 2008-2009 5/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

O forma de delegare a sarcinilor de stocare si prelucrare catre coduri Java a fost folosita si in
cazul aplicatiei Web cu servlet-uri de la laboratorul anterior (clasa Orar incorporand parte din
prelucrarea si stocarea datelor). Aceasta arhitectura este potrivita pentru aplicatii Web mici.

Pentru aplicatii Web mari sunt necesare o mai buna gestiune a sistemului, o mai buna separare a
responsabilitatilor de dezvoltare si o mai buna specializare a tehnologiilor utilizate. Acest avans a fost
obtinut prin introducerea arhitecturii care poarta numele de model-2 sau MVC (model-view-
controler) in care se folosesc 3 categorii de componente realizate cu tehnologii diferite:
- controlerul (realizat in general cu un servlet) primeste cererile, apeleaza la model pentru a
realiza actualizarea datelor de stare si prelucrarile necesare aplicatiei, si in final deleaga
prezentarea catre componente specializate
- modelul (realizat sub forma de componente JavaBeans) se ocupa de pastrarea datelor (starii) si
de prelucrarile necesare,
- view-ul este format din componente de prezentare (in general pagini JSP) care sunt folosite
pentru a genera continutul raspunsului.

Dezvoltarea unei astfel de aplicatii poate fi realizata modular de catre


- specialisti in servlet-uri,
- specialisti in proiectare Web si scripting JSP (inclusiv utilizare si dezvoltare de biblioteci
de tag-uri) si
- specialisti in proiectare si programare OO (orientata spre obiecte).
Laborator TPI - 2009 (draft) 2008-2009 6/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

4.3. Crearea aplicatiilor Web bazate pe JSP-uri utilizand NetBeans


4.3.1. Aplicatie Web realizata pe arhitectura model-1 (cu JSP, fara servlet)
Pentru exemplificare, vom folosi din nou clasa Orar, de aceasta data insa ca o componenta
JavaBeans, accesata la distanta prin intermediul JSP-urilor:
1 package model;
2
3 import java.beans.*;
4 import java.io.Serializable;
5
6 public class Orar implements Serializable {
7 private String[] orar; // camp ascuns (starea obiectului)
8
9 public Orar() {
10 orar = new String[7]; // alocarea dinamica a spatiului pentru tablou
11 // popularea tabloului cu valori
12 orar[0] = "Luni este curs TPI la seriile D si E, laborator TPI la seria E.";
13 orar[1] = "Marti nu sunt ore de TPI.";
14 orar[2] = "Miercuri este laborator TPI la seriile D si E.";
15 orar[3] = "Joi este laborator TPI la seria D.";
16 orar[4] = "Vineri este laborator TPI la seria D.";
17 orar[5] = "Sambata nu sunt ore de TPI.";
18 orar[6] = "Duminica nu sunt ore de TPI.";
19 }
20 public String getOrar(int zi) { // metoda accesor - getter
21 return orar[zi]; // returneaza un element al tabloului
22 }
23 public void setOrar(int zi, String text) { // metoda accesor - setter
24 orar[zi] = text; // inlocuieste un element
25 }
26 }
In laborator:
1. Se deschide NetBeans IDE. Se sterg toate proiectele anterior deschise, cu click dreapta in
fereastra Projects pe nodul fiecarui proiectul, selectand apoi Delete, si confirmand ca doriti sa fie
sterse sursele Java.
2. Se creaza un nou proiect cu File > New Project... (sau Ctrl-Shift-N).
3. La Categories se selecteaza Web, la Projects se selecteaza Web Application, si se apasa Next.
4. La Project Name se scrie numele ales pentru noul proiect, AplicatieOrar2, la Project
Location se selecteaza subdirectorul corespunzator serie, grupei si subgrupei proprii (calea va fi de
genul: D:\TPI\seriaD\434\pare). Se apasa Next.
5. La Server se selecteaza Apache Tomcat 6.0.16. Se apasa Finish.
Laborator TPI - 2009 (draft) 2008-2009 7/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

Se poate observa ca Orar face parte dintr-un pachet de clase intitulat model si implementeaza
interfata Serializable (asa incat starea obiectelor Orar poate fi persistata local sau poate fi transferata
in retea folosind RMI).
In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza JavaBeans Objects, in zona FileTypes se selecteaza JavaBeans
Component. Se apasa Next.
3. In zona.in zona Class Name se scrie numele Orar, in zona Package se scrie numele model.
4. Se inlocuieste codul generat automat cu codul de mai sus.

O pagina JSP (PaginaJSP.jsp) care sa permita accesul la obiecte Orar si sa realizeze


sarcinile aplicatiei (pastrand pe cat posibil formatul de la lucrarea anterioara) ar putea fi organizata
astfel:
- un template (formularul pentru acces) preluat din continutul paginii HTML, care reprezinta
partea statica,
- obiectul clasei Orar, care este instantiat cu ajutorul unei actiuni JSP si accesibil la nivel de
sesiune (efectul fiind similar utilizarii HTTPSession),
- un scriptlet care decide si genereaza continut dinamic ca efect al accesului prin formular,
1 <%@page contentType="text/html"%>
2 <%@page pageEncoding="UTF-8"%>
3 <html>
4 <head>
5 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
6 <title>JSP Page</title>
7 </head>
8 <body>
9
10 <h1>Pagina JSP acces orar (Model 1)</h1>
11 <hr><form name="input" action="PaginaJSP.jsp" method="get">
12 <input type="radio" name="zi" checked="checked" value="0"> Luni
13 <br> <input type="radio" name="zi" value="1"> Marti
14 <br> <input type="radio" name="zi" value="2"> Miercuri
15 <br> <input type="radio" name="zi" value="3"> Joi
16 <br> <input type="radio" name="zi" value="4"> Vineri
17 <br> <input type="radio" name="zi" value="5"> Sambata
18 <br> <input type="radio" name="zi" value="6"> Duminica
19 <hr>
20 <input type="radio" name="serviciu" checked="checked" value="getOrar">
21 Obtinere orar
22 <br><input type="radio" name="serviciu" value="setOrar"> Modificare orar
23 <input type="text" name="modificare" value="">
24 <input type="submit" value="Trimite">
25 </form>
26 <hr>
27 <jsp:useBean scope="session" id="orar" class="model.Orar" />
28 <%
29 try {
30 int zi = Integer.parseInt(request.getParameter("zi"));
31 // Daca serviciul cerut e obtinere orar
32 if (request.getParameter("serviciu").equals("getOrar")) {
33 out.println("<b>Orarul cerut:</b> <br>" + orar.getOrar(zi));
34 }
35 // Daca serviciul cerut e modificare orar
36 else if (request.getParameter("serviciu").equals("setOrar")) {
37 String modificare = request.getParameter("modificare");
38 orar.setOrar(zi, modificare);
39 out.println("<b>Modificarea ceruta:</b> <br>" + orar.getOrar(zi));
40 }
41 } catch (NumberFormatException ex) {}
42 %>
43
44 </body>
45 </html>
Laborator TPI - 2009 (draft) 2008-2009 8/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

Pagina JSP se auto-refera, asa incat in cazul primei accesari (deoarece nu a fost in prealabil
selectata nici o zi) este necesara tratarea exceptia de tip NumberFormatException.
De asemenea, nu mai este necesara existenta unei pagini HTML care sa contina formularul
pentru accesul la servlet (acesta facand parte din pagina JSP).
In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza Web si in zona FileTypes se selecteaza JSP. Se apasa Next.
3. In zona JSP File Name se scrie numele PaginaJSP. Se apasa Next.
4. Se inlocuieste codul generat automat pentru PaginaJSP.jsp cu codul de mai sus.
5. Se inlocuieste codul generat automat al fisierului index.jsp cu codul de mai jos.
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Pagina Index</h1>
<hr>
<a href="PaginaJSP.jsp">Pagina JSP initiala (Model 1)</a>
<hr>
</body>
</html>

In laborator:
1. Se selecteaza Build Project pe nodul proiectului AplicatieOrar2.
2. Se selecteaza Run Project pe nodul proiectului AplicatieOrar2.
3. Se utilizeaza pagina in diverse moduri, testand serviciile obtinere si modificare.

4.3.2. Aplicatie Web realizata pe arhitectura model-2 (MVC)

Vom crea un servlet cu rol de controler (ServletControler), care va primi cererea HTTP (4,
5), va accesa informatiile din Orar (6) si le va pasa (8) prin intermediul unui atribut nou (7) al
cererii catre o pagina JSP (9) selectata in functie de valoarea unui parametru din formularul
cererii, pagina care va genera raspunsul catre client (10).
Laborator TPI - 2009 (draft) 2008-2009 9/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

1 package controler;
2
3 import model.Orar;
4
5 import java.io.*;
6 import java.net.*;
7
8 import javax.servlet.*;
9 import javax.servlet.http.*;
10
11 public class ServletControler extends HttpServlet {
12
13 protected void processRequest(HttpServletRequest request,
14 HttpServletResponse response) throws ServletException, IOException {
15
16 // Transformarea obiectului orar in atribut al sesiunii curente pentru
17 // salvarea starii lui
18 HttpSession ses = request.getSession();
19 Orar orar = (Orar) ses.getAttribute("orar");
20 if (orar == null) { // Daca nu exista orarul salvat ca atribut al sesiunii
21 orar = new Orar();
22 ses.setAttribute("orar", orar);
23 }
24
25 // Obtinerea parametrilor introdusi de utilizator in formular
26 int zi = Integer.parseInt(request.getParameter("zi"));
27
28 RequestDispatcher view;
29
30 // Daca serviciul cerut e obtinere orar
31 if (request.getParameter("serviciu").equals("getOrar")) {
32 view = request.getRequestDispatcher("RezultatObtinereOrar.jsp");
33 }
34
35 // Daca serviciul cerut e modificare orar
36 else if (request.getParameter("serviciu").equals("setOrar")) {
37 String modificare = request.getParameter("modificare");
38 orar.setOrar(zi, modificare);
39 view = request.getRequestDispatcher("RezultatModificareOrar.jsp");
40 }
41
42 // Daca serviciul cerut nu e recunoscut
43 else {
44 view = request.getRequestDispatcher("ServiciuNeimplementat.jsp");
45 }
46
47 request.setAttribute("raspuns", orar.getOrar(zi));
48
49 view.forward(request, response);
50 }
51 protected void doGet(HttpServletRequest request, HttpServletResponse response)
52 throws ServletException, IOException {
53 processRequest(request, response);
54 }
55 protected void doPost(HttpServletRequest request, HttpServletResponse response)
56 throws ServletException, IOException {
57 processRequest(request, response);
58 }
59 }

In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza Web si in zona FileTypes se selecteaza Servlet. Se apasa Next.
3. In zona Class Name se scrie numele ServletControler, in zona Package se pastreaza
numele controler. Se apasa Next.
4. La Configure Servlet Deployment se precizeaza numele intern (Servlet Name) ca fiind
servlet iar adresa URL (URL Pattern) ca fiind /orar.do. Se apasa Finish.
5. Se inlocuieste codul generat automat pentru ServletControler cu codul de mai sus.
Laborator TPI - 2009 (draft) 2008-2009 10/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

Va fi adaugata o pagina HTML (PaginaHTMLAcces) care contine formularul pentru accesul


la servletul controler, reutilizabil si in paginile JSP (prin includere):
In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza Web si in zona FileTypes se selecteaza HTML, se apasa Next.
3. In zona.in zona HTML File Name se scrie numele PaginaHTMLAcces (iar in zona Location se
selecteaza Web Pages).
4. Se inlocuieste codul generat automat cu codul de mai jos.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Acces orar</title>
</head>
<body>
<h1>Formular HTML acces orar</h1>
<hr><form name="input" action="orar.do" method="get">
<input type="radio" name="zi" checked="checked" value="0"> Luni
<br> <input type="radio" name="zi" value="1"> Marti
<br> <input type="radio" name="zi" value="2"> Miercuri
<br> <input type="radio" name="zi" value="3"> Joi
<br> <input type="radio" name="zi" value="4"> Vineri
<br> <input type="radio" name="zi" value="5"> Sambata
<br> <input type="radio" name="zi" value="6"> Duminica
<hr><input type="radio" name="serviciu" checked="checked" value="getOrar">
Obtinere orar
<br> <input type="radio" name="serviciu" value="setOrar"> Modificare orar
<input type="text" name="modificare" value="">
<input type="submit" value="Trimite">
</form><hr>
</body>
</html>

In laborator:
1. Se inlocuieste codul generat automat al fisierului index.jsp cu codul de mai jos.
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Pagina Index</h1>
<hr>
<a href="PaginaJSP.jsp">Pagina JSP initiala (Model 1)</a>
<hr>

<a href="PaginaHTMLAcces.html">Formular HTML acces orar (Model 2) </a>


<hr>
</body>
</html>

Acum vor fi adaugate paginile JSP care vor include formularul pentru accesul la servlet, cate
una pentru fiecare dintre cele 3 cazuri:
- daca serviciul cerut e obtinere orar (RezultatObtinereOrar)
In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza Web si in zona FileTypes se selecteaza JSP. Se apasa Next.
3. In zona JSP File Name se scrie numele RezultatObtinereOrar. Se apasa Next.
4. Se inlocuieste codul generat automat cu codul de mai jos.
Laborator TPI - 2009 (draft) 2008-2009 11/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%@ include file="PaginaHTMLAcces.html" %>

<b>Orarul cerut:</b> <br> <%=request.getAttribute("raspuns")%>


</body>
</html>

- daca serviciul cerut e modificare orar (RezultatModificareOrar)


In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza Web si in zona FileTypes se selecteaza JSP. Se apasa Next.
3. In zona JSP File Name se scrie numele RezultatModificareOrar. Se apasa Next.
4. Se inlocuieste codul generat automat cu codul de mai sus.
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%@ include file="PaginaHTMLAcces.html" %>

<b>Modificarea ceruta:</b> <br> <%=request.getAttribute("raspuns")%>


</body>
</html>

- daca serviciul cerut nu e recunoscut (ServiciuNeimplementat)


In laborator:
1. Se adauga un nou fisier sursa cu File > New File... (sau Ctrl- N).
2. In zona Categories se selecteaza Web si in zona FileTypes se selecteaza JSP. Se apasa Next.
3. In zona JSP File Name se scrie numele ServiciuNeimplementat. Se apasa Next.
4. Se inlocuieste codul generat automat cu codul de mai sus.
<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<%@ include file="PaginaHTMLAcces.html" %>

<b>Serviciul cerut nu este implementat</b> <br>


</body>
</html>

Directiva include specifica includerea statica a continutului unui fisier (JSP sau HTML) in
continutul celui curent in faza de translatie (anterioara compilarii):
<%-- includere continut fisier statica (in timpul translatiei sau compilarii) --%>
<%@ include file=altJSP.jsp %>
Laborator TPI - 2009 (draft) 2008-2009 12/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

In laborator:
1. Se selecteaza Build Project pe nodul proiectului AplicatieOrar2.
2. Se selecteaza Run Project pe nodul proiectului AplicatieOrar2.
3. Se utilizeaza pagina in diverse moduri, testand serviciile obtinere si modificare.

In codurile de mai sus se regasesc avantajele arhitecturii MVC si sunt exemplificate mai multe
elemente sintactice si mecanisme oferite de paginile JSP (delegare servlet catre JSP, includere de
continut static, etc.).

4.4. Teme pentru acasa (inclusiv teme suplimentare)


4.4.1. Tema de casa (miniproiect)
Fiecare grup de 2 studenti ai unei subgrupe (cei 2 studenti care lucreaza la acelasi calculator in
cadrul laboratorului)
- pornind de la clasa aleasa la lucrarea trecuta (sau o alta clasa auto-propusa) pe post de
produs intr-un magazin virtual:
PC Laptop
Proiector Smartphone
Carte Masina
TV Copiator
ConsolaJocuri CameraVideo
Bicicleta Reportofon
DVDPlayer Imprimanta
- si de la servlet-ul creat ca tema de casa dupa modelul de la lucrarea trecuta
(ServletOrarFinal),
- va continua dezvoltarea aplicatiei Web
- prin adaugarea unor noi servleturi, pagini JSP si elemente de model, si
- prin reorganizarea codului pe model 1 sau 2,
in directia crearii unui magazin virtual, adaugand noi servicii cum ar fi:
selectarea unor produse,
configurarea parametrilor unor produse,
crearea unui cos de produse, etc.)
Laborator TPI - 2009 (draft) 2008-2009 13/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

Anexa
1. Resurse suplimentare privind JSP-urile (si NetBeans IDE)

De la www.javapassion.com (Java EE Programming (with Passion!)):


LAB-4003: JSP Basics (arhiva 4003_jspbasics.zip)
LAB-4008: JSP 2.0 Custom Tags (arhiva 4008_jsp20tags.zip)
LAB-4015: JSTL (JSP Tag Library) (arhiva 4015_jstlexamples.zip)
LAB-4016 Building Bookstore Sample Apps (arhiva 4016_jspbookstore.zip)

2. Alte resurse privind JSP

Exemple simple JSP si servlet (cod si instalare pe Tomcat): Tehnologia Java Server Pages
JSP Quick Reference Guides:
card20.pdf,
JSP Quick Reference Card.pdf

3. Codul servlet-ului RezultatObtinereOrar_jsp.java


package org.apache.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class RezultatObtinereOrar_jsp extends org.apache.jasper.runtime.HttpJspBase


implements org.apache.jasper.runtime.JspSourceDependent {

private static java.util.List _jspx_dependants;

static {
_jspx_dependants = new java.util.ArrayList(1);
_jspx_dependants.add("/PaginaHTMLAcces.html");
}
public Object getDependants() {
return _jspx_dependants;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {

JspFactory _jspxFactory = null;


PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;

try {
_jspxFactory = JspFactory.getDefaultFactory();
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();
_jspx_out = out;
Laborator TPI - 2009 (draft) 2008-2009 14/14 4/11/2009 2009_TPI_Lab_4_vers01.htm

out.write("\n");
out.write("\n");
out.write("\n");
out.write("<html>\n");
out.write(" <head>\n");
out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
out.write(" <title>JSP Page</title>\n");
out.write(" </head>\n");
out.write(" <body>\n");
out.write(" ");
out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n");
out.write("<html>\n");
out.write(" <head>\n");
out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
out.write(" <title>Acces orar</title>\n");
out.write(" </head>\n");
out.write(" <body>\n");
out.write(" <h1>Formular HTML acces orar</h1>\n");
out.write(" <hr><form name=\"input\" action=\"orar.do\" method=\"get\">\n");
out.write(" <input type=\"radio\" name=\"zi\" checked=\"checked\" value=\"0\"> Luni\n");
out.write(" <br> <input type=\"radio\" name=\"zi\" value=\"1\"> Marti\n");
out.write(" <br> <input type=\"radio\" name=\"zi\" value=\"2\"> Miercuri\n");
out.write(" <br> <input type=\"radio\" name=\"zi\" value=\"3\"> Joi\n");
out.write(" <br> <input type=\"radio\" name=\"zi\" value=\"4\"> Vineri\n");
out.write(" <br> <input type=\"radio\" name=\"zi\" value=\"5\"> Sambata\n");
out.write(" <br> <input type=\"radio\" name=\"zi\" value=\"6\"> Duminica\n");
out.write("<hr><input type=\"radio\" name=\"serviciu\" checked=\"checked\" value=\"getOrar\"> \n");
out.write(" Obtinere orar\n");
out.write(" <br> <input type=\"radio\" name=\"serviciu\" value=\"setOrar\"> Modificare orar\n");
out.write(" <input type=\"text\" name=\"modificare\" value=\"\">\n");
out.write(" <input type=\"submit\" value=\"Trimite\">\n");
out.write(" </form><hr>\n");
out.write(" </body>\n");
out.write("</html>\n");
out.write(" \n");
out.write(" \n");
out.write(" <b>Orarul cerut:</b> <br> ");
out.print(request.getAttribute("raspuns"));
out.write("\n");
out.write(" </body>\n");
out.write("</html>\n");
}
catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (out != null && out.getBufferSize() != 0)
out.clearBuffer();
if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);
}
}
finally {
if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context);
}
}
}

S-ar putea să vă placă și