JSTL для написания JSP страниц

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

Шаг 1.

Как написать простое web-приложение с использованием JSP страниц вы найдете в статье «WEB-приложение на Java«.

Скачиваем проект с «WEB-приложение на Java» и на его примере я буду демонстрировать работу JSTL.

Шаг 2.

Добавим необходимую зависимость :

<dependency>
	<groupId>jstl</groupId>
	<artifactId>jstl</artifactId>
	<version>1.2</version>
</dependency>

Шаг 3.

В начало JSP страницы вы должны подключить JSTL core:

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

В моем случае JSP страница выглядит так:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>devcolibri.com</title>
</head>
<body>
    ${textA}
    ${textB}
</body>
</html>

Шаг 4. Синтаксис

1) Переменные

<c:set var="myName" value="Alex"/>

В этом случае у нас будет создана переменная которая будет иметь в значение «Alex»

Вызвать эту переменную можно так:

<h1>${myName}</h1>

В результате нам выведет содержимое переменной.

2) Операторы условий

<c:if test="${10 > 9}">
   <p>True<p>
</c:if>
<c:if test="${10 < 9}">
   <p>False<p>
</c:if>

Выше продемонстрировано пример if … else в виде jstl тегов, где:

test — это условие при котором оно будет выполнятся.

<c:set var="num" scope="session" value="10"/>
<c:choose>
    <c:when test="${num <= 0}">
       Если num <= 0
    </c:when>
    <c:when test="${num > 1000}">
        Если num > 1000
    </c:when>
    <c:otherwise>
        Если не одно условие не есть верно.
    </c:otherwise>
</c:choose>

Это choose который дает возможность выбора, в java аналог switch, choose имеет вложенный тег when  который отвечает за определенное действие при условии что test будет истинно.

3) Циклы

<c:forEach var="num" items="${list}">
    <p>${num}</p>
</c:forEach>

где:

${num} — суда присваиваются значения со списка list по очереди.

${list} — список значений(объектов).

Внимание!

Вы конечно можете использовать java вставки:

<%
    int a = 5;
    int b = a + 10;
%>

но если использовать такие вставки то вы не сможете контролировать ход действий или как то их отследить.

По этому рекомендуется использовать jstl и желательно не использовать какие то вычисления или обработки данных на jsp странице, это нужно выполнять на стороне сервера.

Полная документация по JSTL и примеры можно скачать тут: JSTL Documentation En.

Урок создан: 11 апреля 2013 | Просмотров: 43074 | Автор: Александр Барчук | Правила перепечатки


Добавить комментарий

Добавить комментарий

Ваш e-mail не будет опубликован.

