Sunteți pe pagina 1din 45

Programare distribuita

Java Server Pages (JSP)

Tehnologia JSP
Partea 1 Ciclu de viata Elemente de scripting expresii, scripleti, declaratii, variabile predefinite Directive import, content-type

JSP: introducere
import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class ExempluServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Exemplu Servlet</title>"); out.println("</head>"); out.println("<body><p>"); out.println(Data curenta pe server este"); out.println(...."); out.println(afisata acum: + java.util.Date()); out.println(</p></body>"); out.println("</html>"); } }

JSP: introducere
intr-un servlet o parte importanta a codului este compusa din instructiuni out.println() pentru generarea codului HTML o pagina JSP poate fi vazuta ca o modalitate de a realiza un servlet pentru generarea de cod HTML ideea consta in a scrie cod HTML si de a insera, cu ajutorul unor marcaje speciale, instructiuni Java in final se genereaza un servlet

Exemplu: exemplu.jsp
<html> <head> <title>Exemplu Servlet</title> </head> <body> <p>Data curenta pe server este .... afisata acum: <%= new java.util.Date() %> </p> </body> </html>

Pagina JSP
JSP reprezinta o alta modalitate de a scrie o clasa Java de tip servlet ideea fundamentala este de a interclasa codul HTML cu instructiuni Java si de a permite unui program sa translateze pagina intr-o clasa de tip servlet translatarea se realizeaza in momentul in care un client cere pentru prima data pagina JSP translatarea implica apoi compilarea si incarcarea clasei rezultate de catre container

JSP: ciclul de viata


in momentul in care containerul primeste cererea pentru o pagina JSP, se cauta clasa cu acelasi nume:
daca aceasta clasa nu exista, containerul translateaza automat

codul JSP in codul Java al unei clase de tip container, il compileaza, il incarca in memorie si creeaza o instanta careia ii transmite cererea HTTP venita de la client in cazul cererilor ulterioare containerul verifica versiunea codului: daca nu s-au produs modificari asupra acestuia se apeleaza instanta ultimei clase de tip servlet generata; daca exista modificari atunci servlet-ul este reconstruit si reincarcat

JSP: dezvoltare si instalare


dezvoltare: foarte simpla, daca paginile JSP sunt utilizate corect scopul lor este de a gestiona modul de prezentare, avand rol de formatare a rezultatelor instalare: este suficient sa se copieze pagina JSP intrunul din directoarele aplicatiei Web.
nu sunt necesare operatii de configurare (cum ar fi, de

exemplu, efectuarea unor actualizari in descriptorul aplicatiei web.xml)

JSP si Servlet
codul JSP este translatat intr-o clasa servlet (pentru Tomcat, in folderul work) clasa servlet generata de o pagina JSP contine o metoda speciala, _jspService(), ce este apelata de catre metoda service(), in interiorul careia se afla codul Java inserat in pagina HTML prin intermediul unor elemente de scripting

package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.jasper.runtime.*; public class exemplu_Jsp extends HttpJspBase { public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { JspWriter out = pageContext.getOut(); out.println(<html>); out.println(<head>); out.println(<title>Exemplu Servlet</title>); out.println(</head>); out.println(<body>); out.println(<p>Data curenta pe server este); out.println(....); out.println(afisata acum: ); out.println(new java.util.Date() ); out.println(</p></body>); out.println(</html>); } public void service(HttpServletRequest request, HttpServletResponse response) { _jspService(request, response); } }

Structura unei pagini JSP


Elemente principale
template-uri Text
cod HTML

comentarii
commentarii HTML si comentarii JSP

scriptleti
instructiuni Java, obiecte predefinite

expresii
expresii Java (ce produc un rezultat afisabil)

declaratii Java
metode si declaratii de variabile

directive Java
influenteaza constructia clasei servlet

Structura unei pagini JSP: Template Text


in marea majoritate a cazurilor cea mai mare parte a codului unei pagini JSP este formata din tag-uri HTML acest cod HTML trebuie sa respecte regulile normale de formare ale unei pagini HTML (respecta un DTD) codul HTML se va afla in corpul raspunsului codului JSP ii corespund secvente de instructiuni out.print(codHTML) aflate in metoda _jspService()

