В отличие от сервлетов, требующих компиляции java-файла для получения класса (файла *.class) jsp страница не требует компиляции и регистрации в дескрипторе поставки web.xml .

Контейнер сервлетов расширили препроцессором, переводящим запись JSP страницы в сервлет . Препроцессор обрабатывает страницу JSP автоматически при первом обращении к ней. Полученный в результате его работы сервлет тут же компилируется и выполняется. Откомпилированный сервлет затем сохраняется в WEB-контейнере также, как и все сервлеты, и выполняется при последующих вызовах страницы JSP.

Пример Dynamic Web Project

Рассмотрим простой пример, в котором на JSP странице приветствия будут отображены текущая дата и время. Для разработки будет использована IDE Eclipse. На следующем скриншоте представлено определение типа проекта Dynamic Web Project .

Определим наименование проекта как HelloJSP и создадим в проекте файл index.jsp . Структура проекта представлена на следующем скриншоте.

Код дескриптора приложения web.xml

index.jsp

В дескрипторе приложения web.xml в качестве страницы приветствия определен JSP файл index.jsp .

Исходный код JSP страницы index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.*, java.text.*" %> <%! String getFormattedDate() { SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy hh:mm:ss"); return sdf.format(new Date()); } %> Добро пожаловать, JSP!

Добро пожаловать!

Сегодня <%= getFormattedDate() %>

Как мы уже видели в предыдущей статье, сервлеты позволяют нам получать запросы от клиента, совершать некоторую работу и выводить ее результаты на экран. До того момента, как надо осуществлять вывод на экран сервлет прекрасно работает. В него можно вставить достаточно сложную логику, сделать вызовы к базе данных и многое-многое другое, что необходимо для приложения. Но вот осуществлять вывод на экран внутри самого сервлета — очень неудобно. В нашем примере мы ограничились крайне простым решением. А что придется делать в случае вывода сложных дизайнерских идей? Вряд ли Web-дизайнер сможет понять, как надо осуществлять вывод внутри нашего сервлета. И когда он захочет осуществить свои дизайнерские идеи, то ему придется приходить к программисту и просить поменять код сервлета для того, чтобы изменить дизайн. Это надо будет перекомпилировать, надо будет придумывать умные алгоритмы для вывода не только картинок, но и того же JavaScript. Просто кошмар.
Каждому здравомыслящему разработчику ясно, что надо использовать иное решение. Самое очевидное – придумать механизм, который разделил бы задачу на две составляющие: одна часть обрабатывает запрос, меняет данные, собирает данные, укладывает это в некий пакет и передает второй части, которая делает только одно – показывает эти данные.
Так мы подошли к уже известному нам петтерну – Model-View-Controller (MVC). Для случая Web-приложений контроллером у нас становится сервлет, пакет данных, который мы сформировали – моделью. А вот на роль представления (View) прекрасно подходит JSP – Java Server Pages.
В этой статье мы сделаем общий обзор этой технологии. А «Отдел кадров» продолжим в следующей статье, где сможем сразу использовать знакомые технологии – сервлеты и JSP.
Основная идея JSP очень проста – сама страница пердставляет из себя шаблон с уже заготовленными HTML-тэгами, между которыми надо вставить нужные данные. Что-то вроде такого (это только схема)

