1 / 44

JavaServer Pages (JSP)

JavaServer Pages (JSP). Борислава Спасова. Светлин Наков. Java Web Developer Acsior Ltd. National Academy for Software Development. www.acsior.com. academy.devbg.org. Contents. Въведение в JSP технологията JSP изрази Предефинирани променливи в JSP JSP скриплети

Download Presentation

JavaServer Pages (JSP)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JavaServer Pages (JSP) Борислава Спасова Светлин Наков Java Web Developer Acsior Ltd. National Academy for Software Development www.acsior.com academy.devbg.org

  2. Contents • Въведение в JSP технологията • JSP изрази • Предефинирани променливи в JSP • JSP скриплети • JSP страниците са всъщност сървлети • JSP декларации • JSP директиви • JSP @page • Статичен и динамичен Include

  3. Contents (2) • Повече за предефинираните променливи • Пренасочване на клиента и на сървъра • Избягване наспециалните символи в HTML

  4. Накратко за JSP? • JavaServer Pages (JSP) е технология: • За създаване на динамични Web приложения • Позволяваща използването на Java код в HTML страници • Java кода се изпълнява на сървъра по време наинтерпретирането наJSP страницата • Чист HTML се изпраща на browser-a на клиента в резултат от интерпретирането на JSP страницата

  5. JSP Технологията • JSP технологиятаосигурява лесен начин за разработване на динамични Web приложения • Подобно на сервлетите работи в режим request/response • Дава възможност за генериране на динамично съдържание без да се изискват задълбочени познания за Java • За запознатите с езика осигурява възможноста за лесното му използване заедно със статндартния HTML • Позволява използването на различни XML тагове

  6. Пример - Date JSP • Примерната страница показва текущата дата и час date.jsp <html> <head><title>Date JSP example</title></head> <body> The date is: <% out.println(new java.util.Date()); %> </body> </html>

  7. Date JSP Demo

  8. JSP Изрази • JSP изразите се използват за директно показване на резултат от израз на Java • Имат следният вид: • Примери: <%= Javaизраз %> The time is: <%= new java.util.Date() %> The square root of 2 is: <%= Math.sqrt(2) %> The value of PI is: <%= Math.PI %>

  9. Предефинирани променливи • JSP имат няколко предифинирани променливи • request – еквивалент на HttpServletRequest • response – HttpServletResponse • session – HttpSession(свързва се с request) • out – използва за показване на резулатата генерира от JSP страбицара (PrintWriter) • Тези променливи са инициализирани и могат да се използват директно на кое да е място в JSP станицата.

  10. JSP Expressions –More Examples • Следващият пример използва прменливатаrequest , за да покаже името на host-a на клиентската машина : • Показва timeout-а на сесията: • Показва идентификационните параметри на клиентският web browser: Your hostname: <%= request.getRemoteHost() %> Session timeout: <%= session.getMaxInactiveInterval() %> Browser: <%= request.getHeader("User-Agent") %>

  11. JSP Изрази Demo

  12. JSP Сриплети • JSP скриплетитеосиуряват директното използване на Java код в JSP страниците • Чрез скриплетите се осигурява директния достъп до предефинираните променливи на JSP страниците (request, response, session, ...) <% Java code %> <% String queryData = request.getQueryString(); out.println("Attached GET data: " + queryData); %>

  13. Пример – JSP скриплети • Пример на директно използване на Java код в JSP страница: • Пример илюстриращ използването на цикъл: <% if (Math.random() < 0.5) { %> Have a <B>nice</B> day! <% } else { %> Have an <B>interesting</B> day! <% } %> <% for (int i=0; i<10; i++) { %> <%= i %> * <%= i %> = <%= i*i %> <br> <% } %>

  14. JSP Сриплети Demo

  15. JSP Technology Internals • JSP страниците са всъщност сървлети! • Web контейнера превръща JSP страниците в Java сървлети ( с разширение .java) • След което ги компилира до.class файлове • JSP имат същия жизнен цикъл като сървлетите Compiled Java servlet (date.class) JSP compiler javac JSP Page (date.jsp) Java servlet (date.java)

  16. JSP Technology Internals • Tomcat запазва така компилираните JSP страници в директория CATALINA_HOME/work date_jsp.java date.jsp JSP compilation <html> <head><title>Date JSP example</title></head> <body> The date is: <% out.println(new java.util.Date()); %> </body> </html> package org.apache.jsp; public final class date_jsp extends HttpJspBase implements JspSourceDependent { ... } \webapps\JSP-Demos\ date.jsp \work\Catalina\localhost\ JSP-Demos\org\apache\jsp

  17. JSP Декларации • JSP декларациите позволяват дефинирането на методи и полета, които стават част от основното тяло на съответния сервлет. Имат следния вид: • Пример: <%! Java code (fields and methods) %> <%! long counter = 0; public void getCounter() { return counter; } %>

  18. JSP Декларации • Декларациите не генерират резултат • Обикновено се използва заедно с JSP изрази и скриплети. • Пример: • Извежда на екрана колко пъте и била достъпвана страницата, от момента на качването й на сървъра: <%! private static int accessCount = 0; %> This page has been accessed <%= ++accessCount %> times.

  19. JSP Декларации Demo

  20. JSP Директиви JSP directive засяга цялостната структура на сървлета, до който е компилирана JSP страницата • Има следната форма: • Може да има повече от един атрибути: <%@ directive attribute="value" %> <%@ directive attribute1="value1" attribute2="value2" ... attributeN="valueN" %>

  21. Директивата @page • page директивата позволява дефинирането на един или повече,видими в рамките на една страница,атрибути: • Оказва кои пакети се import-ват • Пример: • Атрибута import е единственият, който може да се повтаря многократно import="package.class" or import="package.class1,...,package.classN" <%@ page import="java.util.*" %>

  22. Директивата@page (2) • Оказва използвания MIME тип за показване на извода (по подразиране това е "text/html") • Например директивата: има същият резултат като скриплета: contentType="MIME-Type" or contentType="MIME-Type; charset=Character-Set" <%@ page contentType="text/plain" %> <% response.setContentType("text/plain"); %>

  23. Директивата @page (3) • Дефинира дали страница ще работи съсsessionобекта (по подразбиране е true) • Дефинира URL на страницата, към която ще се пренасочват всички непрехванати изключения • Декларира текущатата страцица като error page (позволява достъп до обектаexception) session="true|false" errorPage="url" isErrorPage="true|false"

  24. JSP Page директива Demo

  25. Директивата @include • Позволява вючването на файлове повреме на превършането на страницата в сървлет (static include) • Директивата има следния вид: • Зададеното URL се разглежда като относителен път до JPS-то към което сочи • Пример: <%@ include file="relative url" %> <%@ include file="/include/menu.jsp" %>

  26. Използване на JSP@include • Например може да използваме JSP @include, за да добавим navigation bar към всяка страница <html> <body> <%@ include file="/navbar.html" %> <!-- Part specific to this page ... --> </body> </html>

  27. Динамичен Include • Динамично включване на страница (dynamic include): • Резултът от включената страница се добавя към главната, като се изчислява всеки път <jsp:include page="header.jsp"/> <% String headerPage = "header.jsp"; %> <jsp:include page="<%= headerPage %>" />

  28. JSP Include Директивата Demo

  29. Предефинирани променливи (2) • request • HttpServletRequestсе свързва с променливатазаявката на клиента • Осигурява достъп до параметрите на request-а, HTTP headers, cookies и др. • response • HttpServletResponseсе свързва с отговора,мкойто се връща на клиенат • Могат да се задават HTTP status кодове и response header-и

  30. More About The JSP Predefined Variables (2) • out • PrintWriter, който се използва за да се изпрати отговвора на клиентаsession • session • HttpSessionобекта се сързва със заявката на клиента т.е. с request обекта • Сесиите се създават автоматично • Пази статична информация за текущият потребител, свързан с тази сесия

  31. Предефинирани променливи (3) • application • ServletContext, който се достъпва чрезgetServletConfig().getContext() • Пази информаци, достъпна за цяото приложение. • Всички сервлети и JSP страници могат да си обменят информация чрез този обект • pageContext • Обвива всички останали предефинирани обеткти в JSP страниците (request, response, session, ...) и ги пази в инстанция наPageContext

  32. Предефинирани променливи (4) • page • Синоним на обекта this object (не особено полезен) • exception • Дефинира обекта от типThrowable • Достъпен е само за дефинираните error pages • Съдържа последното хвърлено изключение • config • СъдържаServletConfigза текущата JSP страница • Използва се за достъп до init параметрите

  33. applicationОбекта • Използването на applicationпбакта трябва да става вsynchronizedчаст от кода • Обекта е общ за всички нишки • Web container-итестартират самостоятелна нишка за всеки клиент synchronized (application) { Vectoritems = (Vector) application.getAttribute("items"); if (sharedItems == null) { sharedItems = new Vector (); application.setAttribute("items", items); } }

  34. Пренасочване на клиентакъм друго URL • Client redirection • Ппенасочва Web browser-а на клиента към предварително посоченио URL • В действителност изпраща HTTP response код 302 (Resource moved temporarily) • Browser-а изпраща заявка към новия адрес • Пример: response.sendRedirect(<url>); response.sendRedirect("date.jsp");

  35. Пренасочва не на сървъра към друг ресурс • Server redirection • Връща съдържанието на някакъв ресурс на сървъра • За клиента това пренасочване става неявно • Пример: request.getRequestDispatcher(<url>). forward(request, response) request.getRequestDispatcher("date.jsp"). forward(request, response);

  36. Проблеми със специалнитe символи в HTML • Проблемите със специалнитe символи в HTML са широко разпространени в Web програмирането • Показването на тези символи може да бъде опасно • Прави приложението нестабилно • Разкрива пропуски в сигурността • Когато се показва текст на ектана на потребителя, той не трябва да съдържа специални символи • Избягването на тези символи е задължително!

  37. Проблеми със специалнитe символи в HTML - Пример • Разгледайте този пример: • Какво става ако въведем това? <html> You entered: <%= request.getParameter("something") %> <form> Enter something:<br> <input type="text" name="something"> <input type="submit"> </form> </html> <script language="JavaScript">alert('Bug!');</script>

  38. Проблеми със специалнитe символи в HTML Demo

  39. Какво трябва да прескачаме? • Кой и сиволи се прескачат се определя от тяхното местоположенив в страницата: • В HTML body тези символи са: • <, >, &, space (евентуалноtab, нов ред) • В атрибут на HTML таг те са: • "и& • В<textarea> : • <, >и&

  40. Character Name HTML Entity Character По-малко &lt; < По-голямо &gt; > и &amp; & Въпросителен знак &quot; " Character Name Escaping Space &nbsp; Нов ред <br> Tab &nbsp;&nbsp;&nbsp; &nbsp; Избягване наспециалните символи • По принцип се препоръчва избягването на следните символи: • Освен тях, в тялото на HTML страницата трябжа да се избегнат:

  41. Избягване наспециалните символи • Няма стандартен метод в Servlet/JSP API за рещаването на този проблем • Ето примерен метод: public static String htmlEscape(String text) { if (text == null) { return ""; } StringBuilder escapedText = new StringBuilder(); for (int i=0; i<text.length(); i++) { char ch = text.charAt(i);

  42. Избягване наспециалните символи if (ch == '<') escapedText.append("&lt;"); else if (ch == '>') escapedText.append("&gt;"); else if (ch == '&') escapedText.append("&amp;"); else if (ch == '\"') escapedText.append("&quot;"); else escapedText.append(ch); } String result = escapedText.toString(); return result; }

  43. Избягване наспециалните символи Demo

  44. Въпроси?

More Related