Structura unei pagini JSP: comentarii


doua tipuri de comentarii
comentarii HTML

<!-- comentariu HTML --> comentarii JSP <%-- comentariu JSP --%>

comentariile HTML sunt incluse in corpul raspunsului (se genereaza o instructiune out.print("<! comentariu HTML-->") in metoda _jspService()) comentariile JSP nu sunt incluse in corpul raspunsului (nu este generata nici o instructiune)

Structura unei pagini JSP


Elemente principale
template-uri Text
cod HTML

comentarii
commentarii HTML si comentarii JSP

scriptleti
instructiuni Java, obiecte predefinite

expresii
expresii Java (ce produc un rezultat afisabil)

declaratii Java
metode si declaratii de variabile

directive Java
influenteaza constructia clasei servlet

Scriptlet
sunt pur si simplu secvente de instructiuni Java ce pot fi inserate in mod arbitrar in interiorul codului HTML, separate cu ajutorul unui delimitator
sintaxa: <% instructiuni %> aceste instructiuni compun (impreuna cu tag-urile din template-ul

HTML) metoda _jspService() din clasa servlet obtinuta din pagina JSP in cadrul unui scriptlet sunt vizibile o serie de obiecte predefinite

Obiecte Predefinite
obiecte predefinite ce pot fi utilizate in scriptleti sau in expresii
HttpServletRequest request

reprezinta parametrul HttpServletRequest din metoda service() HttpServletResponse response reprezinta parametrul HttpServletResponse din metoda service() HttpSession session reprezinta obiectul HttpSession ce se poate obtine prin request.getSession() ServletContext application reprezinta obiectul ServletContext ce se poate obtine prin getServletContext() JspWriter out reprezinta obiectul PrintWriter cu ajutorul caruia se afiseaza corpul raspunsului; este echivalent cu obiectul ce se obtine prin response.getWriter(). JspWriter extinde PrintWriter: este varianta cu buffer a clasei PrintWriter

Obiecte Predefinite
in concluzie: exista mai multe obiecte ce ajuta la realizarea codului aceste obiecte pot fi utilizate in scriptleti sau in expresii nu este necesara construirea acestora metoda _jspService() are o structura predefinita
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ServletContext application = getServletContext(); HttpSession session = request.getSession(); JspWriter out = response.getWriter(); response.setContentType(text/html); ... }

Scriptlet
instructiunile dintr-un scriptlet sunt inserate in metoda _jspService() Exemplu:
<html> <body> <% String nume = (String)request.getParameter(nume); session.setAttribute(nume, nume); %> <p>Buna ziua, <% out.print(nume);%>. Astazi suntem in: <% Date d = new java.util.Date(); out.print(d); %> </p> </body> </html>

Scriptlet
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ServletContext application = getServletContext(); HttpSession session = request.getSession(); JspWriter out = response.getWriter(); response.setContentType(text/html); out.println(<html>); out.println(<body>); String nume = (String)request.getParameter(nume); session.setAttribute(nume, nume); out.println(<p>Buna ziua,); out.print(nume); out.print(Astazi suntem in:); Date d = new java.util.Date(); out.print(d); out.println(</p>); out.println(</body>); out.println(</html>); }

Scriptlet
este posibil sa introducem in tag-ul scriptlet si instructiuni de control Exemplu:
<% String nume=(String)request.getParameter(nume); if (nume == null) { %> <p>Bine ati venit, introduceti numele dumneavoastra</p> <form action=... method=...>...</form> <% } else { %> <p>Bine ai venit, <% out.print(nume);%> </p> <% } %>

Scriptlet
translatare in _jspService()
String nume=(String)request.getParameter(nume); if (nume == null) { out.println(<p>Bine ati venit, introduceti numele dumneavoastra</p>); out.println(<form action=\...\ method=\...\>); ... out.println(</form>); } else { out.println(<p> Bine ai venit,); out.print(nume); out.print(</p>); }

Scriplet
<html> <body> <h1>Tabla inmultirii</h1> <table> <% for (int i = 1; i <= 10; i++) { %> <tr> <% for (int j=1; j <= 10; j++) { %> <td> <% out.print(i*j) %> </td> <% }%> </tr> <% }%> </table> </body> </html>

