package tags;
import java.io.StringWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.JspException;
import javax.servlet.jsp.tagext.JspFragment;
import javax.servlet.jsp.tagext.SimpleTagSupport;
public class DbTag extends SimpleTagSupport {
private String jndiName;
@Override
public void doTag() throws JspException {
try {
JspWriter out = getJspContext().getOut();
/**
* Önce tagımızın bodysini almak için getJspBody i kullanıyoruz. JspFragment
* tipinde dönen nesnenin invoke metoduna içi boş bir StringWriter gönderiyoruz
* ki içi tagın body si ile doldurulsun.
*/
StringWriter swriter = new StringWriter();
JspFragment f = getJspBody();
if (f != null) {
f.invoke(swriter);
}
/* Artık tagın body si elimizde. Body içinde bir SQL sorgum olacak.
* Onu da execute jndi attribute undeki resource ile execute edeceğiz. */
String sQuery = swriter.toString();
/** DB işi için aşağıdaki sırayla nesneler oluşturulup query çalıştırılacak.
* Context
* Datasource
* Connection
* PreparedStatement
* Result
*/
Context ctx = new InitialContext();
DataSource datasource = (DataSource) ctx.lookup(this.jndiName);
Connection con = datasource.getConnection();
PreparedStatement ps = con.prepareStatement(sQuery);
ResultSet result = ps.executeQuery();
// Resultın içindeki tablo hakkında bilgiye ResultSetMeta yı kullanıyoruz
ResultSetMetaData resultMeta = result.getMetaData();
// Kolon bilgilerini tablonun başlığı olarak yazalım.
out.println("<table>");
out.println("<thead><tr>");
for(int i=1;i<resultMeta.getColumnCount()+1;i++){
out.println("<th>"+resultMeta.getColumnName(i)+"</th>");
}
out.println("</tr></thead><tbody>");
// Satır satır result içeriğini tabloya yazalım.
while(result.next()){
out.println("<tr>");
for(int i=1;i<resultMeta.getColumnCount()+1;i++){
out.print("<td>"+result.getString(i)+"</td>");
}
out.println("</tr>");
}
out.println("</tbody></table>");
} catch (Exception ex) {
ex.printStackTrace(); // Hatayı tüm detayları ile alt alta yazıyor.
}
}
public void setJndiName(String jndiName) {
this.jndiName = jndiName;
}
}
Aklımda Kalası Kelimeler
* давайте работать вместе
* Zarf ve Mazruf, Zerafet(xHoyratlık) ile aynı kökten(za-ra-fe) gelir
* Bedesten
* Suç subuta ermiştir - Suç sabit olmuştur
21 Kasım 2009 Cumartesi
Java da Tag Handler Kodu
Kaydol:
Kayıt Yorumları (Atom)
Hiç yorum yok:
Yorum Gönder