Hello World Sample <TITLE> </HEAD> <BODY> <H1> [И тут какие-то данные] </H1> </BODY> </HTML></p> <p>Чтобы вам не было скучно и для наглядности давайте изменим наш самый первый сервлет HelloWorldServlet из предыдущей статьи. Мы добавим ему возможность работать с параметром, который передадим с <a href="/chto-takoe-profail-v-odnoklassnikah-moi-opyt-vosstanovleniya-svoei.html">помощью URL</a>. Его мы увидим чуть позже. А пока давайте посмотрим на несколько измененный сервлет HelloWorldServlet. Его задача сейчас очень проста – вывести приветствие «Hello, world !» в случае если не будет передано параметра name. Если же он передан, то приветствие несколько изменится. Например, при передаче параметра name=Antonсервлет должен вывести надпись «Hello, world. I’m Anton».<br> Ничего сложного в задаче нет и ее можно решить без JSP, но для демонстрации нам подойдет.</p> <p>package students.web; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorldServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { getServletContext().getRequestDispatcher("/hello.jsp").forward(req, resp); } }</p> <table class="crayon-table"><tr class="crayon-row"><td class="crayon-nums " data-settings="show"> </td> <td class="crayon-code"><p>package students . web ; </p><p>import javax . servlet . ServletException ; </p><p>import javax . servlet . http . HttpServlet ; </p><p>import javax . servlet . http . HttpServletRequest ; </p><p>import javax . servlet . http . HttpServletResponse ; </p><p>public class HelloWorldServlet extends HttpServlet { </p><p>public void doGet (HttpServletRequest req , HttpServletResponse resp ) throws ServletException , IOException { </p><p>getServletContext () . getRequestDispatcher ("/hello.jsp" ) . forward (req , resp ) ; </p> </td> </tr></table><p>Самая интересная строка (она же пока и единственная) позволяет нам получить ресурс (в нашем случае это hello.jsp) и передать этому ресурсу наши данные. В <a href="/spravka-o-kompanii-atol-v-sluchae-nalichiya-nekorrektnyh-dannyh-v-polyah.html">данном случае</a> мы ничего не меняли и не добавляли. Теперь давайте посмотрим на файл hello.jsp, который должен представить пользователю некую страницу. В данном случае она не очень сложная, но все-таки мы остановимся на ней подробнее.</p> <p><html> <head> <title> Hello World Sample

<% String name = request.getParameter("name"); if (name == null || name.length() == 0) { %> Hello, world ! <% } else { %> Hello, world ! I"m <%= name%> <% } %>

< html >

< head >

< title >

Hello World Sample

< / title >

< / head >

< body >

< h1 >

String name = request . getParameter ("name" ) ;

if (name == null || name . length () == 0 ) {

Hello , world !

<% } else {

Hello , world ! I "m <%= name %>

< / h1 >

< / body >

< / html >

Как видите наш HTML-файл представляет из себя смесь тэгов для HTML и кода на Java. По сути JSP при первом обращении преобразуется в сервлет и работает уже как сервлет. Это очень важно понять. JSP НЕ ЯВЛЯЕТСЯ страницей наподобие HTML-страницы — начинающему програмисту важно четко осознавать, что это еще один сервлет — просто его вывод не надо программировать. Его можно просто нарисовать. И в нужные места подставить данные. Но т.к. JSP-страница хоть как-то напоминает HTML, то дизайнеру явно будет проще. И я еще раз НАСТОЙЧИВО говорю начинающим — JSP является СЕРВЛЕТОМ. Ее подготовка со всеми данными происходит на сервере. Именно там подставляются все данные. А пользователю в броузер приходит уже готовая HTML-страница, на которой никаких признаков JAVA нет. Разве что апплет какой-нибудь — но это уже совсем другая технология. Просто JSP удобно использовать — вы делаете логику получения данных в одном сервлете (который не выглядит как JSP) и потом передаете данные другому сервлету (на этот раз в виде JSP), задача которого с помощью этих данных нарисовать HTML-страничку. Только рисовать надо не так много. К тому же вам не надо перекомпилировать классы JSP. Можно просто заменить JSP на более современную и она автоматичски будет скомпилирована заново. Что в общем-то достаточно удобно — просто скопировали нужную страничку на место старой. Как можно видеть код Java заключается в угловые скобки со знаком процента «<%» и здесь вам можно написать любой код, который будет нужен.
Как видите наш код проверяет наличие параметра name в запросе (request.getParameter(«name»)) и, если он существует, то выводится одна надпись. В противном случае мы увидим «укороченный» вариант надписи.
Еще немного информации — JSP имеет в своем составе несколько предопределенных объектов. Т.е. их надо воспринимать, как уже готовые объекты, которые могут быть использованы. Это request, response, out, session, application, config, pageContext и page. Я дам коротенькую справку на них, возможно, что это пока будет не очень интересно, да и не понятно. Но на всякий случай.

request
Это объект HttpServletRequest, связанный с запросом, который позволяет вам обращаться к параметрам запроса (через метод getParameter), типу запроса (GET, POST, HEAD, и т.д..), и входящим HTTP заголовкам (cookies, Referer, и т.д..). Если быть более точным, request является подклассом ServletRequest и может отличаться от HttpServletRequest если используется протокол отличный от HTTP, что на практике практически никогда не встречается. Поэтому про него можно думать, что это HttpServletRequest.

response
Это объект типа HttpServletResponse, связанный с ответом на запрос клиента. Обратите внимание что, поскольку поток вывода (см. out далее) буферизован, можно изменять коды состояния HTTP и заголовки ответов, даже если это недопустимо в обычном сервлете, но лишь в том случае если какие-то данные вывода уже были отправлены клиенту.

out
Это объект типа PrintWriter, используемый для отправки вывода клиенту. Однако, чтобы сделать объект response (см. предыдущий раздел) полезным, следует использовать буферизированный вариант PrintWriter — JspWriter. Помните что вы можете изменять размер буфера и даже отключить буферизацию, изменяя значение атрибута buffer директивы page. Также обратите внимание что out используется практически исключительно скриплетами, поскольку выражения JSP автоматически помещаются в поток вывода, что избавляет от необходимости явного обращения к out.

session
Это объект типа HttpSession, связанный с запросом. Сессии создаются автоматически, и эта переменная существует даже если нет ссылок на входящие сессии. Единственным исключением является ситуация, когда вы отключаете использование сессий используя атрибут session директивыpage. В этом случае ссылки на переменную session приводят к возникновению ошибок при трансляции JSP страницы в сервлет.

application
Это объект типа ServletContext полученный через использование метода getServletConfig().getContext().

config
Это объект типа ServletConfig для текущей страницы.

pageContext
В JSP представлен новый класс PageContext для изолированного использования специфических особенностей сервера, таких как более эффективные JspWriters. Идея заключается в том, что если вы обращаетесь к ним через этот класс, а не непосредственно, ваш код может исполняться на «обычных» движках сервлет/JSP.

page
По сути является синонимом для this, и не нужен при работе с Java. Эта переменная создавалась с расчетом на перспективу, когда возможно появятся другие языки программирования скриптов, отличные от Java.

Давайте все-таки посмотрим на наше творение в действии. Скомпилировать наш сервлет можно командой

javac –cp .;servlet-api.jar students\web\*.java

После этого поместим наш класс HelloWorldServlet в каталог \webapps\studentsApp\WEB-INF\students\web\. А файл hello.jsp в корневой каталог нашего приложения — \webapps\studentsApp.
Теперь наше дерево каталогов несколько проще (мы не используем некоторые классы)

WEB-INF classes students web -HelloWorldServlet.class -web.xml -hello.jsp

< strong > WEB - INF

classes

students

HelloWorldServlet . class

Web . xml

Hello . jsp < / strong >

Уже известный файл web.xml будет выглядеть точно так же, как и в предыдущей части

hello hello /hello

< ! DOCTYPE web - app PUBLIC "-//Sun Microsystems, Inc.//DTD

Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd" >

< web - app >

< servlet >

< servlet - name > hello < / servlet - name >

< servlet - class > students . web . HelloWorldServlet < / servlet - class >

< / servlet >

< servlet - mapping >

< servlet - name > hello < / servlet - name >

< url - pattern > / hello < / url - pattern >

< / servlet - mapping >

< / web - app >

Запускаем Tomcat и потом попробуйте вызвать наше приложение по URL
http://localhost:8080/studentsApp/hello

Если же хотите увидеть мое имя используйте такой URL
http://localhost:8080/studentsApp/hello?name=Anton
Свое имя можно подставить потом 🙂

Custom Tag

Теперь мы можем окунуться немного глубже в JSP. Как вы уже наверняка заметили JSP представляет собой эдакую смесь Java-кода и тэгов HTML. При увеличении сложности логики представления (а JSP используется именно в качестве представления – но даже представление может иметь достаточно изощренную логику – цвета, шрифты и прочая) страница из более-менее понятного HTML превращается в «макароны по-флотски». И дизайнер уже не будет способен что-либо понять. Абсолютно избавиться от логики в JSP скорее всего не получится, но как-то «причесать» код и использовать более удобные средства – такое решение существует. И оно называется CustomTags. По сути это упрощение конструкций JSP, которого хотелось достичь.

Давайте рассмотрим несложный пример того, как можно написать и задействовать свой собственный тэг. Для этого нам потребуется три шага:

  1. Написать TLD-файл (Tag Library Definition) – файл описателя библиотеки тэгов.
  2. Написать класс для реализации самого тэга
  3. Исправить HTML-файл

Итак. Файл TLD имеет расширение.tld и обычно развертывается внутри каталога WEB-INF в каталоге вашего приложения. Хотя можно разместить и в другом. Если у вас много таких файлов, то для них можно предусмотреть отдельный каталог. Вот наш вариант hello.tld.

1.0 1.2 Sample Tag Library /SimpleTagLibrary Example of tag for HelloWorld hello students.web.tag.HelloTag empty Hello World Tag example name false true

< taglib xmlns = "http://java.sun.com/xml/ns/j2ee"

xmlns : xsi = "http://www.w3.org/2001/XMLSchema-instance"

xsi : schemaLocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"

version = "2.0" >

< tlib - version > 1.0 < / tlib - version >

< jsp - version > 1.2 < / jsp - version >

< short - name > Sample Tag Library < / short - name >

< uri > / SimpleTagLibrary < / uri >

< description >

Example of tag for HelloWorld

< / description >

< tag >

< name > hello < / name >

< tag - class > students . web . tag . HelloTag < / tag - class >

< body - content > empty < / body - content >

< description >

Hello World Tag example

< / description >

< attribute >

< name > name < / name >

< required > false < / required >

< rtexprvalue > true < / rtexprvalue >

< / attribute >

< / tag >

< / taglib >

Как вы наверно заметили из описания тэг – это класс HelloTag. Именно он отвечает за отображение информации. Давайте напишем его.

package students.web.tag; import java.io.IOException; import javax.servlet.jsp.JspException; import javax.servlet.jsp.JspTagException; import javax.servlet.jsp.tagext.TagSupport; public final class HelloTag extends TagSupport { private String name = null; public int doStartTag() throws JspException { try { if (name == null) { pageContext.getOut().write("Hello, world!"); } else { pageContext.getOut().write("Hello, world! I"m " + name); } } catch (IOException ioe) { throw new JspTagException(ioe.getMessage()); } return SKIP_BODY; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void release() { super.release(); name = null; } }

package students . web . tag ;

import java . io . IOException ;

import javax . servlet . jsp . JspException ;

import javax . servlet . jsp . JspTagException ;

import javax . servlet . jsp . tagext . TagSupport ;

public final class HelloTag extends TagSupport {

private String name = null ;

public int doStartTag () throws JspException {

try {

if (name == null ) {

pageContext . getOut () . write ("Hello, world!" ) ;

} else {

pageContext . getOut () . write ("Hello, world! I"m " + name ) ;

} catch (IOException ioe ) {

throw new JspTagException (ioe . getMessage () ) ;

return SKIP_BODY ;

public String getName () {

return name ;

public void setName (String name ) {

this . name = name ;

public void release () {

super . release () ;

name = null ;

}

}

Для сборки нашего сервлета и нового тэга нам потребуется более сложная строка

javac –cp .;servlet-api.jar;jsp-api.jar students\web\*.java students\web\tag\*.java

Новую библиотеку jsp-api.jar можно взять там же где и servlet_api.jar – в \common\lib. Теперь, чтобы подключить наш тэг к приложению, необходимо прописать нашу библиотеку в файле web.xml

Welcome to Students personnel Welcome to Students personnel Hello students.web.HelloWorldServlet Hello /hello http://www.someurl.ru /WEB-INF/hello.tld

xml version = "1.0" encoding = "ISO-8859-1" ?>

< web - app >

< display - name > Welcome to Students personnel < / display - name >

16 ответов

Технология JSP является частью Java технологии семьи. Страницы JSP: скомпилирован в сервлеты и может вызывать Компоненты JavaBeans (beans) или Компоненты Enterprise JavaBeans (предприятие beans) для выполнения обработки на сервере. Таким образом, JSP технология является ключевым компонентом масштабируемая архитектура для веб-приложения.

A: Технология JavaServer Faces - это структура для создания пользовательских интерфейсов для веб-приложений. JavaServer Faces технология включает в себя:

Набор API для: представления пользовательского интерфейса компонентов и управления их состоянием, обработки событий и проверки ввода, определение навигации по страницам и поддержки интернационализации и доступность.

Пользовательский тег JavaServer Pages (JSP) библиотека для выражения JavaServer Интерфейс Faces на странице JSP.

JSP - это специализированный сервлет.

JSF - это набор тегов, которые вы можете использовать с JSP.

С точки зрения браузера/клиента

JSP и JSF выглядят одинаково, поскольку в соответствии с требованиями приложений JSP больше подходит для приложений, основанных на запросах.

JSF предназначен для более богатых веб-приложений, основанных на событиях. Я вижу событие более зернистым, чем запрос/ответ.

С точки зрения сервера

Страница JSP преобразуется в сервлет и имеет минимальное поведение.

Страница JSF преобразуется в дерево компонентов (специализированным FacesServlet), и он следует за жизненным циклом компонента, определенным спецификацией.

Сервлеты:

API Java Servlet позволяет разработчикам Java писать серверный код для доставки динамического веб-контента. Как и другие проприетарные веб-серверы API, API-интерфейс Java Servlet предлагает улучшенную производительность по сравнению с CGI; однако он имеет некоторые ключевые дополнительные преимущества. Поскольку сервлеты были закодированные в Java, они обеспечивают объектно-ориентированный подход (OO) и, что более важно, могут работать на любой платформе. Таким образом, код был переносимым на любой хост, поддерживающий Java. Сервлеты в значительной степени способствовали популярности Java, поскольку он стал широко использоваться технологии для разработки веб-приложений на стороне сервера.

JSP построен поверх сервлетов и обеспечивает более простой, основанный на странице решение для создания большого количества динамического содержимого HTML для Интернета пользовательских интерфейсов. JavaServer Pages позволяет веб-разработчикам и дизайнерам просто редактировать HTML-страницы со специальными тегами для динамического Java части. JavaServer Pages работает, имея специальный сервлет, известный как контейнер JSP, который установлен на веб-сервере и обрабатывает все Запросы просмотра страницы JSP. Контейнер JSP переводит запрошенный JSP в код сервлета, который затем скомпилирован и сразу же выполняется. Последующие запросы на одну страницу просто вызовут сервлет выполнения для страницы. Если в JSP на сервере внесено изменение, запрос для его просмотра запускается другой перевод, компиляция и перезапуск сервлет времени выполнения.

JavaServer Faces - стандартная среда Java для создания пользователя интерфейсы для веб-приложений. Самое главное, это упрощает разработка пользовательского интерфейса, который часто является одним из наиболее сложные и утомительные части разработки веб-приложений.
Хотя можно создавать пользовательские интерфейсы, используя основополагающие Веб-технологии Java (такие как сервлеты Java и страницы JavaServer) без всеобъемлющей структуры, предназначенной для корпоративных веб-сайтов разработки приложений, эти основные технологии часто могут привести к проблемы развития и обслуживания. Что более важно, когда разработчики достигнут решения по качеству производства, тот же набор проблем, решаемых JSF, будет решен в нестандартный. JavaServer Faces предназначен для упрощения разработка пользовательских интерфейсов для веб-приложений Java в следующими способами:
Он обеспечивает компонентную, клиент-независимый подход к созданию веб-пользователя интерфейсов, что повышает производительность и простоту использования разработчика.
Это упрощает доступ и управление данными приложения из Веб-интерфейс пользователя.
Он автоматически управляет пользовательским интерфейсом состояния между несколькими запросами и несколькими клиентами в простой и ненавязчивый способ.
Он обеспечивает структуру разработки, которая дружелюбный к разнообразной аудитории разработчиков с различными наборами навыков.
В нем описывается стандартный набор архитектурных шаблонов для сети приложение.

Есть также ситуации, когда вы можете поддержать JSP над JSF. Характер применения должен быть решающим фактором для выбора технологии.

Если у вас богатое взаимодействие с графическим интерфейсом и много требуемых сценариев Java, то вы можете использовать JSF. В принципе, если ваша архитектура графического интерфейса похожа на компонентный, ориентированный и даже управляемый как Swing, тогда JSF является лучшим.

Если приложение является простой отправкой формы, не требуется много взаимодействия с графическим интерфейсом, тогда JSP может преуспеть, если изучение новой технологии является накладными расходами, а также сложной структурой нет необходимости.

Java Server Pages (JSP) - это технология Java, которая позволяет веб-разработчикам и дизайнерам быстро разрабатывать и легко поддерживать насыщенные информацией динамические веб-страницы, которые используют существующие бизнес-системы. Технология JSP отделяет пользовательский интерфейс от генерации контента, позволяя дизайнерам изменять общий макет страницы без изменения базового динамического контента.

Facelets - это первый не-JSP язык объявления страниц, разработанный для JSF (Java Server Faces), который предоставил разработчикам JSF более простую и мощную модель программирования по сравнению с JSP. Это решает различные проблемы, возникающие в JSP для разработки веб-приложений.

Вот таблица, которая сравнивает особенности скриптов и лицевых граней:

Jsp также имеет встроенный код сервлета, который не нуждается в какой-либо внешней компиляции, которую он может запускать напрямую. Изменения вступят в силу в jsp непосредственно в браузере.

Сервлет необходимо скомпилировать (т.е. он будет иметь определенное создание класса)

Jsf - это компонент представления MVC Framework

JSP - это компонент View MVC (Model View Controller). Контроллер принимает входящий запрос и передает его в Модель, которая может быть bean, которая делает доступ к базе данных. Затем JSP форматирует вывод с использованием HTML, CSS и JavaScript, и затем результат отправляется обратно запрашивающему.

JSP:means HTML+Java Code:

JSP имеет собственный жизненный цикл jsp_init() jsp_service() jsp_destroy

После первого запроса JSP конвертируется в.java файл. Существует три типа тегов, которые мы используем. 1.) безскриптовый

Здесь разработчик может объявить все те вещи, которые разработчик хочет взять с собой.

2.) Тег выражения

Здесь разработчик может использовать некоторые данные, относящиеся к печати

Здесь разработчик может объявить некоторые связанные с методом данные.

Servlet:

Сервл имеет собственный жизненный цикл.

Init() service() destroy()

После первого контейнера запроса будут считываться данные из файла web.xml то после приветствия заполнение будет отображаться.
Теперь, после выполнения действия, он будет искать URL-адрес, и после этого процесса он будет искать конкретный сервлет там. будет выполняться операция обслуживания.

Example и JSTL Example . Отметим, что Tomcat – название программного сервера , варианта сервера apache , который автоматически конфигурируется и запускается при выполнении примеров, а example означает "пример". Большим достоинством среды NetBeans является то, что оригиналы всех примеров, открываемых в NetBeans, остаются в неприкосновенности – автоматически создаются копии примеров. Поэтому даже если вы внесете исправления в исходный код проекта с примером, это не повлечет изменений в новом проекте с таким же примером.

Для правильной работы серверных примеров требуется, чтобы на компьютере была установлена работа с Интернет . Реально выходить в Интернет не надо, идет соединение http://localhost:8084// . Но после запуска другого серверного приложения идет соединение по тому же адресу, поэтому документ берется из буфера – и показывается документ, созданный предыдущим приложением. Для показа правильного документа требуется нажать в браузере кнопку "обновить" , и в случае автономной работы в появившемся диалоге, предлагающем выбрать режим работы, выбрать "Подключиться" . Реального соединения с Интернет для адреса http://localhost:8084// не будет – все коммуникации станут проходить локально.

Первый из примеров иллюстрирует базовые конструкции JSP , его можно просмотреть, создав проект File/New Project…/ Samples/J2EE1.4/ Web /Tomcat JSP Example .

Второй пример – надстройка над JSP , специальный набор тегов JSP , разработанный группой экспертов для облегчения разработки серверных приложений . Пример можно просмотреть, создав проект File/New Project…/ Samples/J2EE1.4/Web / JSTL Example .

Порядок примеров в мастере создания приложений прямо противоположный рассматриваемому нами - сначала предлагается использовать JSTL как наиболее развитое средство, затем – JSP как средство более низкого уровня, и только затем Servlet – как средство еще более низкого уровня. Мы используем при рассмотрении обратный порядок, так как JSP использует сервлеты , а JSTL является надстройкой над JSP .

Рассмотрим подробнее первый пример.

Как и в предыдущем случае, при нажатии на гиперссылку "Execute" выполняется соответствующий пример – в данном случае запускается страница JSP . А при нажатии гиперссылки Source показывается HTML -страница с примерным видом исходного кода.

Страницы JSP представляют обычные HTML -документы, но имеющие расширение имени файла . jsp , а не. html или.htm . Это – заготовка HTML -документа, который будет показан пользователю-клиенту. При создании клиентского HTML -документа в этой заготовке выражения в фигурных скобках после знака доллара вычисляются, а в HTML -документ подставляется строковое представление результата.

Например, выражение вида ${1 + 2} выдаст в соответствующее место документа символ 3. Последовательность \$ означает, что выражение ${…} не вычисляется, а рассматривается как строка.

Имеется ряд встроенных в JSP тегов (объектов Java ):

  • request – запрос. Тип объекта - класс, реализующий интерфейс javax. servlet .http.HttpServletRequest .
  • response – ответ на запрос. Тип объекта - класс, реализующий интерфейс javax. servlet .http.HttpServletResponce .
  • pageContext – контекст страницы JSP . Обеспечивает доступ к пространству имен и элементам страницы (тегам, атрибутам). Тип объекта - класс javax. servlet . jsp .PageContext .
  • session – сессия (сеанс связи клиента с сервером). Тип объекта - класс, реализующий интерфейс javax. servlet .http.HttpSession
  • application – приложение. Тип объекта - класс, реализующий интерфейс javax. servlet .ServletContext
  • out – выходной поток. Тип объекта - класс javax. servlet . jsp .JspWriter
  • config – объект конфигурации сервлета для текущей страницы. Тип объекта - класс, реализующий интерфейс javax. servlet .ServletConfig
  • page – объект, обрабатывающий запрос для данной страницы. Тип объекта - класс Object .

Данные объекты применяются в виде

<%@ имяОбъекта параметр1=значение1 параметр2=значение2 ... %>

Пример их использования:

<%@ page session=true import="java.util.*" %>

Имеется возможность задания сценариев (интерпретируемого кода) с помощью специальных определений вида

<%@ код %>

Где код - сценарий Java для работы с документом или вычислений. Например,

<% for(int i=0; i

В частности, разрешается задавать собственные теги вида

<%@ имяБиблиотеки prefix="имяОбъекта" uri="путь к библиотеке" %>

После чего разрешается использовать теги вида < имяОбъекта:оператор>

Так делается в примере использования оператора out в JSTL Example . Используется пользовательский объект c (сокращение от customer - " покупатель "), задаваемый как prefix ="c", и оператор out , заданный в библиотеке taglib по адресу uri ="http://java.sun.com/jsp/jstl/core ":

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

Отметим, что соответствующие библиотеки уже добавлены в проект. Для примера out это пакет org. apache .taglibs.standard.tag.el.core .

После запуска данного приложения в появившемся документе в списке Examples это первый пример - General Purpose Tags. При переходе по данной гиперссылке мы получаем пример


Рис. 10.6.

При нажатии на "шестеренки" получаем результат работы программы:


Рис. 10.7.

Соответствующий фрагмент исходного кода этого JSP -документа выглядит так:

no cell phone specified

В этом примере используется объект customer – " покупатель ", заданный в файле Customer . java , расположенном в пакете org. apache .taglibs.standard.examples. beans . То есть самом первом в Source Packages пакете примера. А также объект customers – "покупатели", заданный в файле Customers. java , расположенном в том же пакете.

В классе customer заданы поля lastName , phoneHome, phoneCell и другие. А также ряд методов, которые также можно вызывать в сценарии. С помощью оператора forEach (заданного аналогично оператору out ) осуществляется перебор всех объектов customer , агрегированных в объект customers - список покупателей. А с помощью тега c:out осуществляется вывод необходимой информации в документ.

В JSP имеется огромное количество возможностей. Это тема для отдельной книги. В данном учебном пособии данная технология затронута совсем немного – просто в порядке информирования о ее существовании и некоторых возможностях.

Точно так же, для программирования в локальных и глобальных компьютерных сетях в пакете java . net имеется огромное количество средств разного уровня, описание которых требует отдельной книги. Это и Web -адресация (классы URL, HttpURLConnection, URI, JarURLConnection, URLClassLoader ), и IP-адресация (классы InetAddress, InetAddress4, InetAddress6, NetworkInterface), и управление соединениями через сокеты (классы Socket, SocketAddress, InetSocketAddress, ServerSocket, SocketPermission ). Классы NetPermission , Authentificator и PasswordAuthentification обеспечивают поддержку авторизации ( запрос и обработку имени и пароля).

Кроме упомянутых возможностей пакета java . net имеется