Structura unei pagini JSP


Elemente principale
template-uri Text
cod HTML

comentarii
commentarii HTML si comentarii JSP

scriptleti
instructiuni Java, obiecte predefinite

Expresii
expresii Java (ce produc un rezultat afisabil)

declaratii Java
metode si declaratii de variabile

directive Java
influenteaza constructia clasei servlet

Expresii
sunt expresii Java deliminate de restul prin intermediul unei sintaxe speciale: rezultatul expresiei este convertit la un string si este afisat poate fi utilizata ca o metoda rapida de a afisa un sir de caractere
sintaxa: <%= expresie %>

Exemplu: <%= new java.util.Date() %> semantica: rezultatul expresiei convertit la tipul String (intr-un sir de caractere) este tiparit cu ajutorul obiectului out sunt echivalente cu
<% out.print(expresie.toString()); %> Exemplu: <% out.print( (new java.util.Date()).toString()); %>

Expresii
Motivatie:
metoda print() este indicat sa fie utilizata cat mai putin

posibil in cadrul unei pagini JSP atunci cand se poate, aceasta va fi inlocuita printr-o expresie

Exemplu
<html> <body> <% String nume = (String)request.getParameter(nume); %> <p>Bine ai venit, <%= nume %>. Data de astazi este: <%= new java.util.Date() %> </p> </body> </html>

Expresii
<html> <body> <h1> Tabla inmultirii </h1> <table> <% for (int i = 1; i <= 10; i++) { %> <tr> <% for (int j = 1; j <= 10; j++) { %> <td> <%= i*j %> </td> <% }%> </tr> <% }%> </table> </body> </html>

Structura unei pagini JSP


Elemente principale
template-uri Text
cod HTML

comentarii
commentarii HTML si comentarii JSP

scriptleti
instructiuni Java, obiecte predefinite

espresii
espresii Java (ce produc un rezultat afisabil)

Declaratii Java
metode si declaratii de variabile

directive Java
influenteaza constructia clasei servlet

Declaratii
fiecare pagina JSP corespunde unui servlet scriptletii si template-ul produc instructiuni ce formeaza metoda _jspService intr-o clasa este posibil sa declaram metode si atribute declaratiile JSP servesc pentru definirea unor metode si variabile utilizate de catre metoda _jspService
variabile ale clasei asociate paginii JSP metode ale clasei asociate paginii JSP

in cadrul declaratiilor, obiectele predefinite nu sunt vizibile (ele sunt vizibile numai in metoda _jspService si de aceea numai in scriptleti si expresii)

Declaratii
variabila a clasei servlet asociata paginii metoda a clasei servlet asociata paginii

Exemplu:
<%! private int accessCount;

private int randomNumber() { return Math.abs(new Random().nextInt() % 100) + 1; } %>

Declaratii
<%! private int accessCount = 0; private int randomNumber() { return Math.abs(new Random().nextInt() % 100) + 1; } %> <html> <head> </head> <body> <h1>Exemple Declaratii</h1> <h2>Numarul de accesari ale clasei: <%= ++accessCount %> </h2> <h2>Un numar generat aleator: <%= randomNumber() %> </body> </html>

Declaratii
doua metode particulare: public void jspInit() public void jspDestroy() metoda jspInit() (mostenita din clasa HttpJspBase) se executa atunci cand instanta clasei asociata paginii este incarcata pentru prima oara de catre containerul de servleti metoda jspDestroy() (mostenita din clasa HttpJspBase) este executata atunci cand instanta clasei asociata paginii este eliminata din memoria containerului

Structura unei pagini JSP


Elemente principale
template-uri Text
cod HTML

comentarii
commentarii HTML si comentarii JSP

scriptleti
instructiuni Java, obiecte predefinite

expresii
expresii Java (ce produc un rezultat afisabil)

declaratii Java
metode si declaratii de variabile

Directive Java
influenteaza constructia clasei servlet

Directive
o directiva JSP are influenta asupra structurii clasei servlet ce se construieste dintr-o pagina JSP avem trei directive importante:
page include taglib

fiecarei directive ii este asociata o multime de instante de forma (atribut-valoare) sintactic, forma generala a unei directive este
<%@ directiva attr1="val1" attrN="valN" %>

