Kotlin Web应用程序教程
在本教程中,我们将学习如何创建Kotlin Web应用程序。
我们假设您已经精通Java EE和Kotlin,然后再进行本教程的业务工作。
Kotlin Web应用程序
Java EE是Java SE的扩展,用于创建Web应用程序,其余Web服务以及与Web相关的任何内容(不要忘记微服务)。
我们也很清楚,JetBrains开发的最新语言Kotlin是静态类型的,并且基于JVM。
Kotlin的存在是为了解决Java开发人员面临的问题。
Kotlin简洁明了,并具有非常友好的语法来学习和适应。
此外,它与Java 100%互操作,可轻松编译为Java 6和Java 8字节码。
知道Kotlin比Java具有许多优势,为什么不在我们的Java EE环境中采用它。
这就是本教程的全部内容。
我们将使用Kotlin,Servlet和Tomcat localhost服务器开发一个简单的Web应用程序。
在此之前,我们来看看将Kotlin集成到Java EE应用程序中所面临的挑战。
Kotlin类默认为final:除非某个类被声明为" open class",否则默认为final。
大多数时候,java ee应用程序类都不是最终的,因此我们可以集成" all-open"插件,而不是每次都将类定义为" open class"(否则会导致运行时异常)。
在我们的IntelliJ Ideabuild.gradle
文件中。默认情况下,Kotlin的构造函数带有命名参数:no-arg编译器插件为带有特定批注的类生成附加的零参数构造函数,从而使我们可以在没有显式指定构造函数的情况下实例化类。
以下是我们项目的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"
我们将在Kotlin中使用Servlet创建一个Http Web应用程序。
注意:Servlet的核心是可以处理HTTP请求(通常是GET和POST请求)的类。
让我们在IntelliJ Ultimate中使用Kotlin创建第一个Hello World Web应用程序。
这就是创建Java EE应用程序所需要的。
Kotlin Web App项目
从侧列中选择Gradle,然后在右侧选择Kotlin(JVM)和Web。
如下所示设置组,工件和gradle设置。
注意:工件是项目资产的组合,将它们组合在一起以测试,部署或者分发软件解决方案或者其一部分。
当我们在服务器上运行应用程序时,它将被调用。
配置build.gradle
buildscript { ext.kotlin_version = '1.2.10' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } group 'com.theitroad.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插件,以添加对组装Web应用程序WAR文件的支持。
Kotlin Web App项目结构
由于本教程仅涉及Servlet,因此我们删除jsp文件。
在webapp内创建一个新目录,即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注解用于声明一个servlet并将其映射到指定的值(servlet映射)。
值参数是强制性的。
name参数在这里是可选的。
doGet函数用于将输入内容打印到屏幕上。
由于使用了@WebServlet批注,因此不需要部署描述符(web.xml文件)。
注意:以上注释不适用于Tomcat 7以下的版本。
运行Kotlin Web应用程序
从右上方的菜单按钮编辑配置:
将Tomcat(流行的servlet容器)设置为服务器。
由于端口号已经在使用中,因此我们将端口号从8080设置为8888。
我们已将URL路径添加到Hello World servlet,该URL将在项目运行时启动。
让我们设置部署所需的工件。
注意:如果未安装Tomcat,请转到IntelliJ-> Applications-> Plugins-> Tomcat Server
运行上述项目时的输出如下。
使用web.xml进行Servlet映射
除了在MyServlet.kt文件中设置注解,URL模式之外,我们可以在充当部署描述符文件的web.xml文件中进行设置,如下所示。
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="https://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://xmlns.jcp.org/xml/ns/javaee https://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" metadata-complete="false"> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping> </web-app>
让我们修改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("<html><body>") out.print("<h3>theitroad Tutorial</h3>") out.print("<h4>Servlet App Using Kotlin</h4>") out.print("</body></html>") } }