27 Nisan 2017 Perşembe

JNI

İsimlendirme
Java kodu şöyle olsun.
public class JNItest2 {

public native void helloworld(String[] args);

  static{
    System.loadLibrary("Dense");        
  }
  public static void main(String[] args)
  {        
    new JNItest2().helloworld(args);
  }
}
C metod ismi Java ile başlar, Java sınıf ismi eklenir, metod ismi eklenir. 
İlk parametre JNIEnv, 
İkinci parametre metodu ihtiva eden nesnedir. Eğer metod static ise bu parametreye gerek yok. 
Diğer parametreler metoda geçilen değerler. 

Şöyle yaparız.
JNIEXPORT void JNICALL
Java_JNItest2_helloworld(JNIEnv *env,jobject object, jobjectArray args)
{
...
}   
Java'dan CPP'yi çağırmak
Şöyle yaparız.
header dosyasında şu include yapılır
#include <jni.h>
cpp şuna benzer.
JNIEXPORT jstring JNICALL Java_six_pack_Neatifier_neatify(JNIEnv* env, 
                                                          jclass clazz, 
                                                          jlong val, 
                                                          jchar pad, 
                                                          jint span)
{
   ... 
   jstring ret = env->NewStringUTF(out);
   return ret;
}
Java'dan DLL'i yükleriz.
System.load(System.getProperty("user.dir") + File.separator +
                        "src" + File.separator + "mylib.jnilib");
Java içinde Cpp ile aynı imzayı taşıyan bir metod tanımlarız.
public static native String neatify(final long val,
                                    final char pad,
                                    final int span);
Metodu çağırırız.
neatify(l, '_', 3);
JNI Tipleri
Şöyle
jboolean , jchar, jint,  jlong , jobject, jobjectArray, jIntArray, jclass
Çeşitli Örnekler
Şöyle yaparız.
JNIEXPORT jlong JNICALL Java_com_mypackage_ClipboardHelper_initialize
    (JNIEnv *env, jclass obj, jstring arg) {
C kodundan Java'yı çağırmak
JNI - C Kodundan Java Çağırmak yazısına taşıdım.

26 Nisan 2017 Çarşamba

Servlet Filter Arayüzü

Giriş
Şu satırları dahil ederiz.
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.FilterConfig;
Tanımlama - annotation 
Şu satırı dahil ederiz.
import javax.servlet.annotation.WebFilter;
Şöyle yaparız.
@WebFilter(urlPatterns = {"*.jsf"})
public class MyFilter implements Filter {
  ...
}
Tanımlama - xml
Şöyle yaparız.
<filter>
  <filter-name>MyFilter</filter-name>
  <filter-class>com.bar.foo.MyFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>MyFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>
destroy metodu
Metodun imzası şöyle
public void destroy();
doFilter metodu
Metodun imzası şöyle
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
throws IOException, ServletException 
doFilter metodu içinde genellikle ServletRequest nesnesi HttpServletRequest nesnesin, ServletResponse nesnesi ise HttpServletResponse nesnesine cast edilir.

Örnek 1
Giriş yapılıp yapılmadığına göre başka sayfaya yönlendirmek için şöyle yaparız.
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) 
throws IOException, ServletException 
{

  HttpServletRequest request = (HttpServletRequest) req;
  HttpServletResponse response = (HttpServletResponse) res;
  HttpSession session = request.getSession(false);
    if (null == session) {
        response.sendRedirect("index.jsp");
    }
  Boolean isLoggedIn = session.getAttribute("isLoggedIn");
  if(!isLoggedIn)
    response.sendRedirect("index.jsp");

  chain.doFilter(req, res);
}
Örnek 2
Logout olunca şöyle yaparız.
@Override
public void doFilter(ServletRequest request, ServletResponse response,
  FilterChain chain) throws IOException, ServletException {
  // obtaining a sessionComplete value
  Object value = ((HttpServletRequest) request).getSession().
    getAttribute("sessionComplete");
  boolean sessionComplete = Boolean.valueOf(Objects.requireNonNull(value).
    toString());

  // go to the final page
  if (sessionComplete) {
    ((HttpServletResponse)response).sendRedirect("locationToRedirect");
  }

  // otherwise, pass a control to controllers
  chain.doFilter(request, response);
}
init metodu
Şöyle yaparız
public void init(FilterConfig config) throws ServletException{
  ...
}

24 Nisan 2017 Pazartesi

Hiding Fields

Giriş
Açıklaması şöyle. Bu shadow veya shadowing ile aynı şey.
Within a class, a field that has the same name as a field in the superclass hides the superclass's field, even if their types are different
Elimizde şöyle bir kod olsun
class A {
  int i = 10;
}

class B extends A {
  int i = 20;
}

A a = new B();
System.out.println(a.i);
Java'da alanlar kalıtılmaz. Dolayısıyla A tipi kendi alanına B tipi ise kendi alanına erişir.  Çıktı olarak A 10 alırız.

21 Nisan 2017 Cuma

ZipInputStream Sınıfı

constructor - FileInputStream
Şöyle yaparız.
File f = new File("C:\\test.zip")

InputStream inStream = new FileInputStream (f);
ZipInputStream zipInputStream = new ZipInputStream (inStream);
Şöyle yaparız.
InputStream inStream = new FileInputStream(path);
ZipInputStream zipInputStream = 
  = new ZipInputStream(new BufferedInputStream(inStream));
constructor - URL
Şöyle yaparız.
URL jar = ...;
ZipInputStream zip = new ZipInputStream(jar.openStream());
close metodu
Şöyle yaparız.
zipInputStream.close();
closeEntry metodu
Şöyle yaparız.
ZipEntry ze = null;
while ((ze = zipInputStream.getNextEntry()) != null) {
  ...

  zipInputStream.closeEntry();
} 
getNextEntry metodu
ZipEntry nesnelerini dolaşmamızı sağlar. Şöyle yaparız.
ZipEntry entry;
while ((entry = zipInputStream.getNextEntry()) != null) {
  ...
}


GZIPOutputStream Sınıfı

Giriş
GZip tek bir dosyayı sıkıştırır. Genellikle tar ile kullanılır. Tar önce bir arşiv oluşturur, daha sonra gzip bu arşivi sıkıştırır.

Bu sınıf foor.tar şeklindeki bir dosyayı sıkıştırmak için kullanılır.

constructor
Şöyle yaparız.
ByteArrayOutputStream out = new ByteArrayOutputStream();
GZIPOutputStream gzOut = new GZIPOutputStream(out);
Şöyle yaparız.
try (
  OutputStream outputStream = new FileOutputStream(createdFile);
  GZIPOutputStream gStream = new GZIPOutputStream(outputStream);
  ) {
    // ...
}
close metodu
Şöyle yaparız
gStream.close();
write metodu
Şöyle yaparız
String str = ...;
gStream.write (str.getBytes());