31 Ekim 2015 Cumartesi

Reflection ile Generic Tipi Bulmak

Ata Sınıfın Type Parametresini Bulmak
Elimizde şöyle bir sınıf olsun.
public class SomeClass extends AdditionalClass<GenericClass> {
  ...
}
Bu sınıfın ata sınıfının hangi parametre ile kullanıldığını şöyle buluruz.
SomeClass object = new SomeClass();
Type parameterizedClassType = 
         ((ParameterizedType) object.getClass().getGenericSuperclass())
         .getActualTypeArguments()[0];
System.out.println(parameterizedClassType.getTypeName());
Çıktı olarak
com.whateverpackage.GenericClass
alırız.

4 Ekim 2015 Pazar

Servlet 3.0

Giriş
Servlet 3.0 ile @WebServlet, @WebFilter and @WebListener anatosyanları kullanılıyor. Böylece web.xml içinde karmaşık xml tanımlamalarına gerek kalmıyor.

WebServlet
Eğer Servlet 3.0 uyumlu bir sunucumuz varsa servlet-mapping yerine annotation kullanabiliriz.
Bu durumda url-pattern XML Tag'i koda taşınır.
@WebServlet("/someservlet/*")
public class SomeServlet extends HttpServlet {
    // ...
}
WebFilter
Bu sınıf ile servlete gelen tüm istekleri dinleyebilme imkanı var. StartUp servleti için filtre şöyle yapılır.
@WebFilter("/StartUp") // or @WebFilter(servletNames={"StartUp"})
public class StartUpServletFilter implements Filter {

  @Override
  public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
   throws IOException, ServletException {
    System.out.println("Before StartUp servlet is invoked");
    chain.doFilter(req, res);
    System.out.println("After StartUp servlet is invoked");
  }

    // Don't forget the init() and destroy() boilerplate.

}
WebListener
Servlet ilklendirilirken ve yok edilirken çağrılır. Şöyle yapılır
@WebListener
public class MyRequestListener implements ServletRequestListener {

    @Override
    public void requestInitialized(ServletRequestEvent event) {
        System.out.println("Request initialized");
    }

    @Override
    public void requestDestroyed(ServletRequestEvent event) {
        System.out.println("Request destroyed");
    }

}