JavaRush /Курсы /JSP & Servlets /JSP: декларативный способ задания сервлета

JSP: декларативный способ задания сервлета

JSP & Servlets
13 уровень , 0 лекция
Открыта

1.1 Знакомство с JSP

Есть два популярных способа написания сервлета: императивный и декларативный. С первым мы уже разобрались — это, собственно, Servlet. Второй называется JSP (Java Server Pages), с ним мы сейчас и познакомимся.

Пример JSP сервлета:


<html> 
    <body> 
        <% out.print(2*5); %> 
    </body> 
 </html> 

Не очень-то похоже на привычный нам классический Servlet, не правда ли? Так и есть. JSP – это HTML-страница со вставками Java-кода (выделено зеленым).

Видишь ли, если в сервлете у тебя много Java-кода и мало HTML-кода, тогда тебе удобнее применять классический сервлет. А что делать, если тебе нужна большая HTML-страница, в которой всего пара строк меняется сервером?

В этом случаем проще всего было бы создать эту HTML-страницу и каким-то образом выполнить Java-код на сервере прямо в ней.

1.2 Компиляция JSP

Давай рассмотрим еще один пример:


<html> 
  <body> 
 <%
 double num = Math.random(); if (num > 0.95) {
 %>
         <h2>Ты счастливчик, user!</h2><p>(<%= num %>)</p>
 <%
 }
 %> 
  </body> 
</html> 

Мы получаем случайное число, и если оно больше 0.95, то выводим текст "Ты счастливчик, user!"

Синим цветом тут выделен Java-код. Обычным (не выделен) – HTML-код, а красным — служебные теги, которые помогают понять, где Java-код, а где HTML.

Замечаешь некую странность? Закрывающая фигурная скобка "}" находится в другом "блоке кода". Как правильно писать такой код? Как это вообще работает?

Ответ будет супер простым :)

Веб-сервер после того, как найдет у себя JSP-файл, скомпилирует его в классический сервлет. На основе приведенной выше JSP-страницы будет сгенерирован такой Servlet:


public class HelloServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response)  throws Exception {
    PrintWriter out = response.getWriter(); 
    out.print("<html> "); 
    out.print("<body>"); 
        double num = Math.random();
        if (num > 0.95) {
            out.print("<h2>Ты счастливчик, user! </h2><p>(" + num + ")</p>");
        }
    out.print("</body>"); 
    out.print("</html>"); 
    }
}

Веб-контейнер просто сгенерировал код сервлета, где HTML превратился в текст, а вставки Java-кода стали обычным Java-кодом!

Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
5 мая 2025
как это создать!?
25 июня 2024
Прикольно) Но говорят jsp уже никто не использует
Justinian Уровень 41 Master
3 июня 2025
используют, реже, но реально встретить в продакшене. Теория нужна скорее всего для понимания что это, почему не нужно писать это в новых проектах без сильной необходимости, какие best / bad practice. Приблизительно с той же оперы что и Date класс или finalize, знать что это, чтобы случаем не использовать 😅
Justinian Уровень 41 Master
3 июня 2025
При этом также есть интересный момент, абстрагировано от ветки, просто к теме JSP. У начинающих программистов иногда встречается злоупотребление словом "устаревшее". Когда опытный программист на работе или на собесе особенно услышит "та это технология устаревшая и поэтому не используется", может сработать триггер и вызвать предубеждение сразу, поскольку это маркер тех, кто делает первые шаги, и не освоил программирование даже в объеме trainee. Рассмотрим возможные фразы. "Эта технология устаревшая" - ок "Эта технология устаревашая и почти не используется" - ок "Эта технология устаревшая и не используется" - 50/50, вы должны быть на 100% уверены что технология не используется и это должно соответствовать действительности, иначе вопросы к говорящему, может ли он отвечать за свои слова. Если нет, как с ним работать, если скажет "та я сделал задачу", а на самом деле он ничего не делал и тд. (обратите внимание, вот выше написано "говорят уже никто не использует" маленькая сноска "говорят" но уже исправляет ситуацию, вопросы есть, но намного меньше. "эта технология устаревшая и ПОЭТОМУ не используется" - RED ALARM полундра свистать дополнительные вопросы наверх и предубеждение. А вдруг этот программист считает "все что новое круто" и будет добавлять в проект и все менять исходя из того что самое новое. Есть такая стадия у некоторых разработчиков, джава кор отстой, фреймворки это круто! Старые технологии отстой, новые круто! Инженеры инструменты оценивают не из круто / старый, а выбирают наиболее подходящие на данный момент. Часто, это действительно новые подходы, но выбор определяется не новизной, а преимуществами новых решений, и недостатками старых. Поэтому это и является ред флагом, страшно пускать на проект человека с ориентиром "все новое круто, не важно что и куда". В большинстве случаев, своими словами говорить можно и нужно, но вот из-за коллег с плохой репутацией нужно быть аккуратно в этом моменте.
Justinian Уровень 41 Master
3 июня 2025
Поэтому просто будьте внимательны в этой части, и если речь зайдет про Deprecated, то постарайтесь при возможности дать понять что вы знаете причины по которым произошло маркирование технологии как устаревшей, какие недостатки были, и какие инструменты предпочтительней и по каким причинам. Так вы покажете свою грамотность в выборе решений и получите плюсик к результату.