Концепция: Пользовательский тег 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.
|
Пример 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 →
Ядро JavaJAVA TESTS
MCQ для проверки ваших знаний 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 помещается в тег
- Чтобы запустить проект, щелкните правой кнопкой мыши 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.