4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Ktorアプリの warをweb.xml無しで作成する。

Last updated at Posted at 2019-01-23

##前置き
とあるアプリケーションの作成でKotlinを使うことにしました。で、WebのサービスAPIを作成するためのフレームワークについて、KotlinはJVM言語だからJAX-RSとか定評のあるJavaのフレームワークも使えたのでしょうけど、折角なのでKotlinのフレームワークのKtorに挑戦することにしてみました。

Webアプリケーションをtomcatなどにデプロイするにはwarファイルにすると便利なので、それについて調べたところ、公式にその方法があったりはするのですが、そこではweb.xmlをつかってKtorのサーブレットを登録する方法が示されています。

しかし今どきServlet3.0以上だと思うし、何よりxmlが煩わしいのでweb.xmlを使わないようにしてみました。

##方針
基本的な方針は単純で、web.xmlで登録するサーブレットio.ktor.server.servlet.ServletApplicationEngineを継承したサーブレットを作成してそこにサーブレット登録用のアノテーションを付加することを考えます。

##設定項目
公式のweb.xmlで設定されているのは次の通り。

  • サーブレットコンテキストへ名前io.ktor.ktor.config、値application.conf
  • サーブレットの登録、名前はKtorServlet、サーブレットはio.ktor.server.servlet.ServletApplicationEngine
  • async supported
  • マルチパート設定
  • max-file-sizeが304857600
  • max-request-sizeが304857600
  • file-size-thresholdが0
  • サーブレットの入り口が"/"

以上をアノテーションで設定します。

##サーブレット
上記のうち、コンテキストパラメーター以外は次のようにサーブレットで実現できます。

import io.ktor.server.servlet.ServletApplicationEngine
import javax.servlet.annotation.MultipartConfig
import javax.servlet.annotation.WebServlet

@WebServlet(name = "KtorServlet", value = ["/"], asyncSupported = true)
@MultipartConfig(fileSizeThreshold = 0, maxFileSize = 304857600, maxRequestSize = 304857600)
class KtorEntryServlet: ServletApplicationEngine() {
}

ただしサーブレットコンテキストについてはサーブレット作成前に予め設定しておく必要があるので、こちらはServletContainerInitializerを作成して設定します。コードは次の通り。

import javax.servlet.ServletContainerInitializer
import javax.servlet.ServletContext

class KtorServletContainerInitializer: ServletContainerInitializer {
    override fun onStartup(c: MutableSet<Class<*>>?, ctx: ServletContext?) {
        ctx!!.setInitParameter("io.ktor.ktor.config", "application.conf")
    }
}

なんか安直な方法ですが、これでとりあえず動作しているみたいです(ファイルアップロードは検証していませんが)。

あと何か初期設定をしたいばあいはこちらで行えば良さそうですね。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?