|
|
|||
|
|
11/04/2009 |
|
|
|
|
|
In aceasta lucrare de laborator vor fi acoperite
urmatoarele probleme:
- Tehnologia Java ServerPages (JSP)
- Aplicatie Web realizata pe
arhitectura model-1 (cu JSP, fara servlet)
- Aplicatie Web realizata pe arhitectura model-2 (MVC)
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).
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
--> |
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;} %> |
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"); |
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”.
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).
Pentru exemplificare, vom folosi din nou clasa Orar, de aceasta data insa ca o componenta
JavaBeans, accesata la distanta prin intermediul JSP-urilor:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
package model; import java.beans.*; import java.io.Serializable; public class Orar implements Serializable
{ private String[] orar; // public Orar() { orar = new String[7]; // alocarea dinamica a spatiului pentru
tablou // popularea tabloului cu
valori orar[0] = "Luni este curs
TPI la seriile D si E, laborator TPI la seria E."; orar[1] = "Marti nu
sunt ore de TPI."; orar[2] = "Miercuri
este laborator TPI la seriile D si E."; orar[3] = "Joi este
laborator TPI la seria D."; orar[4] = "Vineri este
laborator TPI la seria D."; orar[5] = "Sambata nu
sunt ore de TPI."; orar[6] = "Duminica nu
sunt ore de TPI."; } public String getOrar(int zi) { // metoda accesor - getter return orar[zi]; // returneaza un element al tabloului } public void setOrar(int zi, String text) { // metoda accesor - setter orar[zi] =
text; // inlocuieste un element } } |
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 seriei, 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. |
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 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
<%@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 JSP acces orar (Model 1)</h1> <hr><form name="input"
action="PaginaJSP.jsp"
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> <jsp:useBean scope="session" id="orar" class="model.Orar" /> <% try { int zi =
Integer.parseInt(request.getParameter("zi")); // Daca
serviciul cerut e obtinere orar if (request.getParameter("serviciu").equals("getOrar")) {
out.println("<b>Orarul cerut:</b> <br>" + orar.getOrar(zi)); } // Daca serviciul cerut e modificare
orar else if
(request.getParameter("serviciu").equals("setOrar")) { String modificare = request.getParameter("modificare"); orar.setOrar(zi, modificare);
out.println("<b>Modificarea ceruta:</b>
<br>" + orar.getOrar(zi)); } } catch
(NumberFormatException ex) {} %> </body> </html> |
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 pe nodul proiectului AplicatieOrar2. 2. Se selecteaza Run pe nodul proiectului AplicatieOrar2. 3. Se utilizeaza pagina in diverse
moduri, testand serviciile obtinere si modificare. |
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).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package controler; import model.Orar; import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; public class ServletControler extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException { // Transformarea obiectului orar in atribut al sesiunii curente
pentru // salvarea starii lui HttpSession
ses = request.getSession(); Orar orar = (Orar)
ses.getAttribute("orar"); if (orar == null)
{ // Daca nu exista orarul salvat ca
atribut al sesiunii orar = new
Orar();
ses.setAttribute("orar", orar); } // Obtinerea
parametrilor introdusi de utilizator in formular int zi = Integer.parseInt(request.getParameter("zi")); RequestDispatcher
view; // Daca serviciul cerut e obtinere orar if
(request.getParameter("serviciu").equals("getOrar")) { view = request.getRequestDispatcher("RezultatObtinereOrar.jsp"); } // Daca serviciul cerut e
modificare orar else if
(request.getParameter("serviciu").equals("setOrar")) { String modificare =
request.getParameter("modificare"); orar.setOrar(zi, modificare); view =
request.getRequestDispatcher("RezultatModificareOrar.jsp"); } // Daca serviciul cerut nu e
recunoscut else { view = request.getRequestDispatcher("ServiciuNeimplementat.jsp"); } request.setAttribute("raspuns", orar.getOrar(zi)); view.forward(request, response); } protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException,
IOException { processRequest(request,
response); } protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException,
IOException { processRequest(request,
response); } } |
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. |
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 Package se elimina numele controler (daca acesta exista). Se apasa Next. 4. In zona.in zona HTML File
Name se scrie numele PaginaHTMLAcces (iar in zona Location
se selecteaza Web Pages). 5. 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. |
<%@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 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> <%@ 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 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> <%@ 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” %> |
In laborator: 1. Se selecteaza Build pe nodul proiectului AplicatieOrar2. 2. Se selecteaza Run 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.).
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.)
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)
Exemple simple
JSP si servlet (cod si instalare pe Tomcat): Tehnologia
Java Server Pages
JSP Quick Reference Guides:
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;
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); } } } |