На JSP странице можно пользоваться двумя видами комментариев. <%----%> и <!---->.
Первый это jsp комментарий, второй это html комментарий.
Пример программы:
Откроем код страницы в Chrome нажав F12 и убедимся, что JSP комментария там нет.

Видим, что в коде в браузере присутствует только <!----> комментарий.
Тег <%! %>
Поясним на примере программы:
Тег <%= %>
Тег вставляет содержимое в этом теге в pw.write();
Пример программы:
Вывод:

Тег <% %>
В этом теге пишеться обычный java код, который окажеться в doGet в сгенерированном по этой jsp странице сервлете.
Например, создадим куки в этом теге, отправим его клиенту в браузер и выведем все куки клиента.
Откуда взялись request и response пока не обращайте внимание, дальше это рассмотрим. Просто знайте, что это те request и response, которые являются параметрами в методе doGet.
Пример программы:
Вывод:

Тег <%@%>
С помощью <%@%> мы можем устанавливать некоторые параметры страницы.
Пример программы:
Вывод:

Еще с помощью этого тега можно включать другую страницу в эту страницу или перенаправлять (jsp версии include() и forward() в сервлете).
Но лучше пользоваться action дерективой jsp:include (о которых поговорим в другом уроке).
Первый вариант хоть и лучше тем, что можно, например, использовать переменные и методы в этом сервлете из включаемого сервлета после того, как мы его включили, но просто лучше не надо 😉
Пример программы:
Вывод:

Видим, что страница FirstJSP.jsp включилась два раза.
Методы init(), destroy(), service() в JSP
Вместо методов init(), destroy(), service() в jsp методы jspInit(), jspDestroy(), _jspService().
Разницы никакой, но _jspService() здесь уже нельзя переопределять.
Давайте переопределим jspInit() и jspDestroy().
Переопределяются они ясное дело в <%! %> поскольку, как мы помним, init, service и destroy переопределяются за пределами doGet.
Пример программы:
Вывод:

Как видим, при переходе на страницу был вызван jspInit. Если что то изменить в коде страницы и перейти на нее, снова вызовется jspDestroy. Это случилось.