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

JSP (JavaServer Pages)

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

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

Когда 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 при щелчке правой кнопкой мыши и просмотре исходного кода в браузере), то, вероятно, ваш контейнер сервлета не поддерживает его из коробки (например, Кот). Вы можете установить его, просто опустив 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 и последующей обработки отправки формы вы хотели бы использовать сервлет. Для получения дополнительной информации см. Страницу информации о теге 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() в последующих запросах.

Facelets

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

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

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

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