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

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.

ПОХОЖИЕ ПУБЛИКАЦИИ

    None Found

101490
11/04/2013

20 комментариев к статье "JSTL для написания JSP страниц"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  4. Если не выполнить Шаг 2, то будет кидать 500 ошибку:
    java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
    The server encountered an unexpected condition that prevented it from fulfilling the request.

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

Сайт использует cookie-файлы для того, чтобы вам было удобнее им пользоваться. Для продолжения работы с сайтом, вам необходимо принять использование cookie-файлов.

Я ознакомлен(а)