Содержание

Концепция: Пользовательский тег JSP

Введение

Пользовательские теги — это механизм расширения API JSP. Пользовательские теги позволяют декларативно расширять страницы JSP. Теги JSP реализуются в Java, но активируются в JSP посредством тегов, схожих с тегами HTML. Однако, в отличие от тегов HTML, теги JSP обрабатываются сервером, а не браузером клиента.

Пользовательские теги позволяют четко разграничить зоны ответственности между проектировщиками Web (разработчиками JSP) и программистами на Java. Программисты на Java реализуют пользовательские теги JSP. Проектировщики Web выбирают эти теги декларативно для активации реализации Java.

Проектировщик JSP «вызывает» код Java путем объявления тегов, а разработчик кода на Java создает код в обработчиках тегов, как показано на следующей диаграмме.

Для создания пользовательского тега разработчик кода на Java должен предоставить два объекта:

  • Обработчик тегов
  • Дескриптор библиотеки тегов

Обработчик тегов

Обработчик тегов — это класс, реализующий интерфейс Tag. Два библиотечных класса обеспечивают простое создание обработчиков тегов. Это классы javax.servlet.jsp.TagSupport и javax.servlet.jsp.BodyTagSupport. Класс TagSupport применяется для тегов без тела, класс BodyTagSupport — для тегов с телом.

Ниже приведен пример простейшей возможной реализации обработчика тегов.

Дескриптор библиотеки тегов

Для того чтобы страница JSP могла использовать пользовательские теги JSP, необходимо создать дескриптор библиотеки тегов. Это файл XML, развертываемый на Web-сервере вместе с обработчиками тегов.

Ниже приведен пример простого файла библиотеки тегов, содержащего дескриптор библиотеки тегов HelloWorld.

<?xml version="1.0" encoding="ISO-8859-1" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLScheme-instance"
xsi:schemaLocation="http://java. sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"

version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>simp</short-name>
<uri> http://www.inferdata.com/taglib/hello-world</uri>
<description>Простой пример пользовательского тега JSP</description>
<tag>
<name>hello</name>
<tag-class>com.inferdata.taglib.HelloWorld</tag-class>
<body-content>empty</body-content>
<description>Простой тег Hello world</description>
</tag>
</taglib>

Пример Spring Boot Hello World – JSP WAR — Leo Dev Blog

[INFO] Scanning for projects…

[INFO]

[INFO] ————————————————————————

[INFO] Building Spring Boot Web JSP Example 0.0.1

[INFO] ————————————————————————

[INFO]

[INFO] >>> spring-boot-maven-plugin:1. 5.9.RELEASE:run (default-cli) > test-compile @ spring-boot-web-jsp >>>

[INFO]

[INFO] — maven-resources-plugin:2.6:resources (default-resources) @ spring-boot-web-jsp —

[INFO] Using ‘UTF-8’ encoding to copy filtered resources.

[INFO] Copying 1 resource

[INFO] Copying 1 resource

[INFO]

[INFO] — maven-compiler-plugin:3.1:compile (default-compile) @ spring-boot-web-jsp —

[INFO] Nothing to compile — all classes are up to date

[INFO]

[INFO] — maven-resources-plugin:2.6:testResources (default-testResources) @ spring-boot-web-jsp —

[INFO] Using ‘UTF-8’ encoding to copy filtered resources.

[INFO] skip non existing resourceDirectory D:\workspace\JAVA\TESTAPPS\spring-boot-examples-ld\spring-boot-web-jsp\src\test\resources

[INFO]

[INFO] — maven-compiler-plugin:3.1:testCompile (default-testCompile) @ spring-boot-web-jsp —

[INFO] No sources to compile

[INFO]

[INFO] <<< spring-boot-maven-plugin:1. 5.9.RELEASE:run (default-cli) < test-compile @ spring-boot-web-jsp <<<

[INFO]

[INFO] — spring-boot-maven-plugin:1.5.9.RELEASE:run (default-cli) @ spring-boot-web-jsp —

[INFO] Attaching agents: []

23:30:52.113 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings — Included patterns for restart : []

23:30:52.116 [main] DEBUG org.springframework.boot.devtools.settings.DevToolsSettings — Excluded patterns for restart : [/spring-boot-starter/target/classes/, /spring-boot-autoconfigure/target/classes/, /spring-boot-starter-[\w-]+/, /spring-boot/target/classes/

, /spring-boot-actuator/target/classes/, /spring-boot-devtools/target/classes/]

