JSP Custom Tag Library
Bosan sama JSTL & Standard Action ? Gunakan Custom Tag Library Anda sendiri. Pada tutorial kali ini, saya akan memaparkan penggunaan SimpleTagSupport untuk menjalankan tag buatan kita sendiri ( tentunya ada aturan mainnya 🙂 ). Class SimpleTagSupport mengextends Interface SimpleTag yang mengextends Interface JSPTag. Tentang method2 detail nya, mungkin bisa dicari sendiri di google, kali ini saya lebih memfokuskan pada penggunaan method doTag saja :).
Ok, let’s start. Pertama, buat project yang struktur directory nya seperti di bawah ini. (Jika belum terbiasa menggunakan WAR (Web Application Archive) , Anda bisa gunakan ROOT directory ) :
Nah, kalau sudah, kita isi source code masing2.
1). wordpress.tld
<?xml version="1.0" encoding="ISO-8859-1" ?> <taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd" version="2.0"> <tlib-version>1.2</tlib-version> <uri>simpletagwordpress</uri> <tag> <description>Worst use of a custom tag</description> <name>simpletag</name> <tag-class>wordpress.SamsonSimpleTag</tag-class> <body-content>empty</body-content> </tag> </taglib>
2). SamsonSimpleTag.java
package wordpress; import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*; public class SamsonSimpleTag extends SimpleTagSupport{ public void doTag() throws JspException, IOException{ PageContext pageContext = (PageContext) getJspContext(); JspWriter out = pageContext.getOut(); out.print("Test Tag Buatanku"); } }
And The View :
3). wordpress.jsp
<%@ taglib prefix="tagbuatanku" uri="simpletagwordpress" prefix="r"%> <tagbuatanku:simpletag/> <!-- agar ketika class diubah & dikompilasi ulang, otomatis reload --> <r:reload/>
Asik kan 🙂
————————
referensi : Basham, Bryan ; Sierra, Kathy ; Bates, Bert : Head First Servlet & JSP
mendapatkan url parameter dari servlet
Pemanggilan url yang sering kita pakai pada framework2 php seperti CodeIgniter atau pun Zend ataupun framework php yang lain dapat kita gunakan pula di JSP, dengan servlet. misal, kita gunakan url parameter edit data :
<url-pattern>/detailbrg/kode/*</url-pattern>
Nah, cara panggil di servlet nya bisa seperti ini :
//————————————
response.setContentType(“text/html;charset=UTF-8”);
PrintWriter out = response.getWriter();
String[] spliturl = request.getRequestURL().toString().trim().split(“/”);
String kode = null;
for(int i=0;i
Template helper menggunakan Servlet
Hm…, lama nih saya ga `nyentuh` servlet & JSP, hitung2 membuka lagi memori lama(cie…cie..), kemarin saya baca buku “Web Development with Java Using Hibernate, JSPs, and Servlets” karya Tim Downey, ternyata banyak hal yang saya belum ketahui, contohnya tentang materi yang akan kita bahas kali ini.
Konsep penggunaan template helper pada berbagai macam framework maupun bahasa pemrograman selalu mengacu pada reuse template include, yang pada intinya akan memudahkan programmer dan designer itu sendiri, serta menghemat memori karena menghemat source code yang ada.
Dalam Java Web Development, kita bisa menggunakan servlet untuk menginclude header & footer secara otomatis. Secara class diagram dapat digambarkan sebagai berikut :
Berikut Source Code untuk class HelperBase :
package Helpers; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author samsonasik */ public class HelperBase extends HttpServlet { protected HttpServletRequest request; protected HttpServletResponse response; public HelperBase(){} public HelperBase(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.request = request; this.response = response; } }
Kemudian, source code untuk ControllerHelper :
package Helpers; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.*; /** * * @author samsonasik */ public class ControllerHelper extends HelperBase { public ControllerHelper(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { super(request, response); } public void doGet(String address) throws ServletException, IOException { request.getSession().setAttribute("helper", this); request.getRequestDispatcher("/header.jsp").include(request, response); request.getRequestDispatcher("/"+address).include(request, response); request.getRequestDispatcher("/footer.jsp").include(request,response); } }
———–
Nah, sekarang kita sudah punya ControllerHelper, sekarang,kita bisa gunakan untuk berbagai macam controller, tinggal instansiasi kelas ControllerHelper dan gunakan method doGet(address) seperti di bawah ini :
package Controllers; import Helpers.ControllerHelper; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author samsonasik */ public class TestController extends HttpServlet { ControllerHelper helper ; @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { helper = new ControllerHelper(request, response); helper.doGet("index.jsp"); } }
Referensi : Web Development With Java Using Hibernate, JSPs,and Servlets – Tim Downey : 2007
Membuat Paging pada JSP
Hm…, lama nih ga nulis artikel tentang JSP, habis, nasib ngurusin PHP mulu, :), he..he… Di sini saya memodifikasi kelas pagination punya CodeIgniter (PHP), cuma copy logika nya aja, karena pagination nya emang udah bagus 🙂 (bilang aja ga bisa buat sendiri, xi..xi…xi…).
Hal pertama yang harus ditentukan adalah, apa yang akan kita list dan kita paging. Saya di sini akan memberi contoh tentang paging menggunakan PostgreSQL, dengan table orang dengan field2 nya id, nama, alamat, simple kan ? 🙂
OK, sekarang kita siapkan modelnya :
1. Kelas Koneksi
package beanpackage; import java.sql.*; /**  *  * @author samsonasik  */ public class Koneksi {  private Connection con=null;  private Statement st=null;  private ResultSet rs=null;  public Koneksi()throws SQLException,ClassNotFoundException {  Class.forName("org.postgresql.Driver");  con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/ikhsandb","ikhsan","123456");  st = con.createStatement();  }  public void seleksi(String s) throws SQLException{  rs = st.executeQuery(s);  }  public boolean getNext() throws SQLException{  return rs.next();  }  public String getText(String t) throws SQLException{  return rs.getString(t);  }  public int getInt(String t) throws Exception {  return rs.getInt(t);  } }
2. Kelas Pagination (library pagination nya )
package beanpackage; /**  *  * @author samsonasik  */ //dimodifikasi dari kelas paginationnya codeIgniter public class Pagination {    public int totalrows = 0;    public int numlink  = 2;    public int curpage  = 0;    public int perpage = 2;    public String firstlink = "First";    public String nextlink = "Next";    public String prevlink = "Previous";    public String lastlink = "Last";    public String createlinks(int halaman) {        if ( (this.totalrows==0) || (this.perpage==0)) {            return "";        }        int numpage = this.totalrows / this.perpage ;        int sisa = this.totalrows % this.perpage;        if (sisa > 0 ){            numpage = numpage + 1;        }        if (numpage==1) {            return "";        }        try {            this.curpage = halaman;        } catch (Exception e) {            this.curpage = 1;        }        try {            this.curpage = (int) this.curpage;        } catch (Exception e) {            this.curpage = 1;        }        if (this.curpage > this.totalrows)        {            this.curpage = (numpage -1 ) * this.perpage ;        }        if (this.curpage < 1 ) {            this.curpage = 1;        }        int uri_page_number = this.curpage ;        int start = ((this.curpage - this.numlink) > 0 ) ? this.curpage - (this.numlink -1) : 1;        int end  = ((this.curpage + this.numlink < numpage)) ? this.curpage + this.numlink : numpage;        //inisialisasi ...        String theoutput = "";        //Render first link        if (this.curpage > (this.numlink +1))        {            if (this.curpage <= numpage) {                theoutput +="<a href=\"?page=1\">"+this.firstlink+"</a> ";            } else {                theoutput +="";            }        }        //Render Previous Link        if (this.curpage !=1) {            if (this.curpage <= numpage) {                theoutput +="<a href=\"?page="+(this.curpage-1)+"\">"+this.prevlink+"</a> ";            } else {                theoutput +="";            }        }        //render digit link        for (int loop = start -1; loop<end;loop++) {            if (this.curpage <= numpage) {            if (this.curpage == (loop+1)) {                theoutput += loop+1+" ";            } else {                theoutput += "<a href=\"?page="+(loop+1)+"\">"+(loop+1)+"</a> ";            }            } else {                theoutput +="";            }        }        //render the next link        if (this.curpage < numpage) {            theoutput += "<a href=\"?page="+(this.curpage+1)+"\">"+this.nextlink+"</a> ";        } else {            theoutput +="";        }        //render the last link        if ((this.curpage + this.numlink)<numpage) {            theoutput += "<a href=\"?page="+numpage+"\">"+this.lastlink+"</a>";        }        return theoutput;    } }
3. Kelas Orang (Model dari table orang)
package beanpackage; import java.sql.SQLException; import java.util.ArrayList; /**  *  * @author samsonasik  */ public class Orang {    private int id;    private String nama, alamat;    public Orang(){ }    public Orang(int id, String n,String a){       this.id = id;       this.nama = n;       this.alamat = a;    }    public void setNama(String n)    {        this.nama = n;    }    public void setId(int id) {        this.id = id;    }    public int getId() {        return id;    }    public void setAlamat(String al)    {        this.alamat = al;    }    public String getNama()    {        return nama;    }    public String getAlamat()    {        return alamat;    }    //seleksi offset limit    public ArrayList<Orang> seleksi(int offset, int limit) throws SQLException, ClassNotFoundException    {        ArrayList<Orang> temp = new ArrayList<Orang>();        try {            Koneksi kon = new Koneksi();            kon.seleksi("select * from orang offset '"+offset+"' limit '"+limit+"'");            while (kon.getNext()) {                temp.add(new Orang(kon.getInt("id"), kon.getText("nama"), kon.getText("alamat")));            }        } catch(Exception e) {}        return temp;    }    public int getJml() {        int jml = 0;        try {            Koneksi kon = new Koneksi();            kon.seleksi("select count(*) as jml from orang");            if (kon.getNext()) jml = kon.getInt("jml");        } catch (Exception e){}        return jml;    } }
Nah, kalau sudah tuh, kita buat servletnya, ga akan saya tulis lengkap
deh kaya’nya, cuma isi method nya aja yang memanggil
model-model yang ada.
.............        ArrayList<Orang> temp = new ArrayList<Orang>();        PrintWriter out = response.getWriter();        try {            Orang org = new Orang();            int page = 0;            try {                page = Integer.parseInt(request.getParameter("page"));            } catch (Exception e) {                page = 1;            }            Pagination pgn = new Pagination();            pgn.totalrows = org.getJml();            temp = org.seleksi(page*pgn.perpage-pgn.perpage,pgn.perpage);            request.setAttribute("temp", temp);            request.setAttribute("perpage",pgn.perpage);            request.setAttribute("paging", pgn.createlinks(page));        } catch(Exception e) {            out.print("terjadi kesalahan koneksi");            out.close();        }        request.getRequestDispatcher("/testlist.jsp").forward(request, response); ................
Jangan lupa konfigurasi web.xml nya, udah bisa kan ? 🙂
Terakhir adalah view :
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> ${paging} <table border="1" cellpadding="1" cellspacing="1"> <tr> <td>No</td> <td>Id</td> <td>Nama</td> <td>Alamat</td> </tr> <c:catch var ="catchException"> Â Â Â <c:if test="${param.page eq null || param.page eq '1'}"> Â Â Â Â Â Â Â <c:set var="no" value="0"/> Â Â Â </c:if> Â Â Â <c:if test="${param.page gt '1'}"> Â Â Â Â Â Â Â <c:set var="no" value="${param.page * perpage - perpage }"/> Â Â Â </c:if> Â </c:catch> Â Â Â <c:if test="${catchException !=null}"> Â Â Â Â Â Â Â <c:set var="no" value="0"/> Â Â Â </c:if> Â Â Â <c:forEach var="testlist" items="${temp}"> Â Â Â Â Â Â Â <c:set var="no" value="${no +1}"/> <tr> <td>${no} .</td> <td>${testlist.id}</td> <td>${testlist.nama}</td> <td>${testlist.alamat}</td> </tr> </c:forEach></table> ${paging}
Simple kan ? selamat mencoba 🙂
Servlet Filter
Filter adalah sebuah komponen yang dapat menangani request atau response yang harus atau tidak harus dilakukan/diterima oleh client. Secara normal, filter digunakan untuk membungkus dan memanipulasi request, response, atau nilai header sebelum dan setelah eksekusi target.
Now, kita akan mencoba mempraktekkan sebuah filter sederhana 🙂
Pertama, kita siapkan GenericFilter sebagai implementasi dari interface javax.servlet.Filter, mengimplementasikan method doFilter, init,dan destroy.
Method init digunakan untuk menginisialisasi filter, yang kemudian dijalankan oleh doFilter, sedang method destroy digunakan untuk menghancurkan object yang diinstansiasi dari kelas FilterConfig.
berikut coding standard untuk kelas GenericFilter :
Code: |
/* from http://www.orionserver.com/tutorials/filters/1.html */ package filters.learn; import javax.servlet.Filter; public class GenericFilter implements Filter{ |
Now, let’s Writing your first Filter :
Code: |
package filters.learn; import filters.learn.GenericFilter; import java.io.*; public class HelloWorldFilter extends GenericFilter { public void doFilter(final ServletRequest req, final ServletResponse resp, FilterChain chain) } |
Kita akan mencoba mengetes filter di atas, kita siapkan file JSP kita :
Code: |
hai, ini aku ${me} |
Pertanyaannya, bagaimana configurasi filter di atas?? eit …, tunggu dulu, sebelum kita bicara konfigurasi, tentunya kita butuh sebuah servlet lagi yang akan kita memforward, dan memapping address url, berikut codingnya :
Code: |
package filters.learn;
import java.io.*; public class ServletForwarderHello extends HttpServlet{ |
Nah, sekarang waktunya konfigurasi web.xml kita :
…..
<servlet>
<servlet-name>servletforwarderhellofilter</servlet-name>
<!–class servlet –>
<servlet-class>filters.learn.ServletForwarderHello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletforwarderhellofilter</servlet-name>
<!–alamat url –>
<url-pattern>/filter</url-pattern>
</servlet-mapping>
<filter>
<filter-name>HelloWorld</filter-name>
<filter-class>filters.learn.HelloWorldFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HelloWorld</filter-name>
<url-pattern>/filter</url-pattern>
</filter-mapping>
…..
Now, let’s try : http://localhost:8080/advance/filter (ceritanya, saya built ke dalam advance.war, kalau ditaruh di bawah direktori ROOT, cukup http://localhost:8080/filter)
Selamat mencoba 🙂
Referensi :
1. http://www.orionserver.com/tutorials/filters/
2. http://www.javapassion.com
Implementasi MVC mggnkn JSTL
Persiapan :
1. satu gelas kopi.
2. Tomcat yang sudah terkonfigurasi.
3. Copykan library JSTL yaitu standard.jar dan jstl.jar dari tomcat\webapps\examples\WEB-INF\lib ke tomcat\webapps\ROOT\WEB-INF\lib
4. Restart Tomcatnya
5. Let’s Coding…
———-
Siapkan kelas Modelnya (contoh, simpan di WEB-INF\classes\MVCModel)
Code: |
package MVCModel; import java.sql.*; public class OpenConnect{ |
—>compile deh
Selanjutnya, kita buat kelas Controlnya(Contoh, simpan di WEB-INF\classes\MVCControl)
Code: |
package MVCControl; import MVCModel.OpenConnect; import java.sql.*; public class Controller extends HttpServlet{ //set atribut jumlah dengan variable jml //deklarasi array field2 tabel for (int i=0;i<=jml ;i++ ) //isi array ke i dengan field2 yang ada… //isi atribut… } |
–>compile deh
Di sini saya contohkan menggunakan database mysql, ada tabel buku dengan field2nya kodebuku dan namabuku.
————
Nah, sekarang, tingggal ditampilkan di View
Code: |
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %> <table border=”1″> <tr> <td>No.</td> <td>Kode Buku</td> <td>Nama Buku </td> </tr> <c:forEach var=”i” begin=”1″ end=”${jumlah}”> <tr> <td>${i}</td> <td>${kodenya[i-1]} </td> <td>${namanya[i-1]}</td> </tr> </c:forEach> </table> |
Oh, ya, jangan lupa setting DD (Deployment Descriptor-nya) di web-xml, –>tambahkan
Code: |
<servlet> <servlet-name>controller</servlet-name> <servlet-class>MVCControl.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/mvc.view</url-pattern> </servlet-mapping> |
—————–
Tinggal testing…
Quote: |
http://localhost:8080/mvc.view |
Packaging Web Components (JSP)
Pemaketan pada JSP dikenal dengan nama WAR (Web Application Archive), ini digunakan untuk mengarsipkan aplikasi yang didalamnya bisa dimasukkan segala class yang biasa kita tampung di \web-inf\classes, dan file2 jsp kita.
secara default,(menggunakan Tomcat), file war yang terpasang adalah ROOT.war, nah, misal kita coba mengarsipkan yang lain, misalnya wordpress.war, caranya kita masuk ke folder wordpress, kita buat War di situ, di sini saya ambil contoh wordpress.war dengan cara ketik jar -cvf wordpress.war * , * berarti semua file yang ada di dalamnya diikut sertakan, baik file maupun folder.
Code: |
F:\Tomcat\webapps\ROOT\wordpress> jar -cvf wordpress.war * added manifest adding: connect.jsp(in = 403) (out= 277)(deflated 31%) adding: handsome.jsp(in = 156) (out= 68)(deflated 56%) adding: handsome.jsp.bak(in = 144) (out= 91)(deflated 36%) adding: login.jsp(in = 1072) (out= 494)(deflated 53%) adding: login.jsp.bak(in = 1058) (out= 485)(deflated 54%) adding: logout.jsp(in = 234) (out= 162)(deflated 30%) adding: logout.jsp.bak(in = 235) (out= 162)(deflated 31%) adding: mvc/(in = 0) (out= 0)(stored 0%) adding: mvc/input.html(in = 422) (out= 222)(deflated 47%) adding: mvc/head.jsp(in = 23) (out= 24)(deflated -4%) adding: show.jsp(in = 14) (out= 16)(deflated -14%) adding: show.jsp.bak(in = 33) (out= 35)(deflated -6%) adding: tes.jsp(in = 49) (out= 39)(deflated 20%) adding: utama.jsp(in = 365) (out= 216)(deflated 40%) adding: utama.jsp.bak(in = 365) (out= 217)(deflated 40%) |
Nah, kita sekarang bisa deploy, caranya , buka http://localhost:8080
masuk ke Tomcat Manager, masukkan username dan password tomcat, akan tampil Tomcat Web Application Manager
di bawah ada WAR file to deploy
tinggal browse, cari file war yang telah kita bentuk, dan deploy, beres deh :
Kita bisa panggil sekarang http://localhost:8080/wordpress
Setting Dynamic path di Tomcat
Hm…, selama ini, yang kita ketahui adalah directory suatu web hanya ada di suatu webroot web container.
Nah, kali ini saya akan membahas dynamic path, maksudnya ? Yang saya maksudkan adalah penggunaan Tomcat
yang tidak cuma tergantung pada satu path aja, misalnya, berada pada F:\tomcat\webapps\ROOT, tapi kita
bisa menambahkan path lain, misalnya, di D:\work\JSP, atau E:\webku\ , atau yang lain, asyik kan ?
Caranya adalah menambahkan file konfigurasi di Tomcat\conf\Catalina\localhost
misalkan kita ingin menambahkan path /wordpress, kita tinggal
tambahkan file wordpress.xml di tomcat\conf\Catalina\localhost
wordpress.xml
Code: |
<?xml version=”1.0″ encoding=”UTF-8″?> <Context docBase=”F:\data samson\work\JSP” path=”/wordpress”/> |
berarti, kita bisa panggil
http://localhost:8080/wordpress –> merujuk ke semua file di bawah direktori
F:\data samson\work\JSP
kita bisa menambahkan path2 yang lain semau kita, jadi intinya seperti path2 bayangan yang bisa kita tampilkan semua kita…
asyik kan…
Automatic reload Tomcat
Ketika kita melakukan perubahan pada kelas, baik itu javabean maupun servlet, maka secara default, kita harus restart tomcatnya, menyusahkan sekali bukan? Ketika ada perubahan sedikit saja, untuk melihat hasilnya, kita harus restart Tomcatnya. Nah, untuk penanganan hal ini,kita perlu setting tambahan konfigurasi yang telah ada.
Tambahkan tag berikut pada conf/server.xml
Code: |
<Context path=”/ROOT” docBase=”webapps/ROOT” debug=”0″ reloadable=”true” > </Context> |
Setelah itu, edit tag yang ada di conf/context.xml
Code: |
<Context reloadable=”true” privileged=”true”> |
Setelah melakukan perubahan konfigurasi ini, restar Tomcatnya, selamat mencoba 🙂
JSP vs PHP Exception
PHP :
Code: |
<? try{ if (!@$x=10/0){ throw new Exception(“salah logika…”);} }catch(Exception $e){ print $e->getMessage(); } ?> |
JSP :
Code: |
<% try{ int x=10/0; }catch(Exception e){ out.print(“salah logika…”); } %> |
JSP vs PHP number format :)
di PHP
Code: |
<? $var=10000000; print number_format($var,2,’,’,’.’); /* $var adalah variabel kita angka 2, berarti 2 di belakang koma ‘,’ , berarti pemberian koma diakhir ‘.’ , berarti pemberian titik untuk pembagian per seribu */ ?> |
Hasilnya
Quote: |
10.000.000,00 |
kalau di JSP, saya bingung nyari2 formatnya,, ada juga format US, yaitu pembagian perseribu menggunakan koma, sedang akhir2 malah menggunakan titik, kemudian saya cari lagi yang format IDR, eh, tetep aja sama, nah loh, akhirnya saya nemu format GERMANY, yang menggunakan format sama seperti di atas…yaitu pembagian perseribu menggunakan . (titik), dan terakhir menggunakan ,(koma).
Code: |
<%@ page import=”java.text.*”%> <%@ page import=”java.util.Locale”%> <%double var = 10000000;NumberFormat formatid = NumberFormat.getCurrencyInstance(Locale.GERMANY);out.print(“<br>”); String rep=formatid.format(var); //hitung jumlah karakter untuk mengakalin … int getminsatu=getjml-1; out.println(rep.substring(0,getminsatu)); |
karena format germany tidak dikenal (Rp, atau $ nya-red), maka saya potong(substring) bagian terakhir untuk mengakalin , jadinya nampil deh …
Hasilnya
Quote: |
10.000.000,00 |
nl2br pada jsp
sama halnya dengan php, di jsp kita juga bisa menggunakan method untuk ganti baris saat si user mengetikkan komentar pada text area sehingga tampil apa adanya seperti yang user ketikkan, misalnya mengetikkan “wah, bagus banget nih, <Enter>boleh minta tanda tangan ga ?: ) “, kalau tanpa function untuk memanggil ganti baris, maka halaman web hanya akan menampilkan satu baris, karena value [] Enter tidak dikenali sehingga dianggap seperti spasi.
Berikut contoh penerapan pada aplikasi buku tamu :
Seperti biasa, siapkan file koneksi di Bean-nya :
/* =============================
simpan di –> web-inf/learn/config.java;
*/
Code: |
package learn;import java.sql.*;
public class config{ public Connection con=null; public void konekdb()throws Exception{ public boolean getnext()throws Exception{ public String getText(String t)throws Exception{ |
/*——–web-inf/learn/Insert.java———–*/
Code: |
package learn;import java.sql.*;
public class Insert extends config{ |
/* ———–web-inf/learn/Tampil.java ————–*/
Code: |
package learn;import java.sql.*;
public class Tampil extends config{ |
==============
Nah, sekarang kita buat file inputan di *.jsp nya
Code: |
<form id=”form1″ name=”form1″ method=”post” action=”save.jsp”> Nama : <input type=”text” name=”nama” /> <br /> Email : <input type=”text” name=”email” /> <br /> Komentar : <textarea name=”komentar”></textarea> <input type=”submit” name=”Submit” value=”Submit” /> </form> |
/*===========
/* save.jsp */====
===============
*/
Code: |
<jsp:useBean id=”obj” class=”learn.Insert”/><% obj.konekdb(); String nama=request.getParameter(“nama”); String email=request.getParameter(“email”); String komentar=request.getParameter(“komentar”); obj.insert(nama,email,komentar); |
================
tampilbukutamu.jsp
================
Code: |
<%! //deklarasi method ganti baris pada komentar //( sama dengan function nl2br pada php) String nl2br(String str){ return str.replaceAll(“\n”, “<br>”); } %> <jsp:useBean id=”obj” class=”learn.Tampil”/> <% obj.konekdb(); obj.bukutamu();while (obj.getnext()){ %> <table width=”307″ border=”1″> <tr> <td width=”71″>Nama</td> <td width=”10″>:</td> <td width=”204″>Â <%=obj.getText(“nama”)%></td> </tr> <tr> <td>Email</td> <td>:</td> <td>Â <%=obj.getText(“email”)%></td> </tr> <tr> <td valign=”top”>Komentar</td> <td valign=”top”>:</td> <td valign=”top”>Â <%=nl2br(obj.getText(“komentar”))%></td> </tr> </table> <% } %> |
Working with jstl
Dengan menggunakan JSTL (Java Standard Tag Library), kita bisa menggunakan tag-tag(<>) library yang dimiliki oleh java, caranya, kita bisa copy kan folder lib yang ada di folder example\web-inf tomcat kita ke folder root\web-inf webapps kita, nah, contoh penggunaannya seperti berikut :
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>
<html><body>
Welcome to our page !
<c:if test=”${empty param.username}”>
<jsp:forward page=”HandleIt.jsp”/>
</c:if>
Hello ${param.username}
</body></html>
—————
—> jika tidak input username, maka forward ke HandleIt.jsp, tanpa mengubah alamat adress bar :), selamat mencoba.
—-> Head First Servlet & JSPBryan Basham, Kathy Sierra, & Bert Bates.
membuat halaman errorPage
Mungkin kita pernah merasa bingung, wah, gimana ya kalau kita hosting, terus halaman kita error, terus kan ketahuan tuh errornya di mana, line berapa, bisa gawat kan ?
Nah, kalau di jsp, kita bisa atur2 tuh 🙂 , caranya, kita buat halaman yang sekiranya akan jadi error, misalnya badpage.jsp
—————————————–
<%@ page errorPage=”error.jsp”%>
<%
int x=10/0; %>
Dari script di atas, kan ketahuan salahnya, 10/0 itu ga bisa 🙂 , nah, kalau langsung error aja , ketahuan salahnya di line berapa, cara penanggulangannya dengan cara @ page errorPage yang akan menghandle error yang terjadi , dan diredirect ke error.jsp
—————————————–
Nah, sekarang kita buat error.jsp
————————-
<%@ page isErrorPage=”true”%>
Website lagi di maintenance
————————–
padahal emang webnya lagi error 🙂
Nah, akan lebih efektif lagi jika kita mengaturnya pada web.xml (web-inf\web.xml), kita tambahkan tag xml seperti berikut :
<!– Handling ErrorPage –>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/error.jsp</location>
</error-page>
<!–Handling not Found Page –>
<error-page>
<error-code>404</error-code>
<location>/notfound.jsp</location>
</error-page>
coba aja 🙂
3 comments