web development etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
web development etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

Cuma, Kasım 20, 2009

java servlet ile dosya görüntüleme

Jsf veya java nın başka bir teknolojisini kullandığımızda servlete ihtiyaç duyduğumuz zamanlar çok olur. Bu durumlardan bir tanesi de veritabanından veya herhangi bir path'ten aldığımız dosyaları uygulama içinde göstermektir. pdf, doc, excel, jpeg gif veya başka herhangi bir dosya türünü bu şekilde servlet içine okuyarak gösterebiliriz. aşağıda jsf de kullanılan buna ilişkin bir örnek var. bu örnekte pdf dosya türü okunmuştur.
public class MyStoredFiles extends HttpServlet implements Servlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Connection conn = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
InputStream is = null;
String fileName="",mimeType="";

String fileid=request.getParameter("fileid");
String tmpPath = System.getProperty("tmpfilepath");
try {
String sql = "select * from storedfiles where fileid=?";
conn = OraManager.getConnection(this);
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, fileid);
rs = pstmt.executeQuery();
if (rs.next()) {
fileName=rs.getString("filename");
mimeType=rs.getString("content_type");
//write it to the temp area
java.io.File file = new java.io.File(tmpPath+fileName);
FileOutputStream fos = new FileOutputStream(file);
is = rs.getBinaryStream("data");
byte[] buffer = new byte[1000];
while (is.read(buffer) > 0) {
fos.write(buffer);
}
fos.close();

BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
// Get image contents.
byte[] bytes = new byte[in.available()];
in.read(bytes);
in.close();

response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "inline;filename=\""+fileName+"\"");

// Write image contents to response.
response.getOutputStream().write(bytes);

}
} catch (Exception e) {
e.printStackTrace();
}

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}

Bu örnekte link ile gelen paramterelere göre veritabanından dosya çekiyoruz.
Bu servletimzi web.xml de tanımlamamız gerekiyor;
<servlet>
<description></description>
<display-name>MyStoredFiles</display-name>
<servlet-name>MyStoredFiles</servlet-name>
<servlet-class>org.test.servlet.MyStoredFiles</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyStoredFiles</servlet-name>
<url-pattern>/showstoredfile</url-pattern>
</servlet-mapping>


jsp sayfasında görüntüleme is şöyle olabilir;
<h:commandLink value="#{file.name}" 
onclick="javascript:window.open(root_folder+'/showpffile?fileid=#{file.fileId}','popupWindow', 'dependent=yes,menubar=no,toolbar=no,location=no,resizable=1,scrollbars=yes');">
</h:commandLink>

Çarşamba, Ağustos 05, 2009

jsf richfaces performance tuning

Jsf ve richfaces ile uygulama geliştirdiyseniz yavaşlık ile ilgili şikayetiniz olabilir. Bu teknolojiler dikkatli kullanılmadığında yavaşlık yaşayabilirsiniz. Aşağıda performans için yapılması gereken bir kaç şey eklenmiş.

Richfaces Filter
<filter>
<display-name>RichFacesFilter</display-name>
<filter-name>richfaces</filter-name>
<filter-class>org.ajax4jsf.Filter</filter-class>
<init-param>
<param-name>forceparser</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>enable-cache</param-name>
<param-value>true</param-value>
</init-param>
</filter>

enable-cache parametresi ile richfaces komponentlerini client tarafında cachelenmesini sağlar. bu sayede gözle görülür bir performans sağlanabilir. forceparser parametres ile de richfaces a sadece ajax geri dönüşleri düzenlemesini söylüyoruz. eğer bu parametreyi bu şekilde set etmezsek html dahil bütün geri dönüşleri düzenlemeye kalkar.

<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>

compress_script parametresi ile konteynır'a bütün richfaces kaynaklarını sıkıştırmasını söylüyoruz.

<!-- load all richfaces javascript onetime -->
<context-param>
<param-name>org.richfaces.LoadScriptStrategy</param-name>
<param-value>ALL</param-value>
</context-param>
<context-param>
<param-name>org.ajax4jsf.COMPRESS_SCRIPT</param-name>
<param-value>true</param-value>
</context-param>
<!-- load all richfaces css onetime -->
<context-param>
<param-name>org.richfaces.LoadStyleStrategy</param-name>
<param-value>ALL</param-value>
</context-param>


org.richfaces.LoadScriptStrategy parametresini ALL yapmakla bütün scriptleri ilk başta yüklemesini sağayabiliriz. böylelikle daha ilkin yavaşa yüklense de sonrasında uygulama hızlı bir şekilde çalışarak network trafğini azaltacaktır. aynı şekilde org.richfaces.LoadStyleStrategy parametresini ALL yaparak css lerinde ilk başta yüklemesini sağlayabiliriz.