23:30:52.116 [main] DEBUG org.springframework.boot.devtools.restart.ChangeableUrls — Matching URLs for reloading : [file:/D:/workspace/JAVA/TESTAPPS/spring-boot-examples-ld/spring-boot-web-jsp/target/classes/]

 

  .   ____          _            __ _ _

/\\ / ___’_ __ _ _(_)_ __  __ _ \ \ \ \

( ( )\___ | ‘_ | ‘_| | ‘_ \/ _` | \ \ \ \

\\/  ___)| |_)| | | | | || (_| |  ) ) ) )

  ‘  |____| . __|_| |_|_| |_\__, | / / / /

=========|_|==============|___/=/_/_/_/

:: Spring Boot ::        (v1.5.9.RELEASE)

 

2018-01-18 23:30:52.424  INFO 13368 — [  restartedMain] r.l.e.s.s.SpringBootWebJspApplication    : Starting SpringBootWebJspApplication on LEOGAME-PC with PID 13368 (D:\workspace\JAVA\TESTAPPS\spring-boot-examples-ld\spring-boot-web-jsp\target\classes started

by LEO in D:\workspace\JAVA\TESTAPPS\spring-boot-examples-ld\spring-boot-web-jsp)

2018-01-18 23:30:52.425  INFO 13368 — [  restartedMain] r.l.e.s.s.SpringBootWebJspApplication    : No active profile set, falling back to default profiles: default

2018-01-18 23:30:52.475  INFO 13368 — [  restartedMain] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@96da14: startup date [Thu Jan 18 23:30:52 MSK 2018]; root of

context hierarchy

2018-01-18 23:30:53.460  INFO 13368 — [  restartedMain] s. b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)

2018-01-18 23:30:53.468  INFO 13368 — [  restartedMain] o.apache.catalina.core.StandardService   : Starting service [Tomcat]

2018-01-18 23:30:53.469  INFO 13368 — [  restartedMain] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.5.23

2018-01-18 23:30:53.602  INFO 13368 — [ost-startStop-1] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were

found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.

2018-01-18 23:30:53.606  INFO 13368 — [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext

2018-01-18 23:30:53.606  INFO 13368 — [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1134 ms

2018-01-18 23:30:53. 688  INFO 13368 — [ost-startStop-1] o.s.b.w.servlet.ServletRegistrationBean  : Mapping servlet: ‘dispatcherServlet’ to [/]

2018-01-18 23:30:53.690  INFO 13368 — [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ‘characterEncodingFilter’ to: [/*]

2018-01-18 23:30:53.690  INFO 13368 — [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ‘hiddenHttpMethodFilter’ to: [/*]

2018-01-18 23:30:53.691  INFO 13368 — [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ‘httpPutFormContentFilter’ to: [/*]

2018-01-18 23:30:53.691  INFO 13368 — [ost-startStop-1] o.s.b.w.servlet.FilterRegistrationBean   : Mapping filter: ‘requestContextFilter’ to: [/*]

2018-01-18 23:30:53.883  INFO 13368 — [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@96da14: startup date [Thu Jan 18 23:30:52

MSK 2018]; root of context hierarchy

2018-01-18 23:30:53. 929  INFO 13368 — [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped «{[/]}» onto public java.lang.String ru.leodev.examples.springboot.springbootwebjsp.controller.MainController.welcome(java.util.Map<java.lang.String, jav

a.lang.Object>)

2018-01-18 23:30:53.931  INFO 13368 — [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped «{[/error]}» onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigur

e.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)

2018-01-18 23:30:53.932  INFO 13368 — [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped «{[/error],produces=[text/html]}» onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorControlle

r.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)

2018-01-18 23:30:53. 951  INFO 13368 — [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2018-01-18 23:30:53.952  INFO 13368 — [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2018-01-18 23:30:53.973  INFO 13368 — [  restartedMain] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]

2018-01-18 23:30:54.055  INFO 13368 — [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729

2018-01-18 23:30:54.093  INFO 13368 — [  restartedMain] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup

2018-01-18 23:30:54. 145  INFO 13368 — [  restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)

2018-01-18 23:30:54.148  INFO 13368 — [  restartedMain] r.l.e.s.s.SpringBootWebJspApplication    : Started SpringBootWebJspApplication in 2.019 seconds (JVM running for 2.334)

Создание страницы JSP | Учебник JSP

  • Научитесь кодировать
  • Библиотека C Language

    C TUTORIAL

    Обзор языка C

    Компиляция и выполнение кода C

    Что такое переменные?

    Операторы C (с примерами)

    Просмотреть все →

    ПРОГРАММЫ C

    Числовая программа Армстронга

    Контрольное число четное/нечетное

    Первые n простых чисел

    Перевернуть строку с помощью указателя

    Просмотреть все программы (100+) →

    90 009 ИНТЕРВЬЮ-ТЕСТЫ

    MCQ для проверки ваших знаний языка C.

    C Испытания →

    ВЫПОЛНИТЬ КОД

    Запускайте программы C и примеры кода онлайн.

    Компилятор С →

    Язык С++

    C++ TUTORIAL

    Типы данных и модификаторы C++

    sizeof и typedef

    Создать класс и объект

    9002 1 Просмотреть все →

    ПРОГРАММЫ C++

    Проверить, является ли число положительным/отрицательным

    Половина пирамиды с числами

    Треугольник Флойда

    Просмотреть все программы (100+) →

    ИНТЕРВЬЮ-ТЕСТЫ

    MCQ для проверки ваших знаний языка C++.

    Тесты С++ →

    EXECUTE CODE

    Запускайте программы C++ и примеры кода онлайн.

    Компилятор С++ →

    Питон

    РУКОВОДСТВО ПО PYTHON

    Установка и настройка Python

    Концепция ООП и класс

    Модификаторы доступа

    Проекты Python →

    9000 9 PYTHON HOW TOS

    Печатать цветной текст в Python

    Удалить числа из строки

    Сравнить две даты

    Посмотреть все How Tos (80+) →

    ИНТЕРВЬЮ-ТЕСТЫ

    MCQ для проверки ваших знаний Python.

    Тесты Python →

    EXECUTE CODE

    Запуск примеров кода Python в браузере.

    Компилятор Python →

    Ядро Java

    JAVA TESTS

    MCQ для проверки ваших знаний Java.

    ВЫПОЛНИТЬ КОД JAVA

    Запустить код Java в браузере.

    РУКОВОДСТВО ПО JAVA

    Настройка среды Java

    Концепция конструктора

    Просмотреть все →

    ПРИМЕРЫ КОДА JAVA

    Запуск файла JAR

    Сериализация и десериализация

    Просмотреть все примеры (80+) →

    ВЕСНА УЧЕБНИК

    Spring Framework

    Spring Boot

    Spring Security

    БОЛЬШЕ В JAVA

    Функции библиотеки Java

    Примеры преобразования типов

    Функции Java 11

    Просмотреть все →

    Информатика

    КОМПЬЮТЕРНАЯ АРХИТЕКТУРА

    Основы цифровых компонентов

    Различные типы логических элементов

    Организация памяти

    Просмотреть все →

    КОМПЬЮТЕРНАЯ СЕТЬ

    Типы компьютерных сетей

    Среда передачи

    Модель ISO/OSI

    См. все →

    ОПЕРАЦИОННАЯ СИСТЕМА

    Типы операционных систем

    Планирование процессов

    Планирование ЦП

    В порядке очереди

    Сначала самое короткое задание

    Классическая проблема синхронизации

    Что такое семафоры?

    Что такое взаимоблокировки?

    Посмотреть все →

    База данных

    СУБД и SQL

    Модель ER

    Реляционная алгебра и исчисление

    Типы ключей СУБД

    Нормализация базы данных

    Просмотреть все →

    PL/SQL

    Типы данных в PL/SQL

    Процедуры PL/SQL

    Как создать Курсор?

    Посмотреть все →

    MongoDB

    Сравнение MongoDB и РСУБД

    Установка MongoDB

    Использование MongoDB с Java

    Просмотреть все →

    ВЫПОЛНИТЬ SQL

    Практика SQL-запроса в браузере с образцом набора данных.

    Запустить SQL-запрос →

    (Изучить SQL-запросы)

    Более…

    РАЗРАБОТКА ДЛЯ АНДРОИД

    ПЕРЕЙТИ ЯЗЫК

    ЛИНУКС

    ДОКЕР

    ТЭГИ HTML (от А до Я)

    ССЫЛКИ НА CSS

    SASS/SCSS

    КОТЛИН

    РАЗРАБОТКА ИГРЫ

    PHP

    РУКОВОДСТВО ПО GIT

    ЯВАСКРИПТ

    РАСШИРЕННЫЙ ДСА

  • Тесты
  • Форум
  • Технический блог
    500 монет

    Логин

Страница JSP похожа на страницу HTML, но страница JSP также содержит код Java. Мы можем поместить любой обычный код Java в файл JSP, используя тег скрипта , который начинается с и заканчивается на 9.0063 %> . Страницы JSP используются для разработки динамических ответов.

Чтобы изучить HTML, перейдите на интерактивный курс HTML и изучите HTML, одновременно практикуя его.


  • Откройте Eclipse, нажмите New → Dynamic Web Project

  • Дайте имя вашему проекту и нажмите OK

  • Вы увидите новый проект, созданный в Project Explorer

  • Чтобы создать новый файл JSP, щелкните правой кнопкой мыши каталог веб-содержимого, Новый → файл JSP

  • Дайте имя файлу JSP и нажмите «Готово».

  • Напишите что-нибудь в файле JSP. Полный код HTML и JSP помещается в тег , как и страницы HTML.

  • Чтобы запустить проект, щелкните правой кнопкой мыши Project , выберите Run As → Run on Server

  • Чтобы запустить сервер, выберите существующее имя сервера и нажмите «Готово»

  • См. вывод в браузере.

  • ← Назад
  • Далее →

  Тесты JSP MCQ

Проверьте свои знания о Java Server Pages.

  Учебник по Java

Учебник по Java для начинающих.

Образец веб-приложения Java с использованием сервлетов и JSP | Касун Дхармадаса

Чтение: 4 мин.

·

3 июня 2017 г.

Сервлет — это класс Java, расширенный для обработки возможностей сервера. Сервлеты могут использоваться для обработки запросов и ответов сервера.

В этом уроке я объясню, как создать простое веб-приложение Liquor Store, которое будет принимать клиентские запросы о типах спиртных напитков и отвечать списком доступных брендов. Я буду использовать Intellij Idea Community Edition в качестве IDE. Поскольку версия сообщества не предоставляет возможности развертывания сервера tomcat в среде IDE, мы должны вручную развернуть файл war на сервере tomcat. Чтобы упростить этот процесс, мы можем использовать плагин tomcat maven для развертывания файла войны. Пожалуйста, следуйте этому руководству, если вы не знакомы с плагином tomcat maven.

Шаг 1: Создайте проект maven в intellij idea.

Шаг 2. Вставьте подключаемый модуль maven tomcat (необязательно для пользователей Intellij Idea Ultimate)

Добавьте следующий подключаемый модуль tomcat под тегом plugins в файле pom.xml.

Шаг 3: Создание веб-приложения

3.1 Создание первой веб-страницы

Давайте создадим HTML-страницу входа для нашего приложения Liquor Shop. Это будет первая страница, которую увидят пользователи при посещении.

Создайте каталог с именем webapp в папке src/main/ и вставьте следующий файл index.html в каталог webapp.

На этой странице пользователю будет предложено выбрать тип спиртного и подтвердить свой выбор. После нажатия кнопки отправки приложение отправит запрос POST, содержащий выбранный пользователем тип спиртного, на сервлет SelectLiquor.

3.2. Создание класса перечисления LiquorType

Мы будем использовать класс перечисления для хранения типов спиртных напитков нашего приложения. Создайте класс LiquorType.java внутри src/main/java/ с именем пакета com.sample.model.

3.3. Реализация бизнес-логики

Затем нам нужно создать класс обслуживания для хранения бизнес-логики приложения. Это простой класс Java, в котором определены необходимые методы.

Создайте класс LiquorService.java внутри src/main/java/ с именем пакета com.sample

Этот класс имеет метод getAvailableBrands(), который возвращает список брендов для данного типа спиртных напитков.

3.4. Создание класса сервлета

Далее давайте создадим класс SelectLiquorSevlet.java, который обрабатывает запрос пользователя со страницы HTML.

Создайте класс SelectLiquorServlet.java внутри src/main/java с именем пакета com.sample

Класс SelectLiquorServlet примет запрос POST из отправки формы и вызовет метод doPost(). Я переопределил метод doPost(), чтобы получить «Тип» ликера, отправленного из отправки формы, выполненной index.html, и получить доступный список брендов из метода getAvailableBrands(). Существует также аналогичный метод doGet(), который можно переопределить для обработки запросов GET.

В API сервлета javax версии 3.0.1 мы можем использовать аннотацию @WebSevlet для вставки имени сервлета и URL-адреса сервлета в сервлет без использования дескриптора развертывания. Здесь мы публикуем наш класс SelectLiquorServlet под именем selectliquorservlet и сопоставляем его с шаблоном URL «/SelectLiqour».

Сервлет перенаправит запрос и ответ в представление JSP. Метод getRequestDispatcher() в классе сервлета принимает в качестве аргумента путь к файлу JSP.

3.5. Создание страницы результатов

Наконец, мы создадим страницу JSP для отображения результатов.

Создайте файл result.jsp в каталоге src/main/webapp/ и добавьте следующие строки.

Эта страница JSP получит атрибут «brands», установленный сервлетом, и проанализирует его в объект List.