Комментарии:

  • 18 июня 2013 в 23:49

    Борис

    Что означает фраза: «…желательно не использовать какие то вычисления или обработки данных на jsp странице, это нужно выполнять на стороне сервера…»?
    Из твоих слов выходит что скриплеты выполняются на клиентской части?
    И какие проблемы безопасности могут возникнуть при использовании скриплетов?

    • 19 июня 2013 в 10:39

      Александр Барчук

      Дорогой критик :)
      Объясни как ты протестируешь Java вставку в jsp страницу???
      Это я и имел в виду…
      И совет, прежде чем критиковать, выучи, ладно?

      • 01 октября 2013 в 16:19

        Прохожий

        Молодой, амбициозный человек!
        Вместо огрызания — скажи спасибо Борису за дельное замечание и подправь статью. У него, кстати, довольно нейтральный тон.
        А дебажить jsp можно так же как и java-код. В eclipse ставь точку останова на нужной java-вставке jsp файла и вперёд, в броузер ;)

        • 01 октября 2013 в 18:24

          Александр Барчук

          Я не огрызаюсь,
          И хотел чтобы мне объяснили рас я не знаю как протестировать java вставку.
          Вы прям гений, и знаете что такое дебаг, но я говорил о простых модульных тестах. Может расскажите как их тестить?

          • 23 января 2014 в 03:04

            Игорь

            Александр, при чем здесь тесты вообще? Вам указали на конкретные фундаментальные ошибки в статье! Jsp — это серверный код, и безопасность скриплетов = безопасноть сервлетов. У Вас очень хороший сайт, но принебрижение фидбеком, особено по делу — его не красит.

            • 23 января 2014 в 09:28

              Александр Барчук

              МЫ возможно друг друга не понимаем. Я не говорю, что засечания которые сделали не правильные, я лишь говорю, что не рас встречал в книгах советы чтобы java вставки не использовать, так как их тяжело контролировать, лучше использовать taglibs.

              • 23 января 2014 в 11:08

                Игорь

                Александр, Вы действительно не понимаете ни меня, ни тех кто ранее отписался. :(
                Никто вообще не дискутирует на тему правильности или неправильности использования скриплетов! В эту сторону Вы сами почему-то пытаетесь увести разговор. У Вас в статье — ошибки….

                >>По этому рекомендуется использовать jstl и желательно не использовать какие то вычисления или обработки данных на >>jsp странице, это нужно выполнять на стороне сервера.
                Из этой фразы следует, что jsp это не серверный код, что на самом деле не так!

                >>SP можно использовать Java вставки кода, но это является плохим тоном программирования а также не очень >>безопасно
                Вот здесь Вы утверждаете, что скриплеты небезопасны! Всё в этом мире небезопасно, но относительно сервлетов — абсолютно никакой разницы нет, т.к. код скриплета просто транслируется в сервлет-код. Можете сделать проект в нетбинсе и посмотреть каким образом это происходит.

                Если Вы хотите написать чем скриплеты — бедпрактис, я буду рад почитать. У меня же нет здесь особого мнения, т.к. я не программирую в jsp.

                • 24 января 2014 в 08:34

                  Александр Барчук

                  да, соглашусь с вами,тут неправильно я сказал. В будущем перепишу статью. Но как я уже говорим мы возможно друг друга не понимаем, так и оказалось, я вас не совсем понял, но когда вы внятно и нормально объяснили, все стало ясно. Прошу прощение за моё непонимание.

                  • 19 января 2016 в 15:44

                    Andrei

                    Статью не переписал.

                    • 06 марта 2016 в 11:00

                      Mikhail

                      +1

          • 23 января 2014 в 03:16

            Игорь

            И да, по поводу модульного тестирования вставок…. Это не обособленная программная единица, что бы её тестить. Вы же не тестируете метод по частям?!

          • 23 января 2014 в 03:24

            Игорь

            Хотите оттестировать скриплет — тестируй весь jsp. Например с помощью httpunit.

            • 23 января 2014 в 09:30

              Александр Барчук

              Тоесть вы щитаете, что использование < % java code %> в jsp это нормальный тон программирования?))

    • 01 октября 2013 в 16:13

      Прохожий

      Да, написано, так как написано :)
      Единственная проблема с java кодом на странице jsp — поддержка. В случае больших и сложных страниц — читаемость и управляемость очень низкая.
      И, конечно же, страницы рендерятся на сервере.

      • 17 октября 2013 в 14:44

        Вадег

        Вы хоть знаете значение слова рендерится?
        Рендерится она в браузере, а обрабатывается на сервере.

  • 24 февраля 2014 в 18:35

    Виталий

    Привет! Саш, замечательная статья. Все замечательно описано! Хотелось бы подчеркнуть, что помимо JSTL здесь еще используется EL который можно тоже чуть описать. :)
    http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html

  • 18 мая 2015 в 15:37

    знайко

    жесть,сколько борьбы в комментах, причем на пустом месте. Стоило бы поучиться у stackoverflow, где отвечающие пишут «please try it»,»let me know» и т.д. Не знаю зачем они это делают, но довольно приятная атмосфера создается.

    • 02 марта 2016 в 20:02

      Андрей

      Дело говорит человек! Пальцы и амбиции в комментах портят впечатление.