JSP (JavaServer Pages) - это технология представления на основе Java, работающая на сервере, которая позволяет писать текст шаблона на (клиентские языки, такие как HTML, CSS, JavaScript и т. Д.) И взаимодействовать с внутренним кодом Java.

JSP (JavaServer Pages)

JSP - это технология представления Java, работающая на сервере, которая позволяет писать текст шаблона на языках клиента, таких как html, css, javascriptи так далее. JSP поддерживает так называемые taglibs, которые поддерживаются фрагментами кода Java, с помощью которого вы может контролировать поток страниц и / или выводить динамически (программно). Хорошо известным тегом taglib является JSTL. JSP также поддерживает язык выражений(el), с синтаксисом, подобным ${}, который можно использовать для доступа к данным бэкэнда (фактически, к атрибутам, которые доступны в области страницы, запроса, сеанса и приложения), в основном в сочетании с метками тегов.

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

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

Установка JSP

Для запуска JSP вам необходимо:

  • JDK (JRE достаточно, только если на сервере есть собственный компилятор).
  • Контейнер сервлетов.
  • По желанию, интегрированная среда разработки с поддержкой Java EE.

Как установить JDK или JRE, описано здесь: https: //docs.oracle.com/javase/9/install/overview-jdk-9-and-jre-9-installation.htm

Есть несколько контейнеров сервлетов.

Существуют также серверы приложений Java EE, которые, в свою очередь, также содержат контейнер сервлета помимо других API Java EE, таких как JSF, JPA, EJB и т. Д. См. Также Что такое Java EE?

Установка контейнера сервлетов - это всего лишь вопрос загрузки файла zip / gz и его извлечения в любом месте по вашему выбору.

Как правило, вы также хотели бы использовать IDE, например Eclipse, IntelliJили Netbeans, поэтому вам не нужно вручную компилировать и создавать исходные файлы с помощью {{X0} }вновь и вновь. Достойные интегрированные среды разработки имеют плагины для плавной интеграции контейнера сервлета и импорта необходимых API-интерфейсов Java EE в путь сборки проекта. Смотрите также Как импортировать javax API .servlet в моем проекте Eclipse?

Привет, мир

В этом примере используются 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в {{X0 } } . Если это по-прежнему не работает, обратитесь к jstlдля получения более подробной информации.

Скриплеты

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

<%@ 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 легко написать неуправляемый код, поэтому некоторые лучшие практикибыли разработаны. Основной практикой является использование JSP в качестве представления в шаблоне проектирования контроллера представления модели. Это иногда называют дизайном модели 2, в котором сервлеты используются в качестве контроллера. Модель может быть JavaBeans, POJO или даже объектами JPA. Другие лучшие практики включают в себя отказ от скриптов, создание повторно используемых тегов шаблонов и использование JSTL, чтобы избежать повторного изобретения колеса.

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

Для предварительной загрузки данных для отображения в JSP и последующей обработки отправки формы вы хотели бы использовать сервлет. Подробнее см. На servlets.

Javascript

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

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

Если вы откроете эту страницу в браузере и сделаете View Source, вы увидите что-то вроде:

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

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

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

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

См. Также Доступ к переменным Java / Servlet / JSP / JSTL / EL в JavaScript.

Facelets

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

Интернет ресурсы

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

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