27 Ocak 2010 Çarşamba

Tomcat URL'de UTF-8 sorunu

Tomcatte ayar dosyaları arasında en meşhuru server.xml ayar dosyasında bir iki ekleme ile URLde UTF-8 problemini çözebilirsiniz.

JSP dosyalarının başında içeriğin utf-8 tipinde bilgi içerdiğini @page direktifi ile yapabilirsiniz. Ama içeriğiniz yine de düzgün görünmüyorsa bir filtre yazarsınız. Ve filtre her çeğrılan JSP dosyası için response ve request nesnelerinin karekter kodlamasının utf-8 olduğunu söylersiniz. Böyle bu sorununuz çözülür.

Diğer yollardan biri ise server.xml'de host tanımına URIencoding="UTF-8" ek tanımını eklemek. Böyle o host ile tanımlanan uygulamalarda otomatik karekter kodlaması UTF-8 olduğunu tomcat anlayacaktır. Bu tanımla ile form post ve get metodlarıyla veya URLden direk gelen bilgilerin UTF-8 olarak JSP içerisine düşeceğinin garantisini vermez.

Bunun için server.xml'de connector etiketine de host etiketine eklediğiniz şeyi uygulamanız gerekecektir. Bu sornu çözecektir. Artık utf-8 probleminiz umuyorum kalmayacaktır.

Filtrenizi silmeyin ne olur ne olmaz.... :)

Tecrübe:  CentOS makinada bir dizi proje yapıldı ve bu projeler faaliyete geçirildi. Karekter kodlamasında sıkıntılar gözlendi. Utf-8 filtresi bulunmasına rağmen içerikleri JSP'lerde gösterirken değil ama URLde mesela formdan gelen bilgilerde utf-8 kodlaması sorunlu idi.

JSP'ler içerisine bakıldı. @page direktifi ile sayfa karakter kodlamasının utf-8 olduğu gözlendi. Utf-8 filtresine bakıldı. Çalışmasının normal olduğu ve yapması gerektiği gibi response, request nesnelerinin karekter kodlamalarının setEncodin("UTF-8") konutuyla utf-8'e çevrildiği gözlendi.

Lakin URLlerde hala sorun devam etmekte idi. Tomcat conf dizini altında server.xml dosyasında HOST etiketine URIEncoding="UTF-8" eklendi. Ancak sorun çözülmedi.

Tam hatırlamamakla beraber windows makinada bu kadarıyla sorunlarımız çözülmüştü. Şimdi ise linux kullanıyorduk.

Bu sefer HOST etiketine uyguladığım şeyleri CONNECTOR etiketine de uyguladım.

Ve sonuç olumlu idi. Artık sorun yok id.

:) Ne olur ne olmaz diye Utf-8 filtresini kaldırmadım. Bu filte en azından şöyle bir şeye yardımcı oluyor eğer servletinizde direk birşeyler bastırırsanız karekter kodlaması bilin bakalım ne oluyor filtreniz aktif iken...

Hiç yorum yok: