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 |
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 🙂
Panggil useBean dari servlet
Masih kelanjutan Cara Compile Extends pada UseBean, jika belum dibaca, harap baca dulu sekarang, kita akan membahas tentang cara memanggilnya pada servlet, kita lanjutkan :
—————
Kita buat file servlet kita, misalkan kita taruh di web-inf\classes\panggilaku\servletpanggil.java
—————
Code: |
package panggilaku; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import panggilmahasiswa.panggil;public class servletpanggil extends HttpServlet{ public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException{ panggil x=new panggil(); x.setnama(“samsonasik”); request.setAttribute(“name”,x.getnama()); request.getRequestDispatcher(“/tampilkan.jsp”).forward(request,response); } } |
——————-
compile
——————-
membuat mapping servlet udah bisa kan? kalau belum silakan baca dulu, …..
sekarang, kita panggil di file jsp kita (/tampilkan.jsp berarti ada di webapps\tampilkan.jsp)
Code: |
Halo ${name} |
—–
simple kan …
——–
Servlet Mapping pada JSP
Servlet Mapping dapat dikatakan pemetaan web pada jsp, dengan servlet mapping, kita bisa mengubah alamat situs kita sesuka kita, misalkan http://localhost/aku.aku.kamu?bla-bla-bla….yeah…sip
padahal tak ada direktori itu sebenarnya di sisi server, lah, kenapa bisa begitu ? Kita bisa mengaturnya pada web.xml (Deployment Descriptor) kita yang ada di directory, berikut saya lampirkan contohnya … misalkan kita buat file .jsp kita, misal \rahasia\index.jsp
Code: |
Halo semua… |
nah, sekarang kita buat file servlet untuk halaman pengelabuan : (\web-inf\classes\wordpress\jadul.java)
Code: |
package wordpress;import java.io.*; import javax.servlet.*; import javax.servlet.http.*;public class jadul extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException{ req.getRequestDispatcher(“/rahasia/index.jsp”).forward(req,resp); } } |
————-
—-Compile file di atas——
Jika servlet di atas digunakan untuk menangkap parameter, misalkan pd halaman login, untuk securitas,kita bisa gunakan doGet dan doPost pada saat yang bersamaan, yang menjalankan aksi yang sama
——–
Langkah terakhir, kita lakukan servlet-mapping
Code: |
<?xml version=”1.0″ encoding=”ISO-8859-1″?> <web-app xmlns=”http://java.sun.com/xml/ns/javaee” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xsi:schemaLocation=”http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd” version=”2.5″><display-name>Welcome to Tomcat</display-name> <description> Welcome to Tomcat </description><!–servlet mappingnya–><servlet> <servlet-name>servletku</servlet-name> <servlet-class>wordpress.jadul</servlet-class> </servlet> <servlet-mapping> <servlet-name>servletku</servlet-name> <url-pattern>/punyaku.go</url-pattern> </servlet-mapping></web-app> |
———– >> Restart Tomcatnya …
Nah, sekarang kita bisa panggil website-nya : http://localhost/punyaku.go
——————————-
Selamat mencoba ————-
(( — Untuk konfigurasi servlet, bisa baca Konfigurasi Tomcat –))
——————————-
Contoh penggunaan RequestDispatcher pada MVC
pada prinsipnya, MVC (Model View Controller) adalah pemisahan antara presentation layer dan logical layer, layer View cuma sebagai tampilan saja, dan syntax, logika, semua ada dalam Model dan controller menjalankannya, berikut contohnya :
———————————————————————
Misalkan kita punya file input panjang dan lebar persegi panjang :
———————————————————————
<form action=”/servlet/input/” method=”Post”>
<!–alamat input menunjukkan alamat kelas servlet kita disimpan–>
<table border=0>
<tr>
<td>Panjang</td>
<td><input type=”text” name=”panjang”></td>
</tr>
<tr>
<td>Lebar</td>
<td><input type=”text” name=”lebar”></td>
</tr>
<tr>
<td></td>
<td><input type=”submit” value=”input”></td>
</tr>
</table>
</form>
———————————————————————–
Sekarang kita buat Modelnya (javabeans)
———————————————————————–
//simpan di dalam folder web-inf/classes/wordpress
package wordpress;
public class modelnya{
int panjang,lebar;
public void setpanjang(int panjang){
this.panjang=panjang;
}
public void setlebar(int lebar){
this.lebar=lebar;
}
public int getpanjang(){return panjang;}
public int getlebar(){return lebar;}
public int getluaspp(){return panjang*lebar;}
}
//compile………………
————————————————————————-
Sekarang kita buat controller-nya, kita simpan di web-inf/classes/
————————————————————————-
import wordpress.modelnya;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class input extends HttpServlet{
public void doPost(HttpServletRequest request,HttpServletResponse response)
throws ServletException,IOException{
//instansiasi kelas modelnya
modelnya m=new modelnya();
//ambil atribute
int panjang=Integer.parseInt(request.getParameter(“panjang”));
int lebar=Integer.parseInt(request.getParameter(“lebar”));
//pasang atribute
m.setpanjang(panjang); m.setlebar(lebar);
//isi atribute
request.setAttribute(“panjang”,m.getpanjang());
request.setAttribute(“lebar”,m.getlebar());
request.setAttribute(“luas”,m.getluaspp());
RequestDispatcher disp=request.getRequestDispatcher(“/tampil.jsp”);
disp.forward(request,response);
}}
//Compile…..
————————————————————-
Sekarang kita buat viewnya,
————————————————————-
//tampil.jsp
Panjang = ${panjang}
Lebar = ${lebar}
Luas persegi panjang = ${luas}
Servlet, i’m coming
kebanyakan dari kita maunya enaknya saja, langsung ke jsp, padahal tidak tahu bahwa embahnya jsp itu servlet, ya java, cure java, murni java,nanti kelasnya dipanggil di browser, ok…, kita mulai program servlet kita. :
/*
*simpan file ini dengan nama HelloWorld.java
*simpan pada WEB-INF\classes
**/
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException{
PrintWriter out=response.getWriter();
out.println(“Halo dunia….”);
}
}
/*
*compile file tersebut.
**/
setelah dicompile, kita lakukan, kita ubah configurasi xml-nya, buka WEB-INF\web.xml, lalu tambahkan
…..
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
…..
Panggil di browser, contoh http://localhost:1234/servlet/HelloWorld/HelloWorld
kalau di tomcat tidak berhasil, coba pakai orion webserver.
leave a comment