BAB 3 Pembahasan Servlet Lanjutan - JENI-Web Programming-Bab 3-Advanced Servlets

  digunakan oleh pengem bang Java unt uk m em enuhi perm int aan client dan m enghasilkan respon secara dinam is. Kit a j uga t elah m elihat bagaim ana unt uk m endist ribusikan set iap servlet ; dengan cara m em bent uknya m enj adi package- package dalam bent uk file WAR dan m em indahkannya ke servlet cont ainer.

  Pada pem bahasan ini, m eliput i beberapa t opik t ent ang servlet lanj ut an : Pengalihan respon

  ●

  Peran obj ect s

  ●

  Sessions dan session t racking

  ●

  Filt ers

  ● 3 .1 . Pe n ga lih a n Re spon

  Ada beberapa kasus ket ika kit a ingin servlet kit a hanya m enj alankan beberapa proses inisialisasi dan m eninggalkan isi t urunan dari beberapa ent it y asli yang lain. Mari m em buat skenario dim ana k it a m engam bil beberapa nilai dari user dan m enyaj ikannya dengan beberapa t am pilan yang m ungkin berdasarkan pada nilai t ersebut . Mari m engat akan bahwa kit a m em punyai sebuah t em pat nya, set elah m em proses login user, akan m enam pilkannya dengan halam an yang berbeda t ergant ung pada peran user pada sist em t ersebut . Menem pat kan isi kode t urunan unt uk sem ua halam an ke sat u servlet m ungkin m em buat servlet kit a t erlalu t idak t erat ur. Pada kasus ini, akan m enj adi lebih baik unt uk servlet unt uk m em indahkan out put t urunan. Ada dua m et hod yang dapat dipakai oleh pengem bang unt uk m elakukan pem indahan ini. Sat u adalah m enyelesaikan penggunaan dari sebuah obj ect Request Dispat cher, yang lain adalah dengan m enggunakan m et hod sendRedirect ( ) yang dapat dit em ukan dalam obj ect Ht t pServlet Response.

  3 .1 .1 Re qu e st D ispa t ch e r

  Kit a m encapai sebuah inst ance dari obj ect Request Dispat cher dengan m enj alankan m et hod selanj ut nya yang m ana dapat dit em ukan dalam obj ect Ht t pServlet Request : public Request Dispat cher get Request Dispat cher( St ring pat h)

  Param et er st ring yang diam bil dalam m et hod ini adalah lokasi dari HTML, JSP, at au servlet yang ingin kit a hubungkan dengan request . Sekali k it a m em punyai sebuah pengont rol pada sebuah inst ance dari obj ect Request Dispat cher , Kit a m em ilik i pilihan unt uk m enj alankan sat u dari dua m et hod : public void include( Servlet Request req, Servlet Response res)

  ●

  public void forw ard( Servlet Request req, Servlet Response res)

  ●

  Kedua m et hod diat as m engam bil isi yang dihasilkan oleh lokasi khusus dan m em buat nya sebuah bagian dari respon servlet ke user. Perbedaan ut am a diant ara m ereka adalah : perint ah forward m em buat t arget ent it y dengan sat u- sat unya t anggung j aw ab unt uk m engeluarkan respon, sem ent ara perint ah include hanya m enggabungkan isi dari t arget . Menggunakan perint ah include, kit a dapat m enam bahkan isi lain ke respon, m ungkin m em asukkan even t arget yang lain.

  Dibawah ini adalah beberapa cont oh kode m em anfaat kan kedua perint ah yait u include dan forward. public DispatchServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Error occurred during login request processing"); RequestDispatcher rd = request.getRequestDispatcher("/login.html"); rd.include(request, response); } } public DispatchServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("Error occurred during login request processing"); RequestDispatcher rd = request.getRequestDispatcher("/login.html"); rd.forward(request, response); } }

  <H1>Login Page</H1> <form action="DispatchServlet"> User name : <input type="text" name="loginName"><br/> Password : <input type="password" name="password"><br/> <input type="submit"/> </form>

  Kesam aan secara virt ual, dengan hanya m em bedakan m et hod yang dij alankan pada perm int aan obj ect dispat cher. I ni akan m enyaj ikan penanda perbedaan diant ara keduanya. Dibawah ini adalah keluaran program t ersebut .

  Kode yang diberikan sam a secara virt ual, t et api kit a m em iliki dua out put yang berbeda. Menggunakan m et hod include, pesan St ring yang kit a keluarkan ke user lebih dahulu unt uk m em anggil m et hod yang dit am pilkan. I ni bukan kasus unt uk out put dari m et hod forw ard : pesan yang kit a t am bahkan pada respon lebih dahulu unt uk m em anggil m et hod bukan m erupakan bagian dari out put .

  Dengan m et hod forward, sem ua isi dalam response buffer dibersihkan lebih dahulu unt uk m em anggil m et hod, Set elah respon t ert ent u di com m it ; Tidak ada isi yang dapat dit am bahkan lebih lanj ut . Dengan m et hod include, sem ua isi dit em pat kan dalam response buffer yang t ersim pan sebelum dan sesudah m em anggil m et hod.

  Menggunakan m et hod include, sangat m ungkin unt uk servlet kit a unt uk m em baw akan sebagai keseluruhan out put dari beberapa sum ber yang berbeda. Yang j uga m em ungkinkan unt uk m enam bahkan pesan ke isi yang sifat nya st at ic dan sebaliknya. Perhat ikan cont oh berikut ini. public LoginServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher rd = null; String loginName = request.getParameter("loginName"); String password = request.getParameter("password"); User user = null; UserService service = new UserService(); user = service.authenticateUser(loginName, password); if (user == null) { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("User does not exist with given login and/or password"); rd = request.getRequestDispatcher("/login.html"); rd.include(request, response); out.close(); } else { HttpSession session = request.getSession(); session.setAttribute(ApplicationConstants.USER_OBJECT, user); rd = request.getRequestDispatcher("/header.html"); rd.include(request, response); rd = request.getRequestDispatcher("/mainContent.html"); rd.include(request, response); rd = request.getRequestDispatcher("/footer.html"); rd.include(request, response); } }

  Disini, kit a m enggunakan m et hod include unt uk m enam pilkan beberapa halam an HTML yang berbeda( header.ht m l, m ainCont ent .ht m l, foot er.ht m l) Unt uk user sebagai sat u yang m ewakili keseluruhan user. Juga, sebuah pesan error akan dit am pilkan j ika user gagal dalam m elakukan validasi disisi server.

  se n dRe dir e ct Di sisi lain dari pengalihan out put ke suat u ent it y diluar servlet adalah m et hod sendRedirect .

  I ni akan m em ilik i t anda m et hod sebagai berik ut : public void sendRedirect ( St ring relat ivePat h) Dan dapat dit em ukan dalam obj ect Ht t pServlet Response. Param et er yang diam bil adalah sebuah St ring m ew akili pat h unt uk t arget yang kit a inginkan unt uk pengalihan user. Mem anggil m et hod ini secara efekt if m em erint ahkan brow ser unt uk m engirim dalam HTTP request yang lain ke t uj uan t ert ent u. I ni m em buat t arget sat u- sat unya ent it y yang bert anggungj awab unt uk m eng generat e isi, sam a dengan sebuah cara unt uk hasil dengan m enggunakan m et hod forward dalam obj ect Request Dispat cher yang t elah didiskusikan sebelum nya. Bagaim anapun, perm int aan dikirim kem bali unt uk m enam pilkan beberapa perbedaan secara prakt ek dibandingkan dengan m et hod forward :

  • – alam at URL pada browser bar m encerm inkan t arget yang dit ent ukan. I ni m em buat penggunaan m et hod sendRedirect t idak digunakan j ika kit a t idak m engingat kan t ent ang kesadaran user t erhadap fungsi pengalihan.
  • – Sej ak ini m enj adi sebuah request baru secara efekt if, dat a t ersim pan dalam obj ect request yang sebelum nya t idak t ersim pan. Disediakan param et er- param et er unt uk user, j ika ada banyak, harus di subm it kem bali j ika k it a ingin t arget kit a sadar t erhadap prosedur t ersebut . Biasanya dat a t ersim pan dalam obj ect request harus j uga dipelihara dengan beberapa cara, j ika t idak dat a- dat a t ersebut akan hilang.

  Disarankan ket ika m et hod include digunakan unt uk m em ungkinkan banyak out put source, m et hod forw ard digunakan j ika pengalihan ke sebuah kom ponen yang m enghasilkan isi y ang dinam is ( servlet s at au JSPs yang akan kit a diskusikan kem udian) , dan m et hod sendRedirect digunakan ket ika m engalihkan ke isi yang st at ic.

  3 .2 PEM BATASAN OBJECT- OBJECT

  Spesifikasi servlet m em ungkinkan kit a unt uk m elakukan em pat bidang dim ana unt uk m enem pat kan dat a, agar kom ponen- kom ponen kit a dapat digunakan bersam a. Unt uk m eningkat kan spesifikasinya :

  Halam an- halam an m enyangkut suat u bidang didefinisik an m enj adi bidang m eliput i

  ●

  sebuah halam an JSP t unggal. Variabel- variabel dideklarasikan dalam halam an yang sifat nya dapat dilihat hanya dalam halam an t ersebut dan dan t idak akan nam pak sekalipun j ika servis halam an berakhir. Obj ect yang t ergabung dengan bidang ini adalah obj ect PageCont ext .

  Pem bat asan Request - Request didefinisikan m enj adi bidang yang m eliput i sebuah

  ●

  client dengan request t unggal. Dat a yang t ersim pan dalam bidang ini sifat nya dapat dilihat oleh sem ua kom ponen web m engat ur request dari client . Set elah request client t elah selesai – Kem udian client m enerim a sebuah respon HTTP dan m enut up koneksi ke server – sem ua dat a t ersim pan dalam bidang ini t idak lagi t erlihat . Obj ect yang t ergabung dengan bidang ini adalah obj ect Ht t pServlet Request . I nst ance- inst ance dari obj ect ini siap dan dapat digunakan unt uk servlet , sam a sepert i yang m ereka berikan sebagai param et er unt uk m et hod service yang dipanggil oleh cont ainer diat as request client .

  Session – bidang ini m eliput i sebuah “ session” t unggal dengan client . Session ini

  ●

  dim ulai ket ika client pert am a dim ulai dengan aplikasi w eb dan diakhiri sekali ket ik a user log out dari sist em at au server didefinisikan dengan nilai t im eout t elah t ercapai. Dat a dalam bidang ini dapat dilihat oleh sem ua kom ponen w eb client m em buat dan m em akainya selam a int erval t ersebut . Dat a dari sat u session user, bagaim anapun, t idak t erlihat dari dalam session user yang lain. Obj ect yang t ergabung dengan bidang ini adalah obj ect Ht t pSession. Sebuah inst ance dari ini bisa didapat kan kem bali dengan m enggunakan m et hod get Session( ) dalam obj ect Ht t pServlet Request . Aplikasi – bidang ini m eliput i sem ua aplikasi. Dat a yang t ersim pan dalam bidang ini

  ●

  t erlihat oleh sem ua kom ponen t anpa m em perhat ikan request user at au session client yang m engat ur dan m engakhiri sam pai aplikasi dihent ikan. Obj ect yang t ergabung dengan bidang ini adalah obj ect Servlet Cont ext . Sepert i yang t elah dibahas sebelum nya, ini bisa didapat kan kem bali dengan m em anggil m et hod get Servlet Cont ext ( ) dari obj ect yang valid Servlet Config.

  3 .2 .1 M e n yim pa n da n m e nda pa t k a n k e m ba li da t a da r i sua t u bida n g

  Sem ua dari obj ect bidang sepert i yang disebut kan diat as t erdiri dari perint ah m et hod unt uk bisa m endapat kan kem bali dan m enyim pan dat a didalam nya. Unt uk m enyim pan dat a gunakan m et hod

  pu blic void se t At t r ibut e ( St r in g k e y, Obj e ct va lu e ) ; param et er St ring yang diam bil m et hod ini akan m enyim pan obj ect dibaw ah nilai t ersebut .

  Unt uk m endapat kan dat a kem udian, lew at i key yang sam a sepert i param et er.

  pu blic Obj e ct ge t At t r ibu t e ( St r ing k e y) ;

  Jika t idak ada obj ect yang bisa m endapat kan kem bali dari key yang diberikan, niali null dikem balikan oleh m et hod. Juga, sej ak ret urn t ype adalah Obj ect , it u akan m em buat pengem bang unt uk m em ilih Obj ect ke class yang sesuai dan m enam pilan penguj ian t ype. Unt uk m enghapus sebuah at t ribut dari obj ect bidang secara sederhana panggil m et hod removeAttribute ( ) dan lalui kunci at t ribut sepert i param et ernya.

  3 .2 .2 Con t oh sk e n a r io

  Mari kit a m engikut i skenario berikut ini : kit a ingin aplikasi kit a dapat m enam pilkan rincian t ent ang seseorang diberikan personalI Dnya. PersonalI D ini akan disediakan oleh user. Unt uk m em aj ukan kem am puan m aint enance, kit a ingin m em isahkan kom ponen yang akan m endapat kan kem bali rincian individu dan kom ponen yang akan m enam pilkan inform asi kepada user. Dua kom ponen ini kem udian unt uk berkom unikasi m enggunakan penyim panan dat a dan fasilit as pengem balian yang dapat dilakukan ket ika t erj adi request . public PersonalDataRetrievalServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String personalID = request.getParameter("personalID"); DataService service = new DataService(); Person person = service.retrievePersonalDetails(personalID); request.setAttribute(ApplicationConstants.PERSON, person); RequestDispatcher dispatcher = request.getRequestDispatcher("/DisplayServlet"); dispatcher.forward(request, response); } } public DisplayServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Person person = (Person) request.getAttribute(ApplicationConstants.PERSON); StringBuffer buffer = new StringBuffer(); buffer.append("<HTML><TITLE>Personal Info</TITLE>"); buffer.append("<BODY><H1>Details : </H1><br/>"); buffer.append("Name : "); buffer.append(person.getName()); buffer.append("<br> Address : "); buffer.append(person.getAddress()); buffer.append("</BODY>"); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(buffer.toString()); out.close(); } }

  Kode unt uk obj ect Dat aService dan obj ect individu t idak t erdaft ar disini, im plem ent asinya t idak pent ing unt uk cont oh kit a. Apa yang dit am pilkan pada cont oh diat as adalah bagaim ana unt uk m enyim pan obj ect dat a dari sat u servlet dan m engam bil dat a yang sam a unt uk servlet yang lain yang t elah m engakses ke bidang yag sam a.

  Perhat ikan cont oh berikut : pert am a, servlet yang kedua bisa m endapat kan dat a kem bali dari request karena ini m asih bagian m engat ur servlet m et hod get At t ribut e akan m em berikan nilai kem balian null, sej ak sendRedirect akan m em buat brow ser unt uk request yang lain. I ni m engakhiri secara efekt if bat as wakt u dari obj ect request dalam m enyim pan dat a.

  Kedua, disarankan bahwa key yang digunakan unt uk m enyim pan dan m endapat kan dat a dibuat dapat dipakai unt uk aplikasi sebagai k onst ant a, Sepert i cont oh diat as. I ni m eyakinkan bahwa past i key yang sam a digunakan unt uk penyim panan dan pengam bilan k em bali dat a, m engurangi kem ungkinan j um lah kem ungkinan error yang bisa m uncul ket ika proses pengem bangan dilakukan.

  3 .3 SESSI ON TRACKI N G D AN PEN GATURAN

  Kit a harus m em anggil kem bali HTTP yang didesain sebagai bagian yang t erhubung, prot ocol yang t idak m em iliki st at e. Ket ika browser m engirim request ke server, koneksi dibuka, m engirim nya m elalui HTTP request , m enggunakan respon HTTP, dan kem udian m enut up koneksi. Sej ak set iap request browser t erkirim secara efekt if dalam koneksi berbeda t iap w akt unya, dan server t idak berhubungan dan m em perbaiki secara langsung, secara t idak sadar client m engaksesnya, m asalahnya dit unj ukkan m elalui aplikasi web : bagaim ana m em perbaiki langkah unt uk bagian t ransaksi web user? Solusi unt uk m asalah ini adalah server dalam m em perbaiki konsep “ user session” . Sem ent ara dalam sebuah session, server akan dapat m engenal client diant ara banyak request . Secara t idak sadar,kini server dapat m em perbaiki st at e unt uk client . Unt uk set iap session agar t et ap ada, browser client harus dapat m engirim dat a ke sisi server dari st andard HTTP request - nya. Dat a ini m em ungkinkan server unt uk m engenali user yang m ana yang m elakukan reques, dan m em perbaiki sesuai dengan st at enya. Ada t iga t ipe solusi unt uk m asalah ini : cookies, penulisan kem bali alam at URL, dan form fields yang t ersem bunyi.

  3 .3 .1 Cook ie s

  Cookies adalah st rukt ur dat a kecil yang digunakan oleh w eb server unt uk m engirim dat a ke browser client . Dat a ini disim pan oleh browser, dan dalam beberapa kondisi browser m engem balikan dat a t ersebut kem bali ke web server. Menggunakan cookies, servlet s dapat m enyim pan " session ids" yang dapat digunakan unt uk m engenali user sebagai bagian yang ikut sert a dalam bagian session. Set elah I D diproses, disim pan dalam obj ect cookie dan m engirim kem bali ke brow ser client unt uk penyim panan. Obj ect cookie ini kem udian dapat dit angkap kem bali dalam obj ect request set iap wakt u unt uk m enget ahui j ika user ada dalam session.

  Dibaw ah ini adalah cont oh dari bagaim ana unt uk m engunakan cookies unt uk session t racking dalam servlet s : ... String sessionID = generateSessionID(); HashMap map = new HashMap(); HashMap containerMap = retrieveSessionMaps(); containerMap.put(sessionID, map); Cookie sessionCookie = new Cookie("JSESSIONID", sessionID); response.addCookie(sessionCookie); .. Unt uk bisa m endapat kan gam baran yang benar m engenai dat a session, servlet kem udian m endapat kan cookie yang berisi session I D, dan m enggunakannya sebagai key, m encapai HashMap yang sesuai. Sem ent ara cookies m erupakan solusi yang baik unt uk session t racking, penggunaannya m em erlukan pengem bang unt uk m engat ur banyak det ail :

  • Mem bangkit kan session id yang spesifik unt uk set iap user.
  • Mendapat kan cookie yang sesuai dari browser yang berisi session I D.
  • Mengat ur wakt u yang t erpakai sesuai dengan kebut uhan cookie.

  Sesuai dengan isi det ail diat as, m asalah dengan penggunaan cookie dari beberapa user yang browsernya t idak support dengan cookie berkenan dengan keperluan keam anan. Pendekat an alt ernat if m ut lak diperlukan.

  3 .3 .2 Pe n u lisa n k e m ba li a la m a t URL

  Pada pendekat an ini, brow ser client m enam bahkan sebuah session I D yang spesifik pada akhir set iap request yang dibuat unt uk server. Session I D ini dapat dibaca, dan inform asi user yang sesuai bisa didapat kan. I ni adalah solusi lain yang cukup baik, dan sat u dari pekerj aan t ersebut j ika user m e non akt ifkan pengunaan cookies. Bagaim anapun, ini m engenalkan m asalah yang dihadapi unt uk m eyakinkan bahwa set iap URL yang digunakan oleh client pada bagian at as halam an sit e m em iliki session I D yang dit am bahkan didalam nya.

  3 .3 .3 For m fie lds t e r se m bu n yi

  Pada pendekat an ini, form field t ersem bunyi dikenalkan dalam bent uk HTML, dengan nilai yang diset unt uk bagian session I D. Bagaim anapun, m et hod ini sangat t erbat as berhubungan dengan fakt a bahw a ini hanya dapat digunakan ket ika ada form di halam an yang digunakan client .

  3 .3 .4 Se ssion Tr a ck ing da la m Se r v le t s

  Spesifikasi servlet m enyediakan sebuah API t ingkat t inggi unt uk m enyediakan access unt uk session t racking : API Ht t pSession. Menggunakan API ini, pengem bang t idak lagi perlu khawat ir t ent ang banyak det ail yang disebut kan sepert i yang t elah disebut diat as : pengenalan session I D , m anipulasi det ail cookie, dan inform asi m engenai det ail dir ingkas oleh pengem bang. Juga, pengem bang m enyediakan lokasi yang sesuai unt uk m enyim pan dat a unt uk session user. Penggunaan API Ht t pSession yang benar j uga m em ungkinkan aplikasi Anda unt uk secara ot om at is beralih ke m et od URL- rew rit ing j ika didet eksi adanya support cookie di browser client di non akt ifkan.

  3 .3 .5 M e n da pa t k a n se bua h in st a n ce da r i obj e ct H t t pSe ssion

  Obj ect Ht t pSession m ewakili dat a session yang t ergabung unt uk diberikan request client dapat dicapai dengan m em anggil m et hod getSession( ) dalam obj ect HttpServletRequest . Cont ainer kem udian bert anggung j awab unt uk m em baca dat a dari client ( salah sat u dari cookies at au dari URL- rew rit ing) , dan m em buat inst ance dari obj ect Ht t pSession.

  Dengan m elewat kan sebuah nilai boolean ke m et hod get Session( ) ( m isal, get Session( t rue) ) kit a dapat m em bat asi ke server j ika obj ect Ht t pSession yang baru harus dibuat secara ot om at is dalam kasus user t idak berperan langsung dalam beberapa session.

  3 .3 .6 M e n yim pa n da n m e nda pa t k a n da t a da la m se bua h se ssion

  Dengan Ht t pSession API , pengem bang t idak perlu m engat ur obj ect secara eksplisit unt uk m enyim pan dat a yang diperlukan unt uk diperbaiki dalam user session. Sem ua yang diperlukan adalah unt uk m em anggil salah sat u dari kedua m et hod berikut :

  • public void set At t ribut e( St ring key, Obj ect value)
  • public Obj ect get At t ribut e( St ring key)

  3 .3 .7 M e n gh a pus da t a y a n g t e r sim pa n se ssion

  Unt uk m enghapus dat a yang berada pada bat asan session, panggil m et hod removeAttribute() , dan lewat kan sebagai param et er key St ring yang t ergabung dengan dat a.

  3 .3 .8 Te r m ina si se ssion

  Sessions secara ot om at is dit erm inasi set elah didefinisikan aw al int erval t erbesarnya. I nt erval ini dapat dit em ukan dan dim anipulasi dalam applicat ion's deploym ent descript or. deploym ent descript or unt uk cont oh First Servlet dicet ak kem bali disini unt uk m em anggil kem bali :

  ... </servlet-mapping> <session-config> <session-timeout>

  30 </session-timeout> </session-config> <welcome-file-list> ...

  Nilai 30 dalam elem en session- t im eout m engat akan ke server unt uk m enunggu suat u periode inact ive akhir selam a 30 m enit sebelum m elakukan t erm inasi session. Pada point ini sem ua obj ect dit em pat kan dalam bat asan session akan dihapus dari bat asan, dan obj ect Ht t pSession m enj adi invalid.

  Pengem bang dapat m elkukan t erm inasi session m elalui program dengan m em anggil m et hod invalidate ( ) .

  3 .3 .9 M e la k u k a n URL- Re w r it in g Secara default , Ht t pSession API m em buat dan m engunakan cookies unt uk t rack sessions.

  Bagaim anapun, kit a harus m engem bangkan aplikasi web kit a hingga dapat bekerj a sam a baiknya pada browser yang t idak m endukung cookies dengan m enam bahkan support unt uk URL rew rit ing. Kit a dapat m enam bahkan support URL rewrit ing dengan m enggunakan m et hod encodeURL( ) yang dapat dit em ukan dalam obj ect Ht t pServlet Response. Met hod ini m engam bil dalam sebuah St ring yang m ew akili sebuah pat h at au alam at URL sebagai param et ernya. Kem udian dia dapat m engenali j ik a cookie support diakt ifkan pada browser t arget . Jika dia diakt ifkan, dia akan m engem balikan m em berik an St ring sepert inya.j ika cookies di non akt ifkan, dia m engakt ifkan URL rewrit ing dengan m enam bahkan session I D ke URL yang diberikan.

  Berikut ini adalah cont oh t ent ang bagaim ana unt uk m enggunakan m et hod encodeURL.

  ... String encodedURL = response.encodeURL("/welcome.jsp"); out.println("<A HREF='" + encodedURL + "'>Click here to continue</A>"); ...

  Unt uk m enyediakan fungsi URL rew rit ing pada aplikasi k it a kem udian , kit a harus m em indahkan sem ua URL m elew at kannya sebagai link ke user dengan suat u pengkodean kem bali dengan m enj alankan m et hod encodeURL. Pat h dilew at kan m elalui m et hod sendRedirect yang t elah kit a diskusikan sebelum nya. Juga harus dikodekan kem bali, sekarang m enggunakan hasil dari m et hod encodeRedirectURL( ) .

  3 .4 FI LTERS

  Filt ers adalah kom ponen web lanj ut an yang dikenal sej ak spesifikasi Serlv et 2.3. Pada dasarnya, kom ponen m ereka yang berdiri diant ara request client dan bagian sum ber – beberapa t elah m encoba unt uk m endapat t arget sum ber unt uk m enj alankan filt er. I si Sum ber dapat m enj adi st at ic at au dynam ic source ( HTML, JSP, GI F, ...) Filt ers bekerj a dengan m enangkap request client dan t et ap ada sebagai bagian dari rant ai; berikut ini, pendefinisian dari filt er yang request nya dilew at kan berj alan sebelum benar- benar t iba di sum ber t arget . Ket ika request m elewat i filt er, filt er m enj alankan proses t ersebut dan kem udian dapat m em ut uskan apakah request dapat dilew at kan pada proses filt er selanj ut nya pada urut an t ersebut ( j ika filt er t ersebut adalah filt er t er akhir pada urut an, request dilew at kan pada sum ber t arget ) , at au unt uk m elint asi rant ai siklus sepenuhnya, m enolak acces user ke sum ber.

  CLIENT FILTER FILTER Container

  FILTER ENDPOINT (HTML, JSP, ) Gam bar diat as adalah represent asi grafis t ent ang bagaim ana request m elewat kan beberapa t ahap filt er sebelum benar- benar t iba pada t it ik akhir t arget . Filt er adalah kom ponen yang dapat dipakai sej ak ia m enaw arkan kem udahan unt uk pengem bang yait u cara m udah unt uk m enam bahkan proses sebelum sum ber didalam aplikasi web diakses. I ni adalah m acam - m acam kegunaan yang m ungkin dengan m enggunakan servlet dan pengalihan respon. I ni lebih sulit unt uk im plem ent asi berlanj ut , dan m ensyarat kan set iap servlet pada t ingkat yang lebih t inggi sadar akan lokasi serv let selanj ut nya dalam urut an. Filt er t idak m em iliki pem bat asan; ini pem bangun servlet yang m engat ur urut an kom ponen yang dipanggil sebelum nya request pernah m encapai t it ik akhir, dan bukan pengem bangnya.

  3 .4 .1 M e m bu a t se bua h Filt e r

  Unt uk m em buat sebuah filt er, pengem bang harus m em buat sebuah class yang m engim plem ent asikan int erface j avax.servlet .Filt er. I nt erface ini m endefinisikan m et hod- m et hod berikut ini :

  • void init ( Filt erConfig config) m elem par Servlet Except ion – m et hod ini dipanggil oleh servlet cont ainer aw alnya ini akan m engirim filt er ke m em ory. I nisialisasi kode harus dit em pat kan disini, t erm asuk kode yang m engum pulkan inisialisasi param et er yang t erlet ak dalam web.xm l sepanj ang penggunaan obj ect Filt erConfig yang diberi
  • • void dest roy – Met hod ini dipanggil oleh cont ainer ket ika filt er diam bil dari m em or y. I ni

  selalu dilakukan ket ika aplikasi dim at ikan. Kode yang m enghent ikan beberapa sum ber dibuat dengan filt er yang harus dikerj akan disini.

  • void doFilt er( Servlet Request request , Servlet Response response, Filt erChain chain)

  m elem par I OExcept ion, Servlet Except ion – m et hod ini berisi sem ua kegunaan dari class filt er. I ni dipanggil oleh servlet cont ainer ket ika server m engenali bahwa filt er diharuskan unt uk digunakan unt uk m enangkap respon dari sebagian user. Param et er- param et er yang t erlewat kan pada m et hod ini adalah inst ances dari obj ect Servlet Request , Servlet Response, dan Filt erChain. Jika Filt er ini berpart isipasi dalam sebuah lingkungan web ( sepert i kasus yang biasa t erj adi) pengem bang dapat m em ilih obj ect perm int aan dan respon unt uk inst ances dari Ht t pServlet Request dan Ht t pServlet Response, m asing- m asing, j adi m ereka bisa m endapat kan inform asi HTTP- t ert ent u.

  Sepert i ser vlet , cont ainer akan m encipt akan hanya sat u inst ance dari sebuah obj ect Filt er dan m enggunakan m ult i- t hreading unt uk m em ungkinkan pengat uran beberapa request client secara bersam a- sam a. I ni berart i bahw a m et hod ini HARUS didefinsikan m enj adi t hread- safe.

  3 .4 .2 Ra n t a i Filt e r

  Rant ai filt er m em ungkinkan filt er dit am pilkan pada urut an yang benar unt uk sebagian sum ber, dan diw akili oleh suat u obj ect Filt erChain. Kem am puan suat u filt er unt uk m enj adi sat u silklus berbent uk rant ai t ersendiri. Sebalik nya Filt er m em iliki kegunaan yang sam a sepert i Servlet . Rant ai filt er m em ungkinkan pem bersihan secara t erpisah diant ara t ingkat pem rosesan yang berbeda : m isalkan, sebagai cont oh, fungsi baru yang perlu diim plem ent asikan sebelum request diproses, ini dapat dibuat dengan sederhana sebagai filt er. Pert am a- t am a filt er dikonfigurasi, Filt er hanya dit am bahkan ke pelayanan kom ponen t erhadap request sebelum t it ik akhir dapat dicapai, ia t idak m enyerahkan sepenuhnya beberapa proses yang dilakukan sebelum nya kecuali j ika secara explisit dit ulis unt uk m elakukan hal yang sam a dapat dilakukan oleh pengem bang.

  Urut an rant ai filt er dikenali oleh lokasi filt er dalam deploym ent descript or dan m engikut i pola ascending yang m engharuskan penggunaan elem en< filt er- m apping> yang m ewakili proses m apping dari set iap filt er ( selanj ut nya akan dibahas lebih dalam m engenai konfigurasi filt er ) . Sepert i yang t elah dibahas sebelum nya, obj ect Filt erChain m ew akili urut an dari filt er yang akan dipanggil sebelum pada akhirnya m encapai t it ik akhir. Sat u- sat unya akses pengem bang m elalui urut an ini adalah m et hod doFilt er dalam obj ect Filt erChain : ini m em anggil filt er selanj ut nya dalam urut an, at au sum ber t arget j ika suat u filt er t er let ak pada urut an t erakhir. Met hod ini hanya m em erlukan obj ect t ert ent u yait u Servlet Request dan Servlet Response sebagai param et er. Lagi, sej ak t idak ada yang m em but uhkan filt er program m er unt uk m em iliki k esadaran t ent ang filt er yang m ana akan m enerim a request selanj ut nya, yang m em ungkinkan program m er unt uk m em fokuskan diri hanya pada suat u obj ect t ert ent u saj a.

  Dibaw ah ini adalah sebuah filt er yang m enyediakan logging dasar unt uk akt ifit as pada aplik asi : public LoggingFilter implements Filter { private FilterConfig config; public void init(FilterConfig config) { this.config = config; } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { ServletContext context = config.getServletContext(); String logEntry = request.getServerName() + ":" + request.getServerPort(); logEntry += "/" + request.getContextPath() + "/" + request.getPathInfo(); logEntry += "--> accessed by the user on " + new java.util.Date(); context.log(logEntry) chain.doFilter(request, response); } }

  3 .4 .3 Konfigu r a si Filt e r

  Konfigurasi Filt er adalah sangat sam a sepert i yang diperlukan pada servlet s. Ada bagian yang diper lukan unt uk m endefinisikan set iap filt er unt uk digunakan dalam aplikasi, sam a sepert i bagian unt uk m endefinisikan pola url- yang akan didengar oleh filt er unt uk dit angkap dan diproses lebih lanj ut .

  Sebuah cont oh dari konfigurasi filt er diberikan dibawah ini : ...

  </context-param> <filter> <filter-name>LoggingFilter</filter-name> <filter-class>jedi.filters.LoggingFilter</filter-class> </filter> <filter-mapping> <filter-name>LoggingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

  Diberikan file w eb.xm l yang sangat khusus t ent ang pem esanan dari elem en- elem en t ert ent u, Paling baik unt uk m eyakinkan bahw a m asukan elem en filt er didefinisikan sebelum beberapa servlet didefinisikan, t api set elah ada beberapa m asukan cont ext - param . Juga, sem ua m asukan filt er- m apping harus dilet akkan set elah beberapa definisi filt er.

  Secara default , Filt ers t idak digunakan t erhadap kom ponen- kom ponen w eb ( servlet s, JSP yang lain) inilah t arget dari pem anggilan include at au forw ard dari sebuah obj ect Request Dispat cher. Mereka dipak ai hanya unt uk request yang dibuat secara langsung oleh client . Kebiasaan ini dapat dirubah biarpun dengan m enam bahkan sat u at au lebih elem en pengirim an unt uk m em et akan filt er.

  ... </context-param> <filter> <filter-name>LoggingFilter</filter-name> <filter-class>jedi.filters.LoggingFilter</filter-class> </filter> <filter-mapping> <filter-name>LoggingFilter</filter-name> <url-pattern>/*</url-pattern> <dispatch>REQUEST</dispatch> <dispatch>INCLUDE</dispatch> </filter-mapping>

  Elem en- elem en pengirim an m em iliki sat u dari nilai berikut : REQUEST, I NCLUDE, FORWARD, dan ERROR. I ni m enyat akan apakah filt er akan digunakan hanya unt uk request client , hanya includes, hanya request , at au hanya error, at au beberapa kom binasi dari keem pat nya.