Как любой начинающий 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
20 комментариев к статье "JSTL для написания JSP страниц"
Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.
Что означает фраза: “…желательно не использовать какие то вычисления или обработки данных на jsp странице, это нужно выполнять на стороне сервера…”?
Из твоих слов выходит что скриплеты выполняются на клиентской части?
И какие проблемы безопасности могут возникнуть при использовании скриплетов?
Дорогой критик :)
Объясни как ты протестируешь Java вставку в jsp страницу???
Это я и имел в виду…
И совет, прежде чем критиковать, выучи, ладно?
Молодой, амбициозный человек!
Вместо огрызания – скажи спасибо Борису за дельное замечание и подправь статью. У него, кстати, довольно нейтральный тон.
А дебажить jsp можно так же как и java-код. В eclipse ставь точку останова на нужной java-вставке jsp файла и вперёд, в броузер ;)
Я не огрызаюсь,
И хотел чтобы мне объяснили рас я не знаю как протестировать java вставку.
Вы прям гений, и знаете что такое дебаг, но я говорил о простых модульных тестах. Может расскажите как их тестить?
Александр, при чем здесь тесты вообще? Вам указали на конкретные фундаментальные ошибки в статье! Jsp – это серверный код, и безопасность скриплетов = безопасноть сервлетов. У Вас очень хороший сайт, но принебрижение фидбеком, особено по делу – его не красит.
МЫ возможно друг друга не понимаем. Я не говорю, что засечания которые сделали не правильные, я лишь говорю, что не рас встречал в книгах советы чтобы java вставки не использовать, так как их тяжело контролировать, лучше использовать taglibs.
Александр, Вы действительно не понимаете ни меня, ни тех кто ранее отписался. :(
Никто вообще не дискутирует на тему правильности или неправильности использования скриплетов! В эту сторону Вы сами почему-то пытаетесь увести разговор. У Вас в статье – ошибки….
>>По этому рекомендуется использовать jstl и желательно не использовать какие то вычисления или обработки данных на >>jsp странице, это нужно выполнять на стороне сервера.
Из этой фразы следует, что jsp это не серверный код, что на самом деле не так!
>>SP можно использовать Java вставки кода, но это является плохим тоном программирования а также не очень >>безопасно
Вот здесь Вы утверждаете, что скриплеты небезопасны! Всё в этом мире небезопасно, но относительно сервлетов – абсолютно никакой разницы нет, т.к. код скриплета просто транслируется в сервлет-код. Можете сделать проект в нетбинсе и посмотреть каким образом это происходит.
Если Вы хотите написать чем скриплеты – бедпрактис, я буду рад почитать. У меня же нет здесь особого мнения, т.к. я не программирую в jsp.
да, соглашусь с вами,тут неправильно я сказал. В будущем перепишу статью. Но как я уже говорим мы возможно друг друга не понимаем, так и оказалось, я вас не совсем понял, но когда вы внятно и нормально объяснили, все стало ясно. Прошу прощение за моё непонимание.
Статью не переписал.
+1
И да, по поводу модульного тестирования вставок…. Это не обособленная программная единица, что бы её тестить. Вы же не тестируете метод по частям?!
Хотите оттестировать скриплет – тестируй весь jsp. Например с помощью httpunit.
Тоесть вы щитаете, что использование <% java code %> в jsp это нормальный тон программирования?))
Да, написано, так как написано :)
Единственная проблема с java кодом на странице jsp – поддержка. В случае больших и сложных страниц – читаемость и управляемость очень низкая.
И, конечно же, страницы рендерятся на сервере.
Вы хоть знаете значение слова рендерится?
Рендерится она в браузере, а обрабатывается на сервере.
Привет! Саш, замечательная статья. Все замечательно описано! Хотелось бы подчеркнуть, что помимо JSTL здесь еще используется EL который можно тоже чуть описать. :)
http://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html
Спасибо, за идею для урока :)
жесть,сколько борьбы в комментах, причем на пустом месте. Стоило бы поучиться у stackoverflow, где отвечающие пишут “please try it”,”let me know” и т.д. Не знаю зачем они это делают, но довольно приятная атмосфера создается.
Дело говорит человек! Пальцы и амбиции в комментах портят впечатление.
Если не выполнить Шаг 2, то будет кидать 500 ошибку:
java.lang.ClassNotFoundException: org.apache.jsp.index_jsp
The server encountered an unexpected condition that prevented it from fulfilling the request.