Servlet3.0 Spec Early Draft


どうやらダウンロード可能になってるみたいですね。
ちょっくらチェケラしてみますw


(追記)
Spec読むなら、8.1.あたりからかな。
アノテーション関連の追記はここだけですね。
@Servletアノテーションの付いたPOJOクラスをどのように見つけるかは
あんまり言及されてなくて、

  • WEB-INF/classes以下
  • jarになってりゃWEB-INF/lib
  • アプリケーションクラスパスのどっか

を探すぜとしか書いてない。

metadata-complete属性がweb-appタグにつくので、それをfalseにしないと
アノテーション探しに行ったりとか、web.xmlの断片を読み込んだりしない仕様な模様。
デフォルトはfalseみたいだね。

<web-app metadata-complete="false"><!-- これで探しにいく -->
</web-app>


Servletはこんなん。

@Servlet(urlMappings={"/foo", "/bar"})
public class SampleUsingAnnotationAttributes {
    @GET
    public void handleGet(HttpServletRequest req, HttpServletResponse res) {
    }
}

最低でもひとつの@HttpMethod(@GET、@POSTなどなど)をつけたメソッドがないといけない。
@HttpMethodがついたメソッドはHttpServletRequest、HttpServletResponseを引数にとらないといけない。



ServletFilterはこんな感じみたいだけど。こちらはdoFilterメソッドとかに制約は特に書いて無いけど???
なんかそのへんまだ決まってないのかな。

@ServletFilter
@FilterMapping(“/foo”)
public class MyFilter {
    public void doFilter(HttpServletRequest req, HttpServletResponse res)
    {
        ...
    }
}


ServletContextListenerもこんなん。

@ServletContextListener
public class MyListener {
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext sc = sce.getServletContext();
        sc.addServlet("myServlet", "Sample servlet", "foo.bar.MyServlet", null, -1);
        sc.addServletMapping("myServlet", new String[] {"/urlpattern/*" });
    }
}