2011年12月21日水曜日

Slim3ソースコード読み会(1)

今日は中国GTUGのSlim3ソースコード読み会(1)を開催しました。

今日は最初だったので、様子を見ながらFrontControllerから読み進める事にしました。

今日読んだファイルは

  • FrontController.java
  • Controller.java
  • ControllerConstants.java
を主に読みました。

自分で実装したコントローラが呼び出されるまでの大まかな流れが知りたかったので
以下のソースコードは、呼び出しがあるのですが、読みませんでした。

  • RouterFactory.java
  • ApplicationMessage.java
  • CipherFactory.java
  • RequestUtil.java
  • RouterImpl.java
でも、帰ってからじっくり読んでみると、FrontController.javaの231行目の静的ファイルの判定の部分のためにはRequestUtil.javaとRouterImpl.javaは読んだ方が良かったのかもしれません。(という事で、再度読んでいます)

FrontController.javaの235行目のdoForward()が呼び出される条件がよくわからない等、
今回は不明な点を残しつつ進めて行きました。
(なんとなく、235行目は自分でRouterを実装した場合に変化がありそう)

FrontController.javaの261行目のdoFilter()では、リクエストとレスポンスを退避して、元に戻している処理がありますが、これの意味も今日の段階ではよくわからないポイントだったと思います。

分かった点は、

  • slim3-blankのweb.xmlにある、context-paramで、slim3.rootPackageは省略できない。
  • 同じく、javax.servlet.jsp.…localizationContextは設定が無くても"application"となる。(デフォルトが"application")
  • 同じく、javax.servlet.jsp.…request.charsetも設定がなくても"UTF-8"となる(デフォルトが"UTF-8"。ただし、リクエスト時にcharset指定がある場合はリクエストが優先される)
  • IndexController(というか、Controllerを継承したコントローラ)はsetUp()、run()、tearDown()の順番で呼び出される。それぞれ、事前処理、主処理、後処理となる。tearDown()で例外が発生すると、WARNレベルのログが出力される。

今日、一番の議論は、リクエストURLからコントローラのクラス名(フルパス)に変換するルールでした。

例えば、
http://localhost:8888/sample/
だと、
slim3.controller.sample.IndexControllerというパスに変換されて呼び出されます。

変換ルールは、
rootPackage + "." + コントローラパッケージ名 + "/"を"."に変えたgetServletPath() + "Controller"となります。

これにより、例えば、
http://localhost:8888/sample/hoge
であれば、
slim3.controller.sample.HogeControllerが呼び出されるようになります。

しかし、
http://localhost:8888/sample
だと、
slim3.controller.sampleControllerというパスに変換されるはずですが、
URLがhttp://localhost:8888/sample/に書き換わって実行されていました。
(想定と違った動き)

単純なURL書き換えが発生しているのか、Framework側で書き換えているのかは
よくわかりませんでした。

といった所で、本日はタイムアップしました。

次週は12/27(火)の19:00〜21:00の予定で、
Modelのあたりを読む予定です。