Автор оригинала: Pankaj Kumar.
В этом уроке мы узнаем, как создать веб-приложение Kotlin. Мы предполагаем, что вы хорошо разбираетесь в Java EE и Kotlin, прежде чем перейти к бизнес-части этого руководства.
Веб-приложение Kotlin
Мы также хорошо знаем, что Kotlin, последний язык, разработанный JetBrains, статически типизирован и основан на JVM. Это факт, что Kotlin существует с целью решения проблем, с которыми сталкиваются разработчики Java.
Котлин лаконичен, понятен и имеет очень удобный синтаксис для изучения и адаптации. Кроме того, он на 100% совместим с Java, легко компилируется в байт-код Java 6 и Java 8.
Зная, что Kotlin имеет так много преимуществ перед Java, почему бы не использовать его в нашей среде Java EE.
Вот о чем весь этот урок. Мы будем разрабатывать простое веб-приложение с использованием Kotlin, сервлетов и локального хост-сервера Tomcat. Перед этим давайте рассмотрим проблемы, с которыми сталкивается интеграция Kotlin в приложение Java EE.
- Классы Kotlin являются окончательными по умолчанию : Если класс не объявлен как
открытый класс
, он является окончательным по умолчанию. В большинстве случаев классы приложений java ee не являются окончательными, поэтому вместо того, чтобы каждый раз определять класс какоткрытый класс
(невыполнение этого может привести к исключению во время выполнения), мы можем интегрироватьполностью открытый
плагин в наш файл IntelliJ Ideabuild.gradle
. - По умолчанию в Kotlin есть конструкторы с именованными аргументами : Плагин компилятора без аргументов создает дополнительный конструктор с нулевым аргументом для классов с определенной аннотацией, что позволяет нам создавать экземпляры классов без явно указанного конструктора.
Ниже приведены изменения, которые необходимо внести в файл build.gradle
нашего проекта.
buildscript { dependencies { classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version" } } apply plugin: "kotlin-noarg" apply plugin: "kotlin-allopen"
Мы будем создавать веб-приложение Http с использованием сервлетов в Котлине. Примечание : Сервлет по своей сути является классом, который может обрабатывать HTTP-запросы (обычно запросы GET и POST). Давайте создадим наше первое веб-приложение Hello World с использованием Kotlin в IntelliJ Ultimate . Это то, что требуется для создания приложений Java EE.
Проект веб-приложения Kotlin
Выберите Gradle на боковой панели и выберите Kotlin(JVM) и Web справа.
Настройка параметров группы, артефакта и сортировки, как показано ниже.
Примечание : Артефакт-это совокупность ресурсов вашего проекта, которые вы собираете для тестирования, развертывания или распространения вашего программного решения или его части. Он будет вызван, когда мы запустим наше приложение на сервере.
Настройка build.gradle
buildscript { ext.kotlin_version = '1.2.10' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } group 'com.journaldev.kotlinjavaee' version '1.0-SNAPSHOT' apply plugin: 'kotlin-platform-jvm' repositories { mavenCentral() } dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" testCompile "junit:junit:4.12" testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version" testCompile group: 'junit', name: 'junit', version: '4.11' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }
Давайте добавим плагин war и зависимость java ee.
buildscript { ext.kotlin_version = '1.2.10' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } group 'com.jour.as' version '1.0-SNAPSHOT' apply plugin: 'kotlin-platform-jvm' apply plugin: 'war' repositories { mavenCentral() } dependencies { compile group: 'javax', name: 'javaee-api', version: '7.0' compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version" testCompile "junit:junit:4.12" testCompile "org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version" testCompile "org.jetbrains.kotlin:kotlin-test:$kotlin_version" testCompile group: 'junit', name: 'junit', version: '4.11' } compileKotlin { kotlinOptions.jvmTarget = "1.8" } compileTestKotlin { kotlinOptions.jvmTarget = "1.8" }
Плагин War расширяет плагин Java, чтобы добавить поддержку для сборки файлов WAR веб-приложений.
Структура проекта веб-приложения Kotlin
Поскольку мы имеем дело с сервлетом только в этом руководстве, давайте удалим файл jsp. Создайте новый каталог внутри веб-приложения, назовите его WEB-INF
и добавьте файл web.xml
к нему.
Код для MyServlet.kt
(без расширения java) приведен ниже.
import javax.servlet.annotation.WebServlet import javax.servlet.http.HttpServlet import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse @WebServlet(name = "Home", value = "/hello") class MyServlet : HttpServlet() { override fun doGet(req: HttpServletRequest, res: HttpServletResponse) { res.writer.write("Hello, World!") } }
@WebServlet
|/аннотация используется для объявления сервлета и сопоставления его с указанными значениями (сопоставление сервлета). Аргумент значения является обязательным. Аргумент name здесь необязателен.
Функция doGet
используется для вывода входных данных на экран.
Благодаря аннотации @WebServlet
, дескриптору развертывания (web.xml файл) не требуется.
Примечание : Приведенная выше аннотация не работает для версий ниже Tomcat 7.
Запуск веб-приложения Kotlin
Измените конфигурацию с помощью кнопки меню в правом верхнем углу:
Установка Tomcat (популярного контейнера сервлетов) в качестве сервера.
Мы установили номер порта с 8080 на 8888, так как первый уже использовался. Мы добавили URL-путь к сервлету Hello World, который будет запущен при запуске проекта.
Давайте настроим наш артефакт, необходимый для развертывания.
Примечание : Если Tomcat не установлен, перейдите к IntelliJ->Приложения->Плагины->Сервер Tomcat
Выходные данные при запуске вышеупомянутого проекта приведены ниже.
Использование web.xml для сопоставления Сервлетов
Вместо установки шаблона аннотации, URL-адреса в файле MyServlet.kt мы можем установить его в web.xml файл, который действует как файл дескриптора развертывания, как показано ниже.
MyServlet MyServlet MyServlet /hello/*
Давайте изменим файл MyServlet.kt для отображения HTML в качестве входных данных на экране.
import javax.servlet.annotation.WebServlet import javax.servlet.http.HttpServlet import javax.servlet.http.HttpServletRequest import javax.servlet.http.HttpServletResponse //@WebServlet(name = "Home", value = "/hello") class MyServlet : HttpServlet() { override fun doGet(req: HttpServletRequest, res: HttpServletResponse) { //res.writer.write("Hello, World!") res.setContentType("text/html") val out = res.getWriter() out.print("") out.print("JournalDev Tutorial
") out.print("Servlet App Using Kotlin
") out.print("") } }
Ниже приведен окончательный вывод, который отображается на экране.
На этом заканчивается учебник по веб-приложениям kotlin. Вы можете загрузить окончательный проект веб-приложения Kotlin по ссылке ниже.