Bunların dışında ajax kullanırken aşağıdaki durumlara dikkat etmekte fayda var;

-> herhangi bir partial rendering yaparken mutlaka ajaxSingle=true yu kullanmaya özen göstermek,

-> validasyonun gerekli olmadığı rendering durumlarında immediate=true yaparak hızlı bir şekilde cevap dönmesini sağlamak.

-> ajax response sonucunda sadece reRender="" litesini set edeceksek limitToList=true seçeneğini set ederek sadece ilgili alanların set edilmesini sağlamak.

-> ajax regionları kullanarak sadece ilgili region ın update edilmesini sağlamak. ajax region kullanırken renderRegionOnly yi true yaparsak sadece ilgili region update edilir.

-> jsf tagları ile halledilebilen bir işi richfaces tagı ile kullanmamak. örenğin h:datatable ile halledilebilecek bir iş için rich:datatable kullanmamak gerekiyor.

-> business logic kısmını getter lara koymamak.

Cuma, Temmuz 31, 2009

HttpSessionListener ve ServletContextListener

ServletContextListener ve HttpSessionListener bir web projesinde sıkça kullanılması gerekenlerdendir. bir web projesinde session create edilirken ve destroy olurken yapılması gereken işler mutlaka olur. Bunun için HttpSessionListener nesnesini kullanırız.

Aynı şekilde projeyi ilk olarak servera deploy edip başlatırken uygulamanın çalışması boyunca kullanılacak parametreleri yüklemek isteyebiliriz. veya uygulamayı kapatırken yapmamız gereken işler olabilir. Bu durumda contextlistenera ihtiyacımı olacaktır. Bunun için de ServletContextListener ı kullanabiliriz.

Aşağıda ikisini bir arada kullanan bir örnek bulunmaktadır.
public class MySessionListener implements HttpSessionListener, ServletContextListener {
public MySessionListener() {
}

public void sessionCreated(HttpSessionEvent event) {
/*session ilk oluşturulduğunda yapacağınız işleri burada yapabilirsiniz
örneğin aşağıda kullanıcı session objemizi oluşturup sessiona atıyoruz
*/
SessionUserBean sub =new SessionUserBean();
event.getSession().setAttribute("sessionUserBean", sub);
}

public void sessionDestroyed(HttpSessionEvent event) {
// session destroy olurken yapılmak istenen işler...
}

public void contextInitialized(ServletContextEvent event) {
//uygulama deploy edilirken yapılamsı gereken işler...
ApplicationBean appbean = new ApplicationBean();
event.getServletContext().setAttribute("applicationBean",appbean);

}


public void contextDestroyed(ServletContextEvent event) {
//uygulama kapatılırken yapılması gereken işler...
}
}


web.xml deki tanımı ise şöyle yapılabilir.
<!-- Session listeners -->
<listener>
<listener-class>org.yourapp.listener.MySessionListener</listener-class>
</listener>

Pazartesi, Aralık 15, 2008

Log4j tutorial

Log4j javada loglama için kullanılan önemli ve güzel özellikleri olan bir Java API sidir. Log4j yi herhangi java projenizde kullanabilirsiniz. log4j kurulumu için;

1. http://logging.apache.org/log4j/1.2/download.html adresinden apache-log4j-1.2.?.jar ı indirin.

2. log4j-1.2.*.jar lib dosyasını projenize ekleyin. bu jar WEB-INF/lib in altında olması gerekiyor.

3. log4j.properties dosyasını oluşturun. bu dosyanız src klasörünüzün hemen altında olsun. isterseniz log4j.xml dosyasını da oluşturabilirsiniz. çünkü java önce log4j.xml dosyasının var olup olmadığına bakar sonra log4j.properties dosyasına bakar. ama xml yazmak daha karışk gelecektir. buna karşın config dosyası oluşturmak daha kolay olduğu için genelde .properties dosyası oluşturulur.

log4j.rootLogger=debug,sysout,fileout

# sysout log configuration
log4j.appender.sysout=org.apache.log4j.ConsoleAppender
log4j.appender.sysout.Target=System.out
log4j.appender.sysout.Threshold=info
log4j.appender.sysout.layout=org.apache.log4j.PatternLayout
log4j.appender.sysout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %5p (%F:%L) - %m%n

#fileout log configuration
log4j.appender.fileout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.fileout.ImmediateFlush=true
log4j.appender.fileout.Threshold=INFO
log4j.appender.fileout.File=applog.log
log4j.appender.fileout.layout=org.apache.log4j.PatternLayout
log4j.appender.fileout.DatePattern='.'yyMMdd'.txt'
log4j.appender.fileout.layout.ConversionPattern=%d{dd.MM.yyyy HH:mm:ss} %5p (%F:%L) - %m%n