Directiva page
<%@ page attr1=val1, attr2=val2, %>

atribute principale
import content-type session errorPage isErrorPage

Directiva page, atributul import


atributul import
specifica numele pachetului si eventual al clasei ce trebuie importate pot exista mai multe astfel de directive de obicei se gaseste la inceputul paginii

Exemplu:
in pagina JSP:
<%@ page import="java.util.*" %>

in clasa servlet asociata:


import java.util.*;

se pot importa mai multe pachete cu o singura directiva


<%@ page import="java.util.*, java.sql.*" %>

importuri inserate automat


javax.servlet.* javax.servlet.http.* javax.servlet.jsp.*

Directive
Observatie
in mod normal sunt vizibile toate clasele din directorul

WEB-INF/classes este necesar sa se importe in mod explicit clasele utilizand directiva page si atributul import

O idee ar fi sa se organizeze clasele in pachete si sa se importe pachetele

Directiva page, atributul content-type


atributul content-type
specifica campul content-type al raspunsului daca nu este specificat explicit, atunci in mod implicit

are valoarea text/html de obicei se gaseste la inceputul paginii

Exemplu:
in pagina JSP:
<%@ page contentType="application/vnd.ms-excel" %>

in metoda _jspService() din clasa servlet:


response.setContentType(application/vnd.ms-excel);

Directiva page, atributul session


atributul session
controleaza daca pagina este asociata unei sesiuni de

lucru presupune doua variante


<%@ page session="true" %> <%@ page session="false" %>

prima varianta este folosita implicit

necesita prezenta in cadrul metodei _jspService() a instructiunii


HttpSession session=response.getSession();

Directiva page atributul errorPage


atributul errorPage
specifica adresa URL a unei pagini (HTML sau JSP)

catre care este redirectionat browser-ul in caz de erori aparute in timpul executarii paginii
<%@ page errorPage="eroare.jsp" %>

Exemplu
in caz de eroare raspunsul vine redirectat catre pagina eroare.jsp

Directiva page atributul isErrorPage


atributul isErrorPage
specifica daca pagina curenta va fi utilizata drept pagina

de eroare (contine mesaje pentru situatiile cand apare o eroare) valoare true sau false

Exemplu
<%@ page isErrorPage = "true" %>

Directiva include
<%@ include file=nume-fisier %>

Directiva include
are un singur atribut: file valoarea atributului file: adresa URL a unei pagini JSP sau

HTML Exemplu:

<%@ include file=introducere.jsp %>

includerea se realizeaza in timpul translatarii paginii JSP specificate incluziunea se realizeaza in pozitia in care se afla directiva
include pot sa existe mai multe directive include aceste directive pot sa apara in orice pozitie in interiorul unei pagini JSP

Directiva include
Observatie: includerea se realizeaza in timpul translatarii (JSPservlet)
daca codul paginii JSP inclusa este modificat,

containerul nu este obligat sa recompileze automat clasa servlet generata anterior

Se recomanda limitarea utilizarii acestei directive

Rezumat
sintaxa elementelor JSP
comentarii JSP

<%-- comentariu JSP -->


scripleti
<% cod Java %>

expresii <%= expresie Java %> declaratii


<%! Definirea de metode si variabile %>

directive
<%@ directiva attr1="val1" attrN="valN" %>

Rezumat
Semantica elementelor se intelege in contextul corespondentei JSP-Servlet
pagina JSP este translatata de catre container intr-o

clasa servlet ce extinde javax.servlet.jsp.HttpJspPage metode importante: _jspService(), jspInit(), jspDestroy()


clasa servlet este recompilata si intializata de fiecare

data cand fisierul jsp este modificat

Rezumat
Construirea clasei servlet drept rezultat al unei pagini JSP
se vor importa atat pachetele standard cat si cele specificate de

directiva page
vor fi incluse variabilele si metodele definite in cadrul

declaratiilor in metoda _jspService() sunt initializate obiectele predefinite se initializeaza content-type cu valoarea predefinita (sau cu cea specificata in directiva page)
template-ul text din pagina JSP se construieste prin apeluri

succesive de tipul out.print(text HTML); codul scriptletilor este inclus in metoda _jspService()

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