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

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

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

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

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

Установка JSP

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

  • JDK (JRE достаточно, только если на сервере есть собственный компилятор).
  • Контейнер сервлета.
  • Необязательно, IDE с поддержкой 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, поэтому вам не нужно вручную компилировать и создавать исходные файлы с помощьюjavacвновь и вновь. У достойных IDE есть плагины для беспрепятственной интеграции контейнера сервлетов и импорта необходимых API Java EE в путь сборки проекта. См. Также Как импортировать API javax.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 в/WEB-INF/lib. Если это все еще не работает, обратитесь к странице информации 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 и пост-обработку отправки формы, вы хотите использовать сервлет. Дополнительные сведения см. На странице информации о тегах сервлетов.

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-запроса, поскольку это единственный способ отправить данные из браузера на веб-сервер. Ты мог бы:

  • использовать 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 в качестве технологии представления по умолчанию для JSF среды Java EE MVC (JavaServer Faces). Начиная с учебника Java EE 6, JSP больше не рассматривается подробно. Вам нужно вернуться к руководству по Java EE 5, если вы хотите изучить JSP. См. Также https://stackru.com/questions/4845032/wheres-the-official-jsp-tutorial.

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

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

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