gördüğünüz gibi bu konfigürasyon dosyasında hem dosyaya hemde system out a yazıyoruz.

4.Javada loglama için ise şöyle basitçe kullanımı var.

.
.
private static org.apache.log4j.Logger log = Logger.getLogger(MyLogger.class);
log.info("info message");
log.error("error message");
log.warn("warn message");
.
.


isterseniz loglarınızı mail olarak da gönderebilirsiniz. bu durumda log4j.rootLogger=debug,sysout,fileout,mail şeklinde rootlogger ı değiştirmeniz gerekir.


#email appender
log4j.appender.mail=org.apache.log4j.net.SMTPAppender
#defines how othen emails are send
log4j.appender.mail.BufferSize=1
log4j.appender.mail.SMTPHost="smtp.myservername.xx"
log4j.appender.mail.From=fromemail@myservername.xx
log4j.appender.mail.To=toemail@myservername.xx
log4j.appender.mail.Subject=Log ...
log4j.appender.mail.threshold=error
log4j.appender.mail.layout=org.apache.log4j.PatternLayout
log4j.appender.mail.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


Eğer projenizi weblogic server a deploy ediyorsanız loglama sorunu yaşayabilirsiniz. çünkü weblogic server önce kendi loglama mekanizmasına bakıyor ve onu kullanıyor. kendi projenizdeki loglama mekanizmasını öncelemek için aşağıdaki parametreleri weblogic.xml dosyasına ekleyerek deploy yaparsanız sorun çözülür.
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>


log4j dosyasının detaylı kurulumu için
http://www.vipan.com/htdocs/log4jhelp.html adresine gözatmanızda yarar var.

Cuma, Kasım 14, 2008

Blogger da html kod yayınlama problemi

Bloggerda blog oluşturmaya başladıktan sonra bloggerın yazdığım kodları yayınlayamadığımı gördüm. bu bloggerda blog yayınlayan bütün programcılar için bir sorun maalesef. bunun için küçük bir script ile işi çözebiliriz.

aşağıya aldığım java kodunu kullanarak burada yayınlayacağınız kodu önce dönüştürüp sonra da yayınlarsınız. sorun çözülmüş olur.

package org.karatas.test.misc;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

public class BloggerCodeGenerator {
public static void main(String[] args) {
BloggerCodeGenerator gen=new BloggerCodeGenerator();
gen.generateCode();
}

public void generateCode(){
String newCode="";
try {
File file=new File("D:\\workarea\\text.txt"); //yayınlayacağımız kodu önce bir dosyaya yazabiliriz mesela.

BufferedReader br=new BufferedReader(new FileReader(file));
String str="";
while((str=br.readLine())!=null){
newCode+=str.replaceAll("<", "< işaretinin karakter karşılığı").replaceAll(">", "> işaretiin karakter karşılığı");
}
} catch (Exception e) {
e.printStackTrace();

}
System.out.println(newCode);
}
}

Cuma, Eylül 19, 2008

Web yazılımcısının bedava malzeme çantası - Firefox Add-ons

eğer bir web yazılımcısı iseniz veya web designerı iseniz sizin için olmazsa olmazlar listesinde firefox pluginleri olmalı bence. firefox ta işiniz kolaylaştırcak o kadar çok eklenti varki bunları tanıdığınızda vazgeçemiyceksiniz. bunlardan bir kaç tanesini sizinle paylaşayım istedim.

Web Developer : https://addons.mozilla.org/en-US/firefox/addon/60
Bu toolu eklediğinizde firefox browserınızda bununla ilgili bilgiler göreceksiniz. girdiğiniz web sayfasının css lerini izleme, düzenleme, html kodunu gene online izleme ve düzenleme sayfadaki formları tablolar vs işaretleme inceleme gibi bir sürü şey yapabilirsiniz

Firebug https://addons.mozilla.org/en-US/firefox/addon/1843

Buyrun size en önemli eklentilerden bir tanesi. javascript debuging bunun en önemli maharetlerinden bir tanesi ki piyasadaki en başarılı free tool bence. sayfadaki herhangi bir şeyin üstüne gelip "inspect element" dediğinizde sizi hemen onun koduna götürecektir. Neyse özelliklerini anlatmakla bitiremiycem iyisimi siz inceleyin.

YSlow
https://addons.mozilla.org/en-US/firefox/addon/5369

sizin bir sayfanız var ve sayfanın ne kadar hızlı yüklendiğini, sayfadaki hangi özelliğin onu yavaşlattığını, sayfanızı hızlandırmak için neler yapmanız gerektiğini öğrenmek istiyorsanız buyrun size bu eklentiyi kullanın.

daha neler neler,

en iyisi siz https://addons.mozilla.org/en-US/firefox/ girin ihtiyacınız olan malzemeyi alın.

selam ile...