На основе технологии Сервлета Java JSP (Страницы JavaServer) позволяет платформенно независимую разработку динамических веб-приложений.

JSP (страницы JavaServer)

JSP является технологией представления Java, работающей на сервере, который позволяет Вам писать текст шаблона на клиентских языках как HTML, CSS, JavaScript и так далее. JSP поддерживает так называемые taglibs, которые поддерживаются частями кода Java, с которым можно управлять потоком страницы и/или произвести динамично (программно). Известный taglib является JSTL. JSP также поддерживает Язык выражения (EL) с синтаксисом как ${} который может привыкнуть к данным бэкенда доступа (на самом деле, атрибуты, которые доступны на странице, запросе, сессии и областях действия приложения), главным образом в сочетании с taglibs.

Жизненный цикл

Когда JSP требуют впервые или когда веб-приложение запустит, контейнер сервлета скомпилирует файл JSP в расширение класса HttpServlet и используйте его в течение времени жизни веб-приложения. Можно найти сгенерированный исходный код в рабочем каталоге сервера. В, например, Tomcat, это /work каталог. По запросу JSP контейнер сервлета выполнит скомпилированный класс JSP и отправит сгенерированный вывод (обычно просто HTML/CSS/JS) через веб-сервер по сети к стороне клиента, которая в свою очередь отображает его в браузере.

Привет, мир

Этот пример использует JSTL и EL для отображения пользовательского IP и сегодняшней даты.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %> <jsp:useBean id="date" class="java.util.Date" /> <!DOCTYPE html> <html lang="en"> <head> <title>JSP Hello World</title> </head> <body> <h1>Hello</h1> <p>Welcome, user from <c:out value="${pageContext.request.remoteAddr}" /> <p>It's now <fmt:formatDate value="${date}" pattern="MM/dd/yyyy HH:mm" /> </body> </html> 

Сохраните его как /hello.jsp и откройте его http://localhost:8080/contextname/hello.jsp.

Если JSTL не работает (теги JSTL не анализируются/выполняются и все еще там в сгенерированном выводе HTML, когда Вы щелкаете правой кнопкой и Источник Представления в браузере), то, вероятно, Ваш контейнер сервлета не поддерживает его из поля (как Tomcat). Можно установить его, просто отбросив jstl-1.2.jar в /WEB-INF/lib. Если это все еще не работает, то отошлите информационную страницу JSTL для большего количества детали.

Scriptlets

Можно также встроить необработанный код Java в файле JSP с помощью scriptlets (они <% %> вещи).

<%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> <!DOCTYPE html> <html lang="en"> <head> <title>JSP Hello World</title> </head> <body> <h1>Hello</h1> <p>Welcome, user from <%= request.getRemoteAddr() %> <p>It's now <%= new SimpleDateFormat("MM/dd/yyyy HH:mm").format(new Date()) %> </body> </html> 

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

Предварительно загружающие данные и последующая обработка формы

Чтобы предварительно загрузить данные для дисплея в JSP и выполнить последующую обработку форму отправляют, требуется использовать Сервлет. Для большего количества детали посмотрите страницу информации о теге Сервлетов.

JavaScript

Важно понять, что JSP работает в веб-сервере, производя вывод HTML, и что JavaScript является частью вывода HTML, который работает в браузере только. Таким образом, JSP и JavaScript не работают в синхронизации, как Вы могли бы ожидать от кодирования. Для разрешения JavaScript "доступ" переменные JSP все, что необходимо сделать, должно позволить JSP/JSTL/EL распечатать его, как будто это - переменная JavaScript. Таким образом, любая функция JavaScript, когда-то выполняемая в браузере, может получить доступ к нему. Ниже примера печатает серверный идентификатор сессии как переменную JavaScript, использующую EL:

<script>var jsessionid = '${pageContext.session.id}';</script> 

Если Вы откроете эту страницу в браузере и сделаете Источник Представления, то Вы будете видеть что-то как:

<script>var jsessionid = '4C147636FF923CA7EA642F2E10DB95F1';</script> 

(обратите внимание, что те одинарные кавычки были таким образом обязательны для представления строкового значения JavaScript!)

Затем для разрешения "доступу" JSP переменные JavaScript необходимо передать переменную JavaScript обратно серверу с помощью Запроса HTTP, так как это - единственный способ отправить данные с браузера на веб-сервер. Вы могли:

  • используйте DOM HTML, чтобы управлять скрытым полем ввода и заполнить его данными и при необходимости отправить использование формы form.submit() так, чтобы это было доступно request.getParameter().
  • использовать window.location сделать "перенаправление" к новому URL с переменной JavaScript как параметр запроса.
  • использовать XMLHttpRequest для отправки асинхронного (ajax) запрашивают с переменной JS как параметр запроса.
  • позвольте JavaScript установить его как cookie так, чтобы это было доступно request.getCookies() в последующих запросах.

Facelets

Начиная с Java EE 6 за JSP следовал Facelets как технология представления по умолчанию для Java EE платформа MVC JSF (Поверхности JavaServer). Начиная с учебного руководства по Java EE 6 JSP не рассматривают подробно больше. Необходимо возвратиться к учебному руководству по Java EE 5, если Вы хотите изучить JSP. См. также http://stackoverflow.com/questions/4845032/wheres-the-official-jsp-tutorial.

Ресурсы онлайн

Часто задаваемые вопросы

Связанные страницы информации о теге