JAVA JSP JAVA SERVER PAGES PODSTAWY Java EE

  • Slides: 29
Download presentation
JAVA – JSP JAVA SERVER PAGES PODSTAWY Java EE training: http: //courses. coreservlets. com

JAVA – JSP JAVA SERVER PAGES PODSTAWY Java EE training: http: //courses. coreservlets. com 181

Źródło strony JSP <%-Document : index Created on : 2008 -12 -15, 15: 47:

Źródło strony JSP <%-Document : index Created on : 2008 -12 -15, 15: 47: 11 Author : Paolo --%> <%@page content. Type="text/html" page. Encoding="UTF-8"%> <!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN" "http: //www. w 3. org/TR/html 4/loose. dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h 1>Hello World!</h 1> </body> </html> 182

Wygenerowany servlet package org. apache. jsp; import javax. servlet. *; import javax. servlet. http.

Wygenerowany servlet package org. apache. jsp; import javax. servlet. *; import javax. servlet. http. *; import javax. servlet. jsp. *; public final class index_jsp extends org. apache. jasper. runtime. Http. Jsp. Base implements org. apache. jasper. runtime. Jsp. Source. Dependent { private static final Jsp. Factory _jspx. Factory = Jsp. Factory. get. Default. Factory(); private static java. util. Vector _jspx_dependants; private org. apache. jasper. runtime. Resource. Injector _jspx_resource. Injector; public Object get. Dependants() { return _jspx_dependants; } public void _jsp. Service(Http. Servlet. Request request, Http. Servlet. Response response) throws java. io. IOException, Servlet. Exception {. . . } 183

Metoda _jsp. Service standardowe zmienne lokalne. . Page. Context page. Context = null; Http.

Metoda _jsp. Service standardowe zmienne lokalne. . Page. Context page. Context = null; Http. Session session = null; Servlet. Context application = null; Servlet. Config config = null; Jsp. Writer out = null; Object page = this; Jsp. Writer _jspx_out = null; Page. Context _jspx_page_context = null; try { response. set. Content. Type("text/html; charset=UTF-8"); response. set. Header("X-Powered-By", "JSP/2. 1"); page. Context = _jspx. Factory. get. Page. Context(this, request, response, null, true, 8192, true); _jspx_page_context = page. Context; application = page. Context. get. Servlet. Context(); config = page. Context. get. Servlet. Config(); session = page. Context. get. Session(); out = page. Context. get. Out(); _jspx_out = out; _jspx_resource. Injector = (org. apache. jasper. runtime. Resource. Injector) application. get. Attribute("com. sun. appserv. jsp. resource. injector"); . . . } 184

Metoda _jsp. Service cd. . . out. write("<!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML

Metoda _jsp. Service cd. . . out. write("<!DOCTYPE HTML PUBLIC "-//W 3 C//DTD HTML 4. 01 Transitional//EN"n"); out. write(" "http: //www. w 3. org/TR/html 4/loose. dtd">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(" <h 1>Hello World!</h 1>n"); </body>n"); out. write("</html>n"); } catch (Throwable t) { if (!(t instanceof Skip. Page. Exception)){ out = _jspx_out; if (out != null && out. get. Buffer. Size() != 0) out. clear. Buffer(); if (_jspx_page_context != null) _jspx_page_context. handle. Page. Exception(t); } } finally { _jspx. Factory. release. Page. Context(_jspx_page_context); } }. . . 185

Predefiniowane zmienne request – Pierwszy argument metody do obsługi parametrów żądania (typ obiektu Http.

Predefiniowane zmienne request – Pierwszy argument metody do obsługi parametrów żądania (typ obiektu Http. Servlet. Request) response – Drugi argument metody do obsługi odpowiedzi (typ obiektu Http. Servlet. Response ) out – Obiekt do generowania odpowiedzi przez servlet, (typ obiektu Jsp. Writer) wykorzystuje buforowanie session – Obiekt do obsługi mechanizmu sesji związanej z żądaniem (typ obiektu Http. Session) Mechanizm sesji może być wyłączony przez dyrektywę „page” application – obiekt do obsługi zmiennych dostępnych w całej aplikacji webowej Dostęp uzyskany jest przez metodę get. Servlet. Context(). (typ obiektu Servlet. Context) 186

Elementy stron jsp • • • Skryptlety Komentarze Dyrektywy Deklaracje Wyrażenia Akcje <% …

Elementy stron jsp • • • Skryptlety Komentarze Dyrektywy Deklaracje Wyrażenia Akcje <% … %> <%-- … --%> <%@ … %> <%! … %> <%= … %> <jsp: …> 187

Wyrażenia (Expressions) <%= My. Elements. JSPElement. Add(2, 3) %> out. print( My. Elements. JSPElement.

Wyrażenia (Expressions) <%= My. Elements. JSPElement. Add(2, 3) %> out. print( My. Elements. JSPElement. Add(2, 3) ); <%= new My. Elements. JSPElement(). Subtract(2, 3) %> out. print( new My. Elements. JSPElement(). Subtract(2, 3) ); public class JSPElement { public static double Add(double a, double b) { return a+b; } public double Subtract(double a, double b) { return a-b; } } 188

Wyrażenia cd (Składnia XML) <jsp: expression>Java Expression</jsp: expression> Uwaga nie można mieszać znaczników XML

Wyrażenia cd (Składnia XML) <jsp: expression>Java Expression</jsp: expression> Uwaga nie można mieszać znaczników XML ze standardowymi na jednej stronie 189

Skryplety Format – <% Java Code %> • Wynik Kod zostaje wstawiony Bezpośrednio do

Skryplety Format – <% Java Code %> • Wynik Kod zostaje wstawiony Bezpośrednio do metody _jsp. Service Przykład <% String query. Data = request. get. Query. String(); out. println(" Parametry zadania GET " + query. Data); %> <% response. set. Content. Type("text/plain"); %> Składnia w formacie XML <jsp: scriptlet>Java Code</jsp: scriptlet> 190

Skryplety przykład <!DOCTYPE …> <HTML> <HEAD> <TITLE>Color Testing</TITLE> </HEAD> <% String bg. Color =

Skryplety przykład <!DOCTYPE …> <HTML> <HEAD> <TITLE>Color Testing</TITLE> </HEAD> <% String bg. Color = request. get. Parameter("bg. Color"); if ((bg. Color == null)||(bg. Color. trim(). equals(""))){ bg. Color = "WHITE"; } %> <BODY BGCOLOR="<%= bg. Color %>"> <H 2 ALIGN="CENTER">Test zmiany koloru tła "<%= bg. Color %>". </H 2> </BODY></HTML> 191

Skryplety właściwości • Skryplety są wstawiane w servlet dokładnie tak jak zostały napisane, •

Skryplety właściwości • Skryplety są wstawiane w servlet dokładnie tak jak zostały napisane, • Niekoniecznie muszą tworzyć pełne wyrażenia w języku Java, • Jednak pełne wyrażenia są barziej przejżyste łatwiejsze do analizy Przykład: <% if (Math. random() < 0. 5) { %> Have a <B>nice</B> day! <% } else { %> Have a <B>lousy</B> day! <% } %> Kod wynikowy w servlecie – if (Math. random() < 0. 5) { out. println("Have a <B>nice</B> day!"); } else { out. println("Have a <B>lousy</B> day!"); } 192

Deklaracje Format <%!Java Code %> Wynik Kod jest wstawiany do definicji klasy servletu poza

Deklaracje Format <%!Java Code %> Wynik Kod jest wstawiany do definicji klasy servletu poza istniejącymi metodami Przykład <%! private int some. Field = 5; %> <%! private void some. Method(. . . ) {. . . } %> Składnia w formacie XML <jsp: declaration>Java Code</jsp: declaration> Uwagi: Pola są użyteczne. Deklaracje metod lepiej jest definiować w osobnych klasach 193

Deklaracje: przykład Kod strony JSP <H 1>Some Heading</H 1> <%! private String random. Heading()

Deklaracje: przykład Kod strony JSP <H 1>Some Heading</H 1> <%! private String random. Heading() { return("<H 2>" + Math. random() + "</H 2>"); } %> <%= random. Heading() %> 194

Deklaracje: Przykład Kod Servletu public class xxxx implements Http. Jsp. Page { private String

Deklaracje: Przykład Kod Servletu public class xxxx implements Http. Jsp. Page { private String random. Heading() { return("<H 2>" + Math. random() + "</H 2>"); } public void _jsp. Service(Http. Servlet. Request request, Http. Servlet. Response response) throws Servlet. Exception, IOException { response. set. Content. Type("text/html"); Http. Session session = request. get. Session(); Jsp. Writer out = response. get. Writer(); out. println("<H 1>Some Heading</H 1>"); out. println(random. Heading()); . . . } // koniec servletu 195

Delklaracje Przykład 2 <!DOCTYPE …> <HTML> <HEAD> <TITLE>JSP Declarations</TITLE> <LINK REL=STYLESHEET HREF="JSP-Styles. css" TYPE="text/css">

Delklaracje Przykład 2 <!DOCTYPE …> <HTML> <HEAD> <TITLE>JSP Declarations</TITLE> <LINK REL=STYLESHEET HREF="JSP-Styles. css" TYPE="text/css"> </HEAD> <BODY> <H 1>JSP Declarations</H 1> <%! private int access. Count = 0; %> <H 2>Accesses to page since server reboot: <%= ++access. Count %></H 2> </BODY></HTML> 196

Metody init i destroy w stronach JSP Strony JSP mogą wymagać wywołania metod init

Metody init i destroy w stronach JSP Strony JSP mogą wymagać wywołania metod init i destroy Servlet wygenerowny ze strony JSP może już wykorzystywać te funkcje Nie można więc wykorzystać deklaracji do ich zdefiniowania, gdyż spowoduje to problemy Rozwiązanie: Przeładwać funkcje jsp. Init i jsp. Destroy. Automatycznie generowane servlety wywołują te funkcje, których ciało w wersji podstawowej jest puste 197

Dyrektywy <%@ method = ”. . . ”%> 198

Dyrektywy <%@ method = ”. . . ”%> 198

Dyrektywa page import Format <%@ page import="package. class" %> <%@ page import="package. class 1,

Dyrektywa page import Format <%@ page import="package. class" %> <%@ page import="package. class 1, . . . , package. class. N" %> Wynik Dodaje instrukcje import do definicji servletu Uwagi Klasy wykorzystywane przez strony JSP muszą być zawarte w pakietach (czyli umieszczoene w odpowiednich katalogach np. . : …/WEB-INF/classes Przykład <%@ page import="java. util. *, coreservlets. *" %> 199

Dyrektywa page content. Type Format <%@ page content. Type="MIME-Type" %> <%@ page content. Type="MIME-Type;

Dyrektywa page content. Type Format <%@ page content. Type="MIME-Type" %> <%@ page content. Type="MIME-Type; charset=Character-Set" %> <%@ page. Encoding="Character-Set" %> Wynik Określa tym MIME strony generowanej przez servlet utworzony na podstawie definicji strony JSP Uwagi – Wartość atrybutu nie może być określona podczas obsługi żądania Przykład <%@ page content. Type="application/vnd. ms-excel" %> 200

Dyrektywa page content. Type cd Ustawienie atrybutu content. Type nie może być wyrażeniem warunkowycm

Dyrektywa page content. Type cd Ustawienie atrybutu content. Type nie może być wyrażeniem warunkowycm Poniższy kod powoduje ustawienie typu MIME (application/vnd. msexcel) niezależnie od parametrów żądania <% boolean using. Excel = check. User. Request(request); %> <% if (using. Excel) { %> <%@ page content. Type="application/vnd. ms-excel" %> <% } %> Trzeba wykorzystać skryplet i wywołać metodę response. set. Content. Type <% String format = request. get. Parameter("format"); if ((format != null) && (format. equals("excel"))) { response. set. Content. Type("application/vnd. ms-excel"); } %> 201

Dyrektywa page session Format <%@ page session="true" %> <%-- Default --%> <%@ page session="false"

Dyrektywa page session Format <%@ page session="true" %> <%-- Default --%> <%@ page session="false" %> Wynik Określa czy na dana strona implementuje mechanizm Sesji Uwagi Domyślnie ustawiona na true Wyłącznie pozwala zaoszczędzić pamięć w przypadku bardzo obciążonego serwera 16 202

Dyrektywa page buffer Format <%@ page buffer="sizekb" %> <%@ page buffer="none" %> Wynik Określa

Dyrektywa page buffer Format <%@ page buffer="sizekb" %> <%@ page buffer="none" %> Wynik Określa rozmiar bufora wykorzystywanego przez zmienną out Uwagi Buforowanie umożliwia ustawienie nagłówków HTTP nawet jeśli pewna część strony została już wygenerowana (dopuki buffor nie został zapełniony lub celowo opróżniony) Serwer może zastosować większy buffor niż zdefiniowano (nie mniejszy) 203

Dyrektywa page error. Page Format <%@ page error. Page=”Wględny adres URL" %> Wynik Określa

Dyrektywa page error. Page Format <%@ page error. Page=”Wględny adres URL" %> Wynik Określa stronę JSP przeznaczonej do obsługi wyjątku wygenerowanego leczni nie przechwyconego przez bierzącą stronę. Uwagi Wygenerowany wyjątek jest dosteępny automatycznie dla docelowej strony JSP prze zmienną exception Plik konfiguracyjny web. xml pozwala na zdefniowanie wielu stron do obsługi konkretnych wyjątków bądź błędów HTTP 204

Dyrektywa page is. Error. Page Format <%@ page is. Error. Page="true" %> <%@ page

Dyrektywa page is. Error. Page Format <%@ page is. Error. Page="true" %> <%@ page is. Error. Page="false" %> <%-- Default --%> Wynik Określa że bierząca strona bezie stroną przeznaczoną do obsługi błędów generowanych przez inną stronę JSP Uwagi Tworzona jest dodatkowo zmienna o nazwie exception Należy przechwytywać jak najwięcej wyjątków mechanizm stron do obsługi błędów stosować w sytuacjach wyjątkowych 205

Dyrektywa page extends Format <%@ page extends="package. class" %> Wynik Określa klasę bazową dla

Dyrektywa page extends Format <%@ page extends="package. class" %> Wynik Określa klasę bazową dla wygenerowanego na podstawie strony JSP servletu Uwagi Stosować rozważnie Typowe zastosowanie to wykorzystanie klas dostarczonych przez producenta serwera, na którym uruchamiana jest aplikacja (np. . Identyfikacja użytkownika itp. ) 206

Inne dyrektywy Format <%@ page is. Thread. Safe="true" %> <%-- Default --%> <%@ page

Inne dyrektywy Format <%@ page is. Thread. Safe="true" %> <%-- Default --%> <%@ page is. Thread. Safe="false" %> Wynik Informacja dla systemu, że kod nie jest bezpieczny (threadsafe), więc sysem powinien wyłączyć wspólny dostęp do zasobów dla innych wątków Zazwyczaj oznacza to że servlet impelmentuje Single. Thread. Model • Uwagi Unikać, Powoduje degradację wydajności Format <%@ page is. ELIgnored="false" %> <%@ page is. ELIgnored="true" %> Wynik Włącza bądź wyłącza JSP 2. 0 Expression Language 207

208

208

 • JSP Expressions – Format: <%= expression %> – Wrapped in out. print

• JSP Expressions – Format: <%= expression %> – Wrapped in out. print and inserted into _jsp. Service • JSP Scriptlets – Format: <% code %> – Inserted verbatim into the servlet’s _jsp. Service method • JSP Declarations – Format: <%! code %> –Inserted verbatim into the body of the servlet class • Predefined variables – request, response, out, session, application • Limit the Java code that is directly in page – Use helper classes, beans, servlet/JSP combo (MVC), JSP expression language, custom tags • XML Syntax – There is alternative JSP syntax that is sometimes useful when generating XML-compliant documents. • But is more trouble than it is worth for most HTML applications 209