470 likes | 612 Views
10. Въведение в JavaServer Pages. Лекционен курс “ Езици и среди за програмиране в Интернет ”. доц. д-р Станимир Стоянов катедра “ Компютърни системи ”. Съдържание. 10 .1. Въведение 10 .2. JavaServer Pages & Servlets 10 .3. Обслужване на JSPs 10.4.Преглед на архитектурата
E N D
10. Въведение в JavaServer Pages Лекционен курс “Езици и среди за програмиране в Интернет” доц. д-р Станимир Стоянов катедра “Компютърни системи”
Съдържание 10.1. Въведение 10.2. JavaServer Pages & Servlets 10.3. Обслужване на JSPs 10.4.Преглед на архитектурата 10.5. Елементи на JSP 10. 6. Създаване на JSP страници 10.7. JSP Приложения 10.8. Пример 10.9. Обобщение & предимства
10.1. Въведение • Използвайки сървлетната технология и развивайки се много бързо JavaServer Pages (JSP) технологията става един от най-съществените елементи в сървърното програмиране на Java. • JavaServer Pages е една спецификация
Какво са JavaServer Pages? • JavaServer Pagesразделят презентацията на генерирането на съдържанието • Доставят прост и бърз начин за създаване на динамични страници (HTML, XML, ...) • С вграден Java код • Разширяеми с компоненти и потребителски тагове
10.2. JavaServer Pages & Servlets • JavaServer Pages използват сервлет технологията • JSP контейнерите са сървлети • Всяка JSP се компилира в runtime сървлет • Съща производителност и преносимост • облагодетелствани от сървлет технологията • Но леснотата за използване на дескриптивните езици • По-добрата възможност за web проектантите иразработчиците
Сървлети : • Java компоненти, които разширяват HTTP Server • Генерират динамично съдържание • Управляеми от контейнер • Изходът може да бъде HTML, XML или друг тип • Зареждат се при искане • По всяко време могат да бъдат премахнати • Съпоставят се на URLs • Съществени абстаркции - Request, Response, Servlet Context, Sessions
JSPs : • Текстови документи съдържащи HTML, JSP tags, Java code • “Inside-Out” сървлети - декларативни, ориентиран към презентацията начин за създаване на сървлети. • Предимства: • По-лесни за използване (разделят представянето от кода) • По-лесни развойни средства (J2EE standard) • Използват : • Скриптове на сървъра (Server-Side Scripting) • Еталони (Templates) • Капсулиране на функционалността
Servlets или JSPs ? • Използване JSP’s за генериране на отговори • Използване сървлети за контролери (FrontController Design Pattern) • Използване сървлети за обслужване или генериране на двоично съдържание (binary content) • Пример • Показване на shopping cart => използване JSP технология • Генериране на images или charts=> използване на сървлети • Обработка на заявки => двете технологии JSP и Servlet са подходящи
10.3. Обслужване на JSPs http://localhost:8080/Hello.jsp Java JSP Servlet Compiler Translator Runner JDBC Outputof Hello HTML /XML JSP SourceHello.jsp Generated file Hello.java Servlet class Hello JSP runtime
Database JSP Runtime Web Tier EIS Tier Client Tier Business Tier Java StandaloneRuntime JSP Pages Enterprise JavaBeans JavaApplication Browser Business Componentsfor Java Servlets Pure HTML Applet
Database Servlet Runtime Web Tier EIS Tier Client Tier Business Tier Java StandaloneRuntime JSP Pages Enterprise JavaBeans JavaApplication Browser Business Componentsfor Java Servlets Pure HTML Applet
Когато една страница се изисква за първи път, тогава тя: • Се компилира автоматично от JSP-машината в един сървлет • След това се изпълнява. • JSP доставя различни възможности за комуникиране с: • Java класове • Сървлети • Аплети • Web сървъри.
Така ние можем да декомпозираме функционалността на Web-приложенията на отделни компоненти в добре дефинирани публични интерфейси и да ги интегрираме в една страница.
Този модел ни позволява ефективно разделение на дейностите: • Отделните разработчици могат да създава различни бизнес-компонентите • Проектантът на страницата ще ги събере заедно в едно приложение с малко на брой извиквания на методи • При този модел за асемблирането на приложенията бизнес-логиката е разделена от представянето на данните.
10.4. Преглед на архитектурата JSP е просто един текстови файл с HTML или XML съдържание, в което могат да се интегрират JSP елементи (директни връзки към Java код)
Жизнен цикъл Когато един потребител заяви една JSP, разположена върху сървъра, тогава: • Ако тя не е обработване преди това – страницата първо се предава на JSP-машината • JSP-машината я компилира в един сървлет • Страницата се обработва • Резултатът се връща към потребителя
Заявка да не Web-сървър (сървлет-машина) Проверка – файл променян след последната компилация? JSP (първичен код) Съществуващ сървлет JSP Handler Servlet Изпълнение на съществуващия сървлет Файл променен? Създаване на първичен файл Изпълнение на новия сървлет Компилиране на сървлет
10.5. Елементи на JSP JavaServer Pages се състоят от HTML страници със специални тагове, които позволяват включването на Java логика • Scriptlets <% … %> • Directives <%@ ... %> • Expressions <%= … %> • Declarations <%! … %> • Other Tags - UseBean, setProperty ...
Директиви - иинформация за страниците • Декларативи - общи декларации на променливи и методи. • Скриплети - Java код, вграден в страницата • Изрази - форматират изразите като низ за включване в изхода на страницата.
JSP – пример за израз A Simple JavaServer Page example <HTML> <BODY> <P>Hello! <BR> Today is:<%= new java.util.Date() %> </BODY> </HTML>
JSP - използва JavaBean <HTML> <BODY> <jsp:useBean class=“beans.nameBean” id=“namebean” scope=“page”> Employees: <%=nameBean.showEmps() %> </BODY> </HTML>
Потребителски JSP тагове <HTML> <BODY> <%@ taglib uri=“/myowntags.tld” prefix=“mytags” %> <P> Today’s Date is: <mytags:ShowDate format=“mm/dd/yy”> </BODY> </HTML> Custom Tag Libraries with JSP 1.1
Page Elements ...<BODY> <%@ page language="java" import="com.acme.app.*, java.util.*" %> <jsp:useBean id="hist" scope="session" class="com.acme.app.histBean" /> <% Iterator itOrders = hist.getOrderList().iterator(); while (itOrders.hasNext()){ Order odr = (Order)itOrders.next(); %> <TR> <TD>Autrags-Nr.: </TD> <TD> <%= odr.getRenderer("odrNum").disp()%> </TD> <TD>Liefer-Datum:</TD> <TD> <%= odr.getRenderer("dvDt").disp()%> </TD> </TR> <% } %> </BODY></HTML> • Standard Tags • ‘Use Bean’ • Session Management • Alternate Languages • Custom Tags
10.5.1. Директиви Една JSP директива е израз, който предоставя на JSP-машината информация за страницата - доставят глобална информация към страницата Напр.: • Импортни данни • Информация за обработка на грешки • Дали страницата е част от една сесия.
Синтаксис на директивите <%@ directive { attribute = “value” } %> • Директивата може да има опционален брой атрибути • Всяка директива има XML еквивалент
Примерни директиви • Page – информация за страницата • Include – файлове, които ще бъдат дословно включени • Taglib – URL на една библиотека от тагове, която ще се използва в страницата.
Някои от основни атрибути: • language=“java” – дава информация на сървлета за използвания във файла език (обикновено Java). • extends=“package.class” – дефинира родителския клас на генерирания сървлет. • import=“package.*,package.class” – съдържа списък на пакетите и класовете, които искаме да импортираме (аналогична на първата секция на Java пеограмите) • session=“true | false”– показва дали данните за сесията са налични за страницата (по подразбиране true) • buffer=“none | 8kb | sizekb” – определя дали изходният стрийм е буфериран (по подразбиране 8kb)
autoFlush =“true|false” – ако true, извежда съдържанието на буфера когато е пълен, вместо да причинява изключение • isThreadSafe=“true|false” – никово осигурен или не • isErrorPage=“true|false” – маркира страницата като страница за грешки • errorPage=“pathToErrorPage” – относителен път до JSP, която ще обработва необработени грешки • info=“text” – страницата достъпна посредством метода Servlet.getServletInfo() • contentType=“text/htm;charset=ISO-8859-1” - mime тип и множество на символите.
10.5.2. Декларации JSP декларациите могат да се разглеждат като дефиниции на ниво класове (декларации на променливи за класове и методи), които ще се използват в страницата. Синтаксис:<%!declaration >
Увеличава броячът с 1 Пример: <%! String var1 = “x”; int count = 0; private void incrementCount ( ) { count++; } %>
10.5.3. Скриплети • Дефинират се както обикновени блокове в Java, оградени с етикетите <% и %> • Този код ще се помести в генерирания _jspService ( ) метод на сървлета. • Кодът, дефиниран в скриплета има достъп до всяка декларирана променлива и компонент (JavaBean).
Съществува едно множество от вътрешни обекти, които се доставят за скриплетите от сървлетната среда. Примери: • request – потребителска заявка. Обикновено един подклас на HttpServletRequest • response – JSP отговор. Подклас на HttpResponse
pageContext – сървърната среда, в която оперира страницата • session– Httpsession обект, свързан със заявката • application – сървлетен контекст, върнат от едно извикване на getServletConfig( ).getContext( ) • out - обектът, представляващ изходния стрийм • config – ServletConfig обектът на страницата • page – за самореференциране (път към самата себе си) • exception– подклас на Throwable, който се предава към URL на страницата за грешки
10.5.4. Изрази • JSP изразите са едно добро средство за вграждане на стойности в нашия HTML код. • Всяко нещо между етикетите <% и %> се оценява, конвертира в символен низ и след това се показва. • Изразите не завършват с ; - понеже JSP машината извежда изразите с out.println( ) • Изразите ни позволяват да параметризираме HTML. • Така напр. кодът ще даде някакви условия за цикли, използвайки JSP скриплет, като е възможно директно след това може да се вмъкне HTML код. • Отделните части на скриплета трябва да бъдат оградени в самостоятелни <% %> .
Стойнопст на брояча Пример: <% for (int i = 0; i<10; i++) { %> <BR> Counter value is <%= i %> <% } %>
10. 6. Създаване на JSP страници Едно голямо предимство за разработване на JSP е, че можем да кодираме HTML без окомплектоването й с Java код (както е при сървлетите). За създаването на JSPs можем да използваме редактори за HTML.
10.7. JSP приложения • JavaServer Pages технологията е разширение на сървлет технологията • Съдържат някои статични HTML (<BODY>) • Съдържа някои JSP tags и Java code който създава динамично съдържаниеt • Може (опционално) да съдържа JavaScript • Когато JSP работи създава сървлети • Спорно е дали JSPs са по-лесни за разработка в сравнение със сървлетите • Файловете имат разширения .jsp
10.8. Пример Една JSP страница ще изпълнява следната функция: извежда латинската азбука 26 пъти, като всеки път променя началната буква
<HTML> <HEAD> <TITLE> Demo of a JSP page </TITLE> </HEAD>
Кодът може да предизвика изклэчения <BODY> <! -- Set global information for the page -- > <%@ page language = “java” %> <! – Declare the character variable -- > <%! Char c = 0; %>
<! -- Scriplet – Java code -- > <% for (int i=0;i<26;i++) { for (int j=0;j<26;j++) { // Output capital letters of the alphabet, and change starting letter c = (char) (0x41 + (26 – i + j) % 26; %>
<! – Output the value of c.toString() to the HTML page -- > <% = c %> <% } %> <BR> <% } %> </BODY> </HTML>
10.9. Обобщение & предимства • Добра производителност • Независимост от платформата • Лесен развой • Развиряемост с JavaBeans и потребителски тагове <xml>, <html>, ….
Предимства Недостатъци • AWT и Swing не са налични • Лимитиран HTML • Архитектурата е малко по-сложна • Application server • JSP container process • Допълнителни езици • HTML и CSS • JavaScript • JSP tags • По-тънък клент • Не е необходима памет и дисково пространство за работа на JVM • Центарализирано инсталиране на runtime и кода • Скалируем – понеже е истинско решение за web server • Intranet възможен • HTML формите се съхраняват отделно • различни хора могат да работят по дизайна • Библиотеки с готови тагове
Кога какво да използваме • Java приложения когато: • Необходими контроли, подобни на Windows • Няма web server • Вътрешно приложение • Аплети когато: • Има web server • Необходимо централизирано разпределяне на кода • Вътрешно приложение • JSPs когато: • Комерсиални Web приложения (напр. E-commerce) • Лесни клиенти и HTML изход