SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
J.E.N.I




                                        BAB 3
                Pembahasan Servlet Lanjutan

Pada pembahasan sebelumnya, kita telah mengamati tentang bagaimana servlet dapat
digunakan oleh pengembang Java untuk memenuhi permintaan client dan menghasilkan
respon secara dinamis. Kita juga telah melihat bagaimana untuk mendistribusikan setiap
servlet; dengan cara membentuknya menjadi package-package dalam bentuk file WAR dan
memindahkannya ke servlet container.

Pada pembahasan ini, meliputi beberapa topik tentang servlet lanjutan :
   ● Pengalihan respon
   ● Peran objects
   ● Sessions dan session tracking
   ● Filters




3.1. Pengalihan Respon
Ada beberapa kasus ketika kita ingin servlet kita hanya menjalankan beberapa proses
inisialisasi dan meninggalkan isi turunan dari beberapa entity asli yang lain.

Mari membuat skenario dimana kita mengambil beberapa nilai dari user dan menyajikannya
dengan beberapa tampilan yang mungkin berdasarkan pada nilai tersebut. Mari mengatakan
bahwa kita mempunyai sebuah tempatnya, setelah memproses login user, akan
menampilkannya dengan halaman yang berbeda tergantung pada peran user pada sistem
tersebut. Menempatkan isi kode turunan untuk semua halaman ke satu servlet mungkin
membuat servlet kita terlalu tidak teratur. Pada kasus ini, akan menjadi lebih baik untuk
servlet untuk memindahkan output turunan.

Ada dua method yang dapat dipakai oleh pengembang untuk melakukan pemindahan ini. Satu
adalah menyelesaikan penggunaan dari sebuah object RequestDispatcher, yang lain adalah
dengan menggunakan method sendRedirect() yang dapat ditemukan dalam object
HttpServletResponse.




Advanced Servlets                                                                   1
J.E.N.I




3.1.1         RequestDispatcher

Kita mencapai sebuah instance dari object RequestDispatcher dengan menjalankan method
selanjutnya yang mana dapat ditemukan dalam object HttpServletRequest :

              public RequestDispatcher getRequestDispatcher(String path)

Parameter string yang diambil dalam method ini adalah lokasi dari HTML, JSP, atau servlet
yang ingin kita hubungkan dengan request. Sekali kita mempunyai sebuah pengontrol pada
sebuah instance dari object RequestDispatcher , Kita memiliki pilihan untuk menjalankan satu
dari dua method :

          ●   public void include(ServletRequest req, ServletResponse res)
          ●   public void forward(ServletRequest req, ServletResponse res)

Kedua method diatas mengambil isi yang dihasilkan oleh lokasi khusus dan membuatnya
sebuah bagian dari respon servlet ke user. Perbedaan utama diantara mereka adalah :
perintah forward membuat target entity dengan satu-satunya tanggung jawab untuk
mengeluarkan respon, sementara perintah include hanya menggabungkan isi dari target.
Menggunakan perintah include, kita dapat menambahkan isi lain ke respon, mungkin
memasukkan even target yang lain.

Dibawah ini adalah beberapa contoh kode memanfaatkan kedua perintah yaitu 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);
    }
}




Advanced Servlets                                                                      2
J.E.N.I




<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>


Kesamaan secara virtual, dengan hanya membedakan method yang dijalankan pada
permintaan object dispatcher. Ini akan menyajikan penanda perbedaan diantara keduanya.
Dibawah ini adalah keluaran program tersebut.




Kode yang diberikan sama secara virtual, tetapi kita memiliki dua output yang berbeda.
Menggunakan method include, pesan String yang kita keluarkan ke user lebih dahulu untuk
memanggil method yang ditampilkan. Ini bukan kasus untuk output dari method forward :
pesan yang kita tambahkan pada respon lebih dahulu untuk memanggil method bukan
merupakan bagian dari output.

Dengan method forward, semua isi dalam response buffer dibersihkan lebih dahulu untuk
memanggil method, Setelah respon tertentu di commit; Tidak ada isi yang dapat ditambahkan
lebih lanjut. Dengan method include, semua isi ditempatkan dalam response buffer yang
tersimpan sebelum dan sesudah memanggil method.



Advanced Servlets                                                                   3
J.E.N.I


Menggunakan method include, sangat mungkin untuk servlet kita untuk membawakan sebagai
keseluruhan output dari beberapa sumber yang berbeda. Yang juga memungkinkan untuk
menambahkan pesan ke isi yang sifatnya static dan sebaliknya. Perhatikan contoh 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, kita menggunakan method include untuk menampilkan beberapa halaman HTML yang
berbeda(header.html, mainContent.html, footer.html) Untuk user sebagai satu yang mewakili
keseluruhan user. Juga, sebuah pesan error akan ditampilkan jika user gagal dalam
melakukan validasi disisi server.




Advanced Servlets                                                                      4
J.E.N.I




sendRedirect

Di sisi lain dari pengalihan output ke suatu entity diluar servlet adalah method sendRedirect.
Ini akan memiliki tanda method sebagai berikut :

             public void sendRedirect(String relativePath)

Dan dapat ditemukan dalam object HttpServletResponse. Parameter yang diambil adalah
sebuah String mewakili path untuk target yang kita inginkan untuk pengalihan user.
Memanggil method ini secara efektif memerintahkan browser untuk mengirim dalam HTTP
request yang lain ke tujuan tertentu.

Ini membuat target satu-satunya entity yang bertanggungjawab untuk meng generate isi,
sama dengan sebuah cara untuk hasil dengan menggunakan method forward dalam object
RequestDispatcher yang telah didiskusikan sebelumnya. Bagaimanapun, permintaan dikirim
kembali untuk menampilkan beberapa perbedaan secara praktek dibandingkan dengan method
forward :

–   alamat URL pada browser bar mencerminkan target yang ditentukan. Ini membuat
    penggunaan method sendRedirect tidak digunakan jika kita tidak mengingatkan tentang
    kesadaran user terhadap fungsi pengalihan.

–   Sejak ini menjadi sebuah request baru secara efektif, data tersimpan dalam object request
    yang sebelumnya tidak tersimpan. Disediakan parameter-parameter untuk user, jika ada
    banyak, harus di submit kembali jika kita ingin target kita sadar terhadap prosedur
    tersebut. Biasanya data tersimpan dalam object request harus juga dipelihara dengan
    beberapa cara, jika tidak data-data tersebut akan hilang.


Disarankan ketika method include digunakan untuk memungkinkan banyak output source,
method forward digunakan jika pengalihan ke sebuah komponen yang menghasilkan isi yang
dinamis (servlets atau JSPs yang akan kita diskusikan kemudian), dan method sendRedirect
digunakan ketika mengalihkan ke isi yang static.




3.2          PEMBATASAN OBJECT-OBJECT

Spesifikasi servlet memungkinkan kita untuk melakukan empat bidang dimana untuk
menempatkan data, agar komponen-komponen kita dapat digunakan bersama. Untuk
meningkatkan spesifikasinya :

    ●     Halaman-halaman menyangkut suatu bidang didefinisikan menjadi bidang meliputi
          sebuah halaman JSP tunggal. Variabel-variabel dideklarasikan dalam halaman yang
          sifatnya dapat dilihat hanya dalam halaman tersebut dan dan tidak akan nampak
          sekalipun jika servis halaman berakhir. Object yang tergabung dengan bidang ini
          adalah object PageContext.

    ●     Pembatasan Request - Request didefinisikan menjadi bidang yang meliputi sebuah
          client dengan request tunggal. Data yang tersimpan dalam bidang ini sifatnya dapat
          dilihat oleh semua komponen web mengatur request dari client. Setelah request client
          telah selesai – Kemudian client menerima sebuah respon HTTP dan menutup koneksi ke
          server – semua data tersimpan dalam bidang ini tidak lagi terlihat.


Advanced Servlets                                                                        5
J.E.N.I




          Object yang tergabung dengan bidang ini adalah object HttpServletRequest. Instance-
          instance dari object ini siap dan dapat digunakan untuk servlet, sama seperti yang
          mereka berikan sebagai parameter untuk method service yang dipanggil oleh container
          diatas request client.

    ●     Session – bidang ini meliputi sebuah “session” tunggal dengan client. Session ini
          dimulai ketika client pertama dimulai dengan aplikasi web dan diakhiri sekali ketika
          user log out dari sistem atau server didefinisikan dengan nilai timeout telah tercapai.
          Data dalam bidang ini dapat dilihat oleh semua komponen web client membuat dan
          memakainya selama interval tersebut. Data dari satu session user, bagaimanapun,
          tidak terlihat dari dalam session user yang lain.

          Object yang tergabung dengan bidang ini adalah object HttpSession. Sebuah instance
          dari ini bisa didapatkan kembali dengan menggunakan method getSession() dalam
          object HttpServletRequest.

    ●     Aplikasi – bidang ini meliputi semua aplikasi. Data yang tersimpan dalambidang ini
          terlihat oleh semua komponen tanpa memperhatikan request user atau session client
          yang mengatur dan mengakhiri sampai aplikasi dihentikan.

          Object yang tergabung dengan bidang ini adalah object ServletContext. Seperti yang
          telah dibahas sebelumnya, ini bisa didapatkan kembali dengan memanggil method
          getServletContext() dari object yang valid ServletConfig.



3.2.1         Menyimpan dan mendapatkan kembali data dari suatu bidang

Semua dari object bidang seperti yang disebutkan diatas terdiri dari perintah method untuk
bisa mendapatkan kembali dan menyimpan data didalamnya. Untuk menyimpan data gunakan
method

              public void setAttribute(String key, Object value);

parameter String yang diambil method ini akan menyimpan object dibawah nilai tersebut.
Untuk mendapatkan data kemudian, lewati key yang sama seperti parameter.

              public Object getAttribute(String key);

Jika tidak ada object yang bisa mendapatkan kembali dari key yang diberikan, niali null
dikembalikan oleh method. Juga, sejak return type adalah Object, itu akan membuat
pengembang untuk memilih Object ke class yang sesuai dan menampilan pengujian type.

Untuk menghapus sebuah attribut dari object bidang secara sederhana panggil method
removeAttribute() dan lalui kunci attribut seperti parameternya.




Advanced Servlets                                                                           6
J.E.N.I


3.2.2          Contoh skenario

Mari kita mengikuti skenario berikut ini : kita ingin aplikasi kita dapat menampilkan rincian
tentang seseorang diberikan personalIDnya. PersonalID ini akan disediakan oleh user. Untuk
memajukan kemampuan maintenance, kita ingin memisahkan komponen yang akan
mendapatkan kembali rincian individu dan komponen yang akan menampilkan informasi
kepada user. Dua komponen ini kemudian untuk berkomunikasi menggunakan penyimpanan
data dan fasilitas pengembalian yang dapat dilakukan ketika terjadi 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 untuk object DataService dan object individu tidak terdaftar disini, implementasinya tidak
penting untuk contoh kita. Apa yang ditampilkan pada contoh diatas adalah bagaimana untuk
menyimpan object data dari satu servlet dan mengambil data yang sama untuk servlet yang
lain yang telah mengakses ke bidang yag sama.




Advanced Servlets                                                                         7
J.E.N.I




Perhatikan contoh berikut : pertama, servlet yang kedua bisa mendapatkan data kembali dari
request karena ini masih bagian mengatur servlet method getAttribute akan memberikan nilai
kembalian null, sejak sendRedirect akan membuat browser untuk request yang lain. Ini
mengakhiri secara efektif batas waktu dari object request dalam menyimpan data.

Kedua, disarankan bahwa key yang digunakan untuk menyimpan dan mendapatkan data
dibuat dapat dipakai untuk aplikasi sebagai konstanta, Seperti contoh diatas. Ini meyakinkan
bahwa pasti key yang sama digunakan untuk penyimpanan dan pengambilan kembali data,
mengurangi kemungkinan jumlah kemungkinan error yang bisa muncul ketika proses
pengembangan dilakukan.



3.3         SESSION TRACKING DAN PENGATURAN

Kita harus memanggil kembali HTTP yang didesain sebagai bagian yang terhubung, protocol
yang tidak memiliki state. Ketika browser mengirim request ke server, koneksi dibuka,
mengirimnya melalui HTTP request, menggunakan respon HTTP, dan kemudian menutup
koneksi. Sejak setiap request browser terkirim secara efektif dalam koneksi berbeda tiap
waktunya, dan server tidak berhubungan dan memperbaiki secara langsung, secara tidak
sadar client mengaksesnya, masalahnya ditunjukkan melalui aplikasi web      : bagaimana
memperbaiki langkah untuk bagian transaksi web user?

Solusi untuk masalah ini adalah server dalam memperbaiki konsep “user session”. Sementara
dalam sebuah session, server akan dapat mengenal client diantara banyak request. Secara
tidak sadar,kini server dapat memperbaiki state untuk client.

Untuk setiap session agar tetap ada, browser client harus dapat mengirim data ke sisi server
dari standard HTTP request-nya. Data ini memungkinkan server untuk mengenali user yang
mana yang melakukan reques, dan memperbaiki sesuai dengan statenya. Ada tiga tipe solusi
untuk masalah ini : cookies, penulisan kembali alamat URL, dan form fields yang tersembunyi.




Advanced Servlets                                                                      8
J.E.N.I


3.3.1       Cookies

Cookies adalah struktur data kecil yang digunakan oleh web server untuk mengirim data ke
browser client. Data ini disimpan oleh browser, dan dalam beberapa kondisi browser
mengembalikan data tersebut kembali ke web server.

Menggunakan cookies, servlets dapat menyimpan "session ids" yang dapat digunakan untuk
mengenali user sebagai bagian yang ikut serta dalam bagian session. Setelah ID diproses,
disimpan dalam object cookie dan mengirim kembali ke browser client untuk penyimpanan.
Object cookie ini kemudian dapat ditangkap kembali dalam object request setiap waktu untuk
mengetahui jika user ada dalam session.

Dibawah ini adalah contoh dari bagaimana untuk mengunakan cookies untuk session tracking
dalam servlets :

...
String sessionID = generateSessionID();

HashMap map = new HashMap();

HashMap containerMap = retrieveSessionMaps();

containerMap.put(sessionID, map);

Cookie sessionCookie = new Cookie("JSESSIONID", sessionID);

response.addCookie(sessionCookie);

..


Untuk bisa mendapatkan gambaran yang benar mengenai data session, servlet kemudian
mendapatkan cookie yang berisi session ID, dan menggunakannya sebagai key, mencapai
HashMap yang sesuai.

Sementara cookies merupakan solusi yang baik untuk session tracking, penggunaannya
memerlukan pengembang untuk mengatur banyak detail :
   • Membangkitkan session id yang spesifik untuk setiap user.
   • Mendapatkan cookie yang sesuai dari browser yang berisi session ID.
   • Mengatur waktu yang terpakai sesuai dengan kebutuhan cookie.


 Sesuai dengan isi detail diatas, masalah dengan penggunaan cookie dari beberapa user yang
browsernya tidak support dengan cookie berkenan dengan keperluan keamanan. Pendekatan
alternatif mutlak diperlukan.




Advanced Servlets                                                                    9
J.E.N.I


3.3.2         Penulisan kembali alamat URL

Pada pendekatan ini, browser client menambahkan sebuah session ID yang spesifik pada akhir
setiap request yang dibuat untuk server. Session ID ini dapat dibaca, dan informasi user yang
sesuai bisa didapatkan.

Ini adalah solusi lain yang cukup baik, dan satu dari pekerjaan tersebut jika user me non
aktifkan pengunaan cookies. Bagaimanapun, ini mengenalkan masalah yang dihadapi untuk
meyakinkan bahwa setiap URL yang digunakan oleh client pada bagian atas halaman site
memiliki session ID yang ditambahkan didalamnya.


3.3.3         Form fields tersembunyi

Pada pendekatan ini, form field tersembunyi dikenalkan dalam bentuk HTML, dengan nilai yang
diset untuk bagian session ID. Bagaimanapun, method ini sangat terbatas berhubungan
dengan fakta bahwa ini hanya dapat digunakan ketika ada form di halaman yang digunakan
client.


3.3.4         Session Tracking dalam Servlets

Spesifikasi servlet menyediakan sebuah API tingkat tinggi untuk menyediakan access untuk
session tracking : API HttpSession. Menggunakan API ini, pengembang tidak lagi perlu
khawatir tentang banyak detail yang disebutkan seperti yang telah disebut diatas : pengenalan
session ID , manipulasi detail cookie, dan informasi mengenai detail diringkas oleh
pengembang. Juga, pengembang menyediakan lokasi yang sesuai untuk menyimpan data
untuk session user. Penggunaan API HttpSession yang benar juga memungkinkan aplikasi
Anda untuk secara otomatis beralih ke metod URL-rewriting jika dideteksi adanya support
cookie di browser client di non aktifkan.


3.3.5         Mendapatkan sebuah instance dari object HttpSession

Object HttpSession mewakili data session yang tergabung untuk diberikan request client dapat
dicapai dengan memanggil method getSession() dalam object HttpServletRequest .
Container kemudian bertanggung jawab untuk membaca data dari client (salah satu dari
cookies atau dari URL-rewriting), dan membuat instance dari object HttpSession.

Dengan melewatkan sebuah nilai boolean ke method getSession()(misal, getSession(true) )
kita dapat membatasi ke server jika object HttpSession yang baru harus dibuat secara
otomatis dalam kasus user tidak berperan langsung dalam beberapa session.


3.3.6         Menyimpan dan mendapatkan data dalam sebuah session

Dengan HttpSession API, pengembang tidak perlu mengatur object secara eksplisit untuk
menyimpan data yang diperlukan untuk diperbaiki dalam user session. Semua yang diperlukan
adalah untuk memanggil salah satu dari kedua method berikut :

    •     public void setAttribute(String key, Object value)
    •     public Object getAttribute(String key)




Advanced Servlets                                                                       10
J.E.N.I


3.3.7       Menghapus data yang tersimpan session

Untuk menghapus data yang berada pada batasan session, panggil method
removeAttribute(), dan lewatkan sebagai parameter key String yang tergabung dengan
data.



3.3.8       Terminasi session

Sessions secara otomatis diterminasi setelah didefinisikan awal interval terbesarnya. Interval
ini dapat ditemukan dan dimanipulasi dalam application's deployment descriptor.

deployment descriptor untuk contoh FirstServlet dicetak kembali disini untuk memanggil
kembali :

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

Nilai 30 dalam elemen session-timeout mengatakan ke server untuk menunggu suatu periode
inactive akhir selama 30 menit sebelum melakukan terminasi session. Pada point ini semua
object ditempatkan dalam batasan session akan dihapus dari batasan, dan object HttpSession
menjadi invalid.

Pengembang dapat melkukan terminasi session melalui program dengan memanggil method
invalidate().



3.3.9       Melakukan URL-Rewriting

Secara default, HttpSession API membuat dan mengunakan cookies untuk track sessions.
Bagaimanapun, kita harus mengembangkan aplikasi web kita hingga dapat bekerja sama
baiknya pada browser yang tidak mendukung cookies dengan menambahkan support untuk
URL rewriting.

Kita dapat menambahkan support URL rewriting dengan menggunakan method encodeURL()
yang dapat ditemukan dalam object HttpServletResponse. Method ini mengambil dalam
sebuah String yang mewakili sebuah path atau alamat URL sebagai parameternya. Kemudian
dia dapat mengenali jika cookie support diaktifkan pada browser target. Jika dia diaktifkan, dia
akan mengembalikan memberikan String sepertinya.jika cookies di non aktifkan, dia
mengaktifkan URL rewriting dengan menambahkan session ID ke URL yang diberikan.




Advanced Servlets                                                                          11
J.E.N.I


Berikut ini adalah contoh tentang bagaimana untuk menggunakan method encodeURL.

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

Untuk menyediakan fungsi URL rewriting pada aplikasi kita kemudian , kita harus
memindahkan semua URL melewatkannya sebagai link ke user dengan suatu pengkodean
kembali dengan menjalankan method encodeURL. Path dilewatkan melalui method
sendRedirect yang telah kita diskusikan sebelumnya. Juga harus dikodekan kembali,
sekarang menggunakan hasil dari method encodeRedirectURL().




3.4         FILTERS

Filters adalah komponen web lanjutan yang dikenal sejak spesifikasi Serlvet 2.3. Pada
dasarnya, komponen mereka yang berdiri diantara request client dan bagian sumber –
beberapa telah mencoba untuk mendapat target sumber untuk menjalankan filter. Isi Sumber
dapat menjadi static atau dynamic source (HTML, JSP, GIF, ...)

Filters bekerja dengan menangkap request client dan tetap ada sebagai bagian dari rantai;
berikut ini, pendefinisian dari filter yang requestnya dilewatkan berjalan sebelum benar-benar
tiba di sumber target. Ketika request melewati filter, filter menjalankan proses tersebut dan
kemudian dapat memutuskan apakah request dapat dilewatkan pada proses filter selanjutnya
pada urutan tersebut (jika filter tersebut adalah filter terakhir pada urutan, request dilewatkan
pada sumber target), atau untuk melintasi rantai siklus sepenuhnya, menolak acces user ke
sumber.



                                    CLIENT



                             FILTER


                             FILTER

                                                              Container
                             FILTER


                                  ENDPOINT
                             (HTML, JSP,
                                  )


Advanced Servlets                                                                           12
J.E.N.I


Gambar diatas adalah representasi grafis tentang bagaimana request melewatkan beberapa
tahap filter sebelum benar-benar tiba pada titik akhir target.

Filter adalah komponen yang dapat dipakai sejak ia menawarkan kemudahan untuk
pengembang yaitu cara mudah untuk menambahkan proses sebelum sumber didalam aplikasi
web diakses. Ini adalah macam-macam kegunaan yang mungkin dengan menggunakan servlet
dan pengalihan respon. Ini lebih sulit untuk implementasi berlanjut, dan mensyaratkan setiap
servlet pada tingkat yang lebih tinggi sadar akan lokasi servlet selanjutnya dalam urutan.
Filter tidak memiliki pembatasan; ini pembangun servlet yang mengatur urutan komponen
yang dipanggil sebelumnya request pernah mencapai titik akhir, dan bukan pengembangnya.


3.4.1         Membuat sebuah Filter

Untuk membuat sebuah filter, pengembang harus membuat sebuah class yang
mengimplementasikan interface javax.servlet.Filter. Interface ini mendefinisikan method-
method berikut ini :

    •     void init(FilterConfig config) melempar ServletException – method ini dipanggil oleh
          servlet container awalnya ini akan mengirim filter ke memory. Inisialisasi kode harus
          ditempatkan disini, termasuk kode yang mengumpulkan inisialisasi parameter yang
          terletak dalam web.xml sepanjang penggunaan object FilterConfig yang diberikan.

    •     void destroy – Method ini dipanggil oleh container ketika filter diambil dari memory. Ini
          selalu dilakukan ketika aplikasi dimatikan. Kode yang menghentikan beberapa sumber
          dibuat dengan filter yang harus dikerjakan disini.

    •     void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
          melempar IOException, ServletException – method ini berisi semua kegunaan dari class
          filter. Ini dipanggil oleh servlet container ketika server mengenali bahwa filter
          diharuskan untuk digunakan untuk menangkap respon dari sebagian user.

          Parameter-parameter yang terlewatkan pada method ini adalah instances dari object
          ServletRequest, ServletResponse, dan FilterChain. Jika Filter ini berpartisipasi dalam
          sebuah lingkungan web (seperti kasus yang biasa terjadi) pengembang dapat memilih
          object permintaan dan respon untuk instances dari HttpServletRequest dan
          HttpServletResponse, masing-masing, jadi mereka bisa mendapatkan informasi HTTP-
          tertentu.

          Seperti servlet, container akan menciptakan hanya satu instance dari sebuah object
          Filter dan menggunakan multi-threading untuk memungkinkan pengaturan beberapa
          request client secara bersama-sama. Ini berarti bahwa method ini HARUS didefinsikan
          menjadi thread-safe.



3.4.2         Rantai Filter

Rantai filter memungkinkan filter ditampilkan pada urutan yang benar untuk sebagian sumber,
dan diwakili oleh suatu object FilterChain. Kemampuan suatu filter untuk menjadi satu silklus
berbentuk rantai tersendiri. Sebaliknya Filter memiliki kegunaan yang sama seperti Servlet.

Rantai filter memungkinkan pembersihan secara terpisah diantara tingkat pemrosesan yang
berbeda : misalkan, sebagai contoh, fungsi baru yang perlu diimplementasikan sebelum
request diproses, ini dapat dibuat dengan sederhana sebagai filter. Pertama-tama filter


Advanced Servlets                                                                             13
J.E.N.I


dikonfigurasi, Filter hanya ditambahkan ke pelayanan komponen terhadap request sebelum
titik akhir dapat dicapai, ia tidak menyerahkan sepenuhnya beberapa proses yang dilakukan
sebelumnya kecuali jika secara explisit ditulis untuk melakukan hal yang sama dapat dilakukan
oleh pengembang.

Urutan rantai filter dikenali oleh lokasi filter dalam deployment descriptor dan mengikuti pola
ascending yang mengharuskan penggunaan elemen<filter-mapping> yang mewakili proses
mapping dari setiap filter (selanjutnya akan dibahas lebih dalam mengenai konfigurasi filter).

Seperti yang telah dibahas sebelumnya, object FilterChain mewakili urutan dari filter yang
akan dipanggil sebelum pada akhirnya mencapai titik akhir. Satu-satunya akses pengembang
melalui urutan ini adalah method doFilter dalam object FilterChain : ini memanggil filter
selanjutnya dalam urutan, atau sumber target jika suatu filter terletak pada urutan terakhir.
Method ini hanya memerlukan object tertentu yaitu ServletRequest dan ServletResponse
sebagai parameter. Lagi, sejak tidak ada yang membutuhkan filter programmer untuk
memiliki kesadaran tentang filter yang mana akan menerima request selanjutnya, yang
memungkinkan programmer untuk memfokuskan diri hanya pada suatu object tertentu saja.

Dibawah ini adalah sebuah filter yang menyediakan logging dasar untuk aktifitas pada aplikasi
:

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);
    }
}




Advanced Servlets                                                                         14
J.E.N.I


3.4.3       Konfigurasi Filter

Konfigurasi Filter adalah sangat sama seperti yang diperlukan pada servlets. Ada bagian yang
diperlukan untuk mendefinisikan setiap filter untuk digunakan dalam aplikasi, sama seperti
bagian untuk mendefinisikan pola url-yang akan didengar oleh filter untuk ditangkap dan
diproses lebih lanjut.

Sebuah contoh dari konfigurasi filter 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 web.xml yang sangat khusus tentang pemesanan dari elemen-elemen tertentu,
Paling baik untuk meyakinkan bahwa masukan elemen filter didefinisikan sebelum beberapa
servlet didefinisikan, tapi setelah ada beberapa masukan context-param. Juga, semua
masukan filter-mapping harus diletakkan setelah beberapa definisi filter.

Secara default, Filters tidak digunakan terhadap komponen-komponen web (servlets, JSP yang
lain) inilah target dari pemanggilan include atau forward dari sebuah object
RequestDispatcher. Mereka dipakai hanya untuk request yang dibuat secara langsung oleh
client. Kebiasaan ini dapat dirubah biarpun dengan menambahkan satu atau lebih elemen
pengiriman untuk memetakan filter.

...
</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>


Elemen-elemen pengiriman memiliki satu dari nilai berikut : REQUEST, INCLUDE, FORWARD,
dan ERROR. Ini menyatakan apakah filter akan digunakan hanya untuk request client, hanya
includes, hanya request, atau hanya error, atau beberapa kombinasi dari keempatnya.




Advanced Servlets                                                                      15

Weitere ähnliche Inhalte

Was ist angesagt?

Tugas 4 rekayasa web 0316
Tugas 4 rekayasa web 0316Tugas 4 rekayasa web 0316
Tugas 4 rekayasa web 0316art david
 
Ppt pengenalan jquery
Ppt pengenalan jqueryPpt pengenalan jquery
Ppt pengenalan jquerymutia902
 
Jquery ppt
Jquery pptJquery ppt
Jquery ppt044249
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONDimas Prawira
 
Panduan lengkap php ajax j query
Panduan lengkap php ajax j queryPanduan lengkap php ajax j query
Panduan lengkap php ajax j queryapriatin
 
Chapter ix.koneksi java dengan mysql
Chapter ix.koneksi java dengan mysqlChapter ix.koneksi java dengan mysql
Chapter ix.koneksi java dengan mysqlFami Intan
 
Mengakses data dari database my sql di listview dengan json
Mengakses data dari database my sql di listview dengan jsonMengakses data dari database my sql di listview dengan json
Mengakses data dari database my sql di listview dengan jsonFanfandi Syahsyahsyah
 
Menyimpan Data Ke Database Dengan Ajax Dan PHP
Menyimpan Data Ke Database Dengan Ajax Dan PHPMenyimpan Data Ke Database Dengan Ajax Dan PHP
Menyimpan Data Ke Database Dengan Ajax Dan PHPEllyx Christian
 
Membuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaMembuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaEko Kurniawan Khannedy
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Agus Haryanto
 
Laporan praktikum modul 6 pemrogrman database dengan jdbc
Laporan praktikum modul 6 pemrogrman database dengan jdbcLaporan praktikum modul 6 pemrogrman database dengan jdbc
Laporan praktikum modul 6 pemrogrman database dengan jdbcDevi Apriansyah
 

Was ist angesagt? (13)

Tugas 4 rekayasa web 0316
Tugas 4 rekayasa web 0316Tugas 4 rekayasa web 0316
Tugas 4 rekayasa web 0316
 
Ppt pengenalan jquery
Ppt pengenalan jqueryPpt pengenalan jquery
Ppt pengenalan jquery
 
Jquery ppt
Jquery pptJquery ppt
Jquery ppt
 
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSONTutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
Tutorial pembuatan REST Service pada Support System menggunakan Servlet dan GSON
 
Panduan lengkap php ajax j query
Panduan lengkap php ajax j queryPanduan lengkap php ajax j query
Panduan lengkap php ajax j query
 
Chapter ix.koneksi java dengan mysql
Chapter ix.koneksi java dengan mysqlChapter ix.koneksi java dengan mysql
Chapter ix.koneksi java dengan mysql
 
Mengakses data dari database my sql di listview dengan json
Mengakses data dari database my sql di listview dengan jsonMengakses data dari database my sql di listview dengan json
Mengakses data dari database my sql di listview dengan json
 
Menyimpan Data Ke Database Dengan Ajax Dan PHP
Menyimpan Data Ke Database Dengan Ajax Dan PHPMenyimpan Data Ke Database Dengan Ajax Dan PHP
Menyimpan Data Ke Database Dengan Ajax Dan PHP
 
Membuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan javaMembuat aplikasi chat menggunakan java
Membuat aplikasi chat menggunakan java
 
MANIPULASI DOM
MANIPULASI DOMMANIPULASI DOM
MANIPULASI DOM
 
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
Android Fast Track - Database SQLite (Kamus Tiga Bahasa)
 
Laporan praktikum modul 6 pemrogrman database dengan jdbc
Laporan praktikum modul 6 pemrogrman database dengan jdbcLaporan praktikum modul 6 pemrogrman database dengan jdbc
Laporan praktikum modul 6 pemrogrman database dengan jdbc
 
JQuery
JQueryJQuery
JQuery
 

Andere mochten auch

Fall_2008_CS601_W1_Tyngsboro
Fall_2008_CS601_W1_TyngsboroFall_2008_CS601_W1_Tyngsboro
Fall_2008_CS601_W1_Tyngsborotutorialsruby
 
What We are Learning About DNS Security: DNSSEC and Much More..
What We are Learning About DNS Security:  DNSSEC and Much More..What We are Learning About DNS Security:  DNSSEC and Much More..
What We are Learning About DNS Security: DNSSEC and Much More..Neustar, Inc.
 
Real Time Link Building Strategies
Real Time Link Building StrategiesReal Time Link Building Strategies
Real Time Link Building Strategiesshuey03
 
Аренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey Kovyazin
Аренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey KovyazinАренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey Kovyazin
Аренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey Kovyazinguest8b0a46
 

Andere mochten auch (8)

Fall_2008_CS601_W1_Tyngsboro
Fall_2008_CS601_W1_TyngsboroFall_2008_CS601_W1_Tyngsboro
Fall_2008_CS601_W1_Tyngsboro
 
What We are Learning About DNS Security: DNSSEC and Much More..
What We are Learning About DNS Security:  DNSSEC and Much More..What We are Learning About DNS Security:  DNSSEC and Much More..
What We are Learning About DNS Security: DNSSEC and Much More..
 
web20
web20web20
web20
 
Ncap
NcapNcap
Ncap
 
extending-php
extending-phpextending-php
extending-php
 
Presentatie Albert Roos Twinfield Masterclass #TWFMC
Presentatie Albert Roos Twinfield Masterclass #TWFMCPresentatie Albert Roos Twinfield Masterclass #TWFMC
Presentatie Albert Roos Twinfield Masterclass #TWFMC
 
Real Time Link Building Strategies
Real Time Link Building StrategiesReal Time Link Building Strategies
Real Time Link Building Strategies
 
Аренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey Kovyazin
Аренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey KovyazinАренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey Kovyazin
Аренда ПО Microsoft: как предлагать и как продавать (Russian), Alexey Kovyazin
 

Ähnlich wie Jeni Web Programming Bab 3 Advanced Servlets

Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsIndividual Consultants
 
Tugas 7 rekayasa web 0316
Tugas 7 rekayasa web 0316Tugas 7 rekayasa web 0316
Tugas 7 rekayasa web 0316septianarul
 
Tugas 7 – rekayasa web
Tugas 7 – rekayasa webTugas 7 – rekayasa web
Tugas 7 – rekayasa webikasulistiyani
 
Tugas 7 rekayasa web 1312510231 Rostarina
Tugas 7 rekayasa web 1312510231 RostarinaTugas 7 rekayasa web 1312510231 Rostarina
Tugas 7 rekayasa web 1312510231 Rostarinaosta92
 
Tugas 7 rekayasa web 1211510944 art david
Tugas 7 rekayasa web 1211510944 art davidTugas 7 rekayasa web 1211510944 art david
Tugas 7 rekayasa web 1211510944 art davidart david
 
Kelompok 15
Kelompok 15Kelompok 15
Kelompok 15alqod
 
Kelompok 15
Kelompok 15Kelompok 15
Kelompok 15alqod
 
Web mvc dengan java jsp seri 1
Web mvc dengan java   jsp seri 1Web mvc dengan java   jsp seri 1
Web mvc dengan java jsp seri 1Zaenal Arifin
 
Membuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpMembuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpCahya Dwiana SN
 
Tugas7rekweb 1212511008-ismailaluwi
Tugas7rekweb 1212511008-ismailaluwiTugas7rekweb 1212511008-ismailaluwi
Tugas7rekweb 1212511008-ismailaluwiISMAIL ALUWI
 
Jquery Ajax Part 1 by Yussan
Jquery Ajax Part 1 by YussanJquery Ajax Part 1 by Yussan
Jquery Ajax Part 1 by YussanYusuf A.H.
 
Tugas 7 rekayasa web Fitra Ramadhan 1412510610
Tugas 7 rekayasa web Fitra Ramadhan 1412510610Tugas 7 rekayasa web Fitra Ramadhan 1412510610
Tugas 7 rekayasa web Fitra Ramadhan 1412510610Fitra Ramadhan
 
Tugas7 rekayasa web Ajat Sudrajat
Tugas7 rekayasa web Ajat SudrajatTugas7 rekayasa web Ajat Sudrajat
Tugas7 rekayasa web Ajat SudrajatAjat Sudrajat
 
Tugas7 ku-0316-rekweb
Tugas7 ku-0316-rekwebTugas7 ku-0316-rekweb
Tugas7 ku-0316-rekwebElisanendes
 
TUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYO
TUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYOTUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYO
TUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYODoni Wijoyo
 

Ähnlich wie Jeni Web Programming Bab 3 Advanced Servlets (20)

Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
 
Tugas 7 rekayasa web 0316
Tugas 7 rekayasa web 0316Tugas 7 rekayasa web 0316
Tugas 7 rekayasa web 0316
 
Tugas 7 – rekayasa web
Tugas 7 – rekayasa webTugas 7 – rekayasa web
Tugas 7 – rekayasa web
 
Tugas 7 rekayasa web 1312510231 Rostarina
Tugas 7 rekayasa web 1312510231 RostarinaTugas 7 rekayasa web 1312510231 Rostarina
Tugas 7 rekayasa web 1312510231 Rostarina
 
Tugas 7 rekayasa web 1211510944 art david
Tugas 7 rekayasa web 1211510944 art davidTugas 7 rekayasa web 1211510944 art david
Tugas 7 rekayasa web 1211510944 art david
 
Kelompok 15
Kelompok 15Kelompok 15
Kelompok 15
 
Kelompok 15
Kelompok 15Kelompok 15
Kelompok 15
 
Web mvc dengan java jsp seri 1
Web mvc dengan java   jsp seri 1Web mvc dengan java   jsp seri 1
Web mvc dengan java jsp seri 1
 
MVC J2EE using servlet
MVC J2EE using servletMVC J2EE using servlet
MVC J2EE using servlet
 
Membuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpMembuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan php
 
Tugas 7
Tugas 7Tugas 7
Tugas 7
 
Tugas7rekweb 1212511008-ismailaluwi
Tugas7rekweb 1212511008-ismailaluwiTugas7rekweb 1212511008-ismailaluwi
Tugas7rekweb 1212511008-ismailaluwi
 
Jquery Ajax Part 1 by Yussan
Jquery Ajax Part 1 by YussanJquery Ajax Part 1 by Yussan
Jquery Ajax Part 1 by Yussan
 
Tugas 7 rekayasa web Fitra Ramadhan 1412510610
Tugas 7 rekayasa web Fitra Ramadhan 1412510610Tugas 7 rekayasa web Fitra Ramadhan 1412510610
Tugas 7 rekayasa web Fitra Ramadhan 1412510610
 
Tugas7 rekayasa web Ajat Sudrajat
Tugas7 rekayasa web Ajat SudrajatTugas7 rekayasa web Ajat Sudrajat
Tugas7 rekayasa web Ajat Sudrajat
 
modul 2.pdf
modul 2.pdfmodul 2.pdf
modul 2.pdf
 
Tugas 7 – rekayasa web
Tugas 7 – rekayasa webTugas 7 – rekayasa web
Tugas 7 – rekayasa web
 
Tugas7 ku-0316-rekweb
Tugas7 ku-0316-rekwebTugas7 ku-0316-rekweb
Tugas7 ku-0316-rekweb
 
TUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYO
TUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYOTUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYO
TUGAS 7 – REKAYASA WEB (KU) - 1311511057 - RADEN DONI WIJOYO
 
Tugas 7 0316
Tugas 7   0316Tugas 7   0316
Tugas 7 0316
 

Mehr von Individual Consultants

O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...Individual Consultants
 
Sistem Penyadapan Intruder In The Darkness
Sistem  Penyadapan  Intruder In  The  DarknessSistem  Penyadapan  Intruder In  The  Darkness
Sistem Penyadapan Intruder In The DarknessIndividual Consultants
 
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...Individual Consultants
 
Jeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyJeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyIndividual Consultants
 
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternJeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternIndividual Consultants
 
Jeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcJeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcIndividual Consultants
 
Jeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced MvcJeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced MvcIndividual Consultants
 
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebJeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebIndividual Consultants
 
Jeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User InterfaceJeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User InterfaceIndividual Consultants
 

Mehr von Individual Consultants (20)

24602905 Karsten Nohl
24602905  Karsten  Nohl24602905  Karsten  Nohl
24602905 Karsten Nohl
 
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...O T O M A S I  P E N G A W A S  R U M A H  D E N G A N  M E N G G U N A K A N...
O T O M A S I P E N G A W A S R U M A H D E N G A N M E N G G U N A K A N...
 
Sistem Penyadapan Intruder In The Darkness
Sistem  Penyadapan  Intruder In  The  DarknessSistem  Penyadapan  Intruder In  The  Darkness
Sistem Penyadapan Intruder In The Darkness
 
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...P R O S P E K T U S  P E R U S A H A A N  I K K I  G R O U P  D E N G A N  C ...
P R O S P E K T U S P E R U S A H A A N I K K I G R O U P D E N G A N C ...
 
Jeni Web Programming Cover
Jeni Web Programming CoverJeni Web Programming Cover
Jeni Web Programming Cover
 
Jeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case StudyJeni Web Programming Bab 16 App Case Study
Jeni Web Programming Bab 16 App Case Study
 
Jeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design PatternJeni Web Programming Bab 15 J2 Ee Design Pattern
Jeni Web Programming Bab 15 J2 Ee Design Pattern
 
Jeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan JdbcJeni Web Programming Bab 5 Sql Dan Jdbc
Jeni Web Programming Bab 5 Sql Dan Jdbc
 
Jeni Web Programming Bab 9 Jsf
Jeni Web Programming Bab 9 JsfJeni Web Programming Bab 9 Jsf
Jeni Web Programming Bab 9 Jsf
 
Jeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced MvcJeni Web Programming Bab 8 Advanced Mvc
Jeni Web Programming Bab 8 Advanced Mvc
 
Jeni Web Programming Bab 7 Mvc Intro
Jeni Web Programming Bab 7 Mvc IntroJeni Web Programming Bab 7 Mvc Intro
Jeni Web Programming Bab 7 Mvc Intro
 
Jeni Web Programming Bab 4 Dasar Jsp
Jeni Web Programming Bab 4 Dasar JspJeni Web Programming Bab 4 Dasar Jsp
Jeni Web Programming Bab 4 Dasar Jsp
 
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman WebJeni Web Programming Bab 1 Pengenalan Pemrograman Web
Jeni Web Programming Bab 1 Pengenalan Pemrograman Web
 
Jeni J2 Me Bab11 Topik Topik Tambahan
Jeni J2 Me Bab11 Topik Topik TambahanJeni J2 Me Bab11 Topik Topik Tambahan
Jeni J2 Me Bab11 Topik Topik Tambahan
 
Jeni J2 Me Bab10 Optional%20 Packages
Jeni J2 Me Bab10 Optional%20 PackagesJeni J2 Me Bab10 Optional%20 Packages
Jeni J2 Me Bab10 Optional%20 Packages
 
Jeni J2 Me Bab09 Optimisasi
Jeni J2 Me Bab09 OptimisasiJeni J2 Me Bab09 Optimisasi
Jeni J2 Me Bab09 Optimisasi
 
Jeni J2 Me Bab08 Web Services
Jeni J2 Me Bab08 Web ServicesJeni J2 Me Bab08 Web Services
Jeni J2 Me Bab08 Web Services
 
Jeni J2 Me Bab07 Security
Jeni J2 Me Bab07 SecurityJeni J2 Me Bab07 Security
Jeni J2 Me Bab07 Security
 
Jeni J2 Me Bab05 Persistence
Jeni J2 Me Bab05 PersistenceJeni J2 Me Bab05 Persistence
Jeni J2 Me Bab05 Persistence
 
Jeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User InterfaceJeni J2 Me Bab04 Low Level User Interface
Jeni J2 Me Bab04 Low Level User Interface
 

Jeni Web Programming Bab 3 Advanced Servlets

  • 1. J.E.N.I BAB 3 Pembahasan Servlet Lanjutan Pada pembahasan sebelumnya, kita telah mengamati tentang bagaimana servlet dapat digunakan oleh pengembang Java untuk memenuhi permintaan client dan menghasilkan respon secara dinamis. Kita juga telah melihat bagaimana untuk mendistribusikan setiap servlet; dengan cara membentuknya menjadi package-package dalam bentuk file WAR dan memindahkannya ke servlet container. Pada pembahasan ini, meliputi beberapa topik tentang servlet lanjutan : ● Pengalihan respon ● Peran objects ● Sessions dan session tracking ● Filters 3.1. Pengalihan Respon Ada beberapa kasus ketika kita ingin servlet kita hanya menjalankan beberapa proses inisialisasi dan meninggalkan isi turunan dari beberapa entity asli yang lain. Mari membuat skenario dimana kita mengambil beberapa nilai dari user dan menyajikannya dengan beberapa tampilan yang mungkin berdasarkan pada nilai tersebut. Mari mengatakan bahwa kita mempunyai sebuah tempatnya, setelah memproses login user, akan menampilkannya dengan halaman yang berbeda tergantung pada peran user pada sistem tersebut. Menempatkan isi kode turunan untuk semua halaman ke satu servlet mungkin membuat servlet kita terlalu tidak teratur. Pada kasus ini, akan menjadi lebih baik untuk servlet untuk memindahkan output turunan. Ada dua method yang dapat dipakai oleh pengembang untuk melakukan pemindahan ini. Satu adalah menyelesaikan penggunaan dari sebuah object RequestDispatcher, yang lain adalah dengan menggunakan method sendRedirect() yang dapat ditemukan dalam object HttpServletResponse. Advanced Servlets 1
  • 2. J.E.N.I 3.1.1 RequestDispatcher Kita mencapai sebuah instance dari object RequestDispatcher dengan menjalankan method selanjutnya yang mana dapat ditemukan dalam object HttpServletRequest : public RequestDispatcher getRequestDispatcher(String path) Parameter string yang diambil dalam method ini adalah lokasi dari HTML, JSP, atau servlet yang ingin kita hubungkan dengan request. Sekali kita mempunyai sebuah pengontrol pada sebuah instance dari object RequestDispatcher , Kita memiliki pilihan untuk menjalankan satu dari dua method : ● public void include(ServletRequest req, ServletResponse res) ● public void forward(ServletRequest req, ServletResponse res) Kedua method diatas mengambil isi yang dihasilkan oleh lokasi khusus dan membuatnya sebuah bagian dari respon servlet ke user. Perbedaan utama diantara mereka adalah : perintah forward membuat target entity dengan satu-satunya tanggung jawab untuk mengeluarkan respon, sementara perintah include hanya menggabungkan isi dari target. Menggunakan perintah include, kita dapat menambahkan isi lain ke respon, mungkin memasukkan even target yang lain. Dibawah ini adalah beberapa contoh kode memanfaatkan kedua perintah yaitu 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); } } Advanced Servlets 2
  • 3. J.E.N.I <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> Kesamaan secara virtual, dengan hanya membedakan method yang dijalankan pada permintaan object dispatcher. Ini akan menyajikan penanda perbedaan diantara keduanya. Dibawah ini adalah keluaran program tersebut. Kode yang diberikan sama secara virtual, tetapi kita memiliki dua output yang berbeda. Menggunakan method include, pesan String yang kita keluarkan ke user lebih dahulu untuk memanggil method yang ditampilkan. Ini bukan kasus untuk output dari method forward : pesan yang kita tambahkan pada respon lebih dahulu untuk memanggil method bukan merupakan bagian dari output. Dengan method forward, semua isi dalam response buffer dibersihkan lebih dahulu untuk memanggil method, Setelah respon tertentu di commit; Tidak ada isi yang dapat ditambahkan lebih lanjut. Dengan method include, semua isi ditempatkan dalam response buffer yang tersimpan sebelum dan sesudah memanggil method. Advanced Servlets 3
  • 4. J.E.N.I Menggunakan method include, sangat mungkin untuk servlet kita untuk membawakan sebagai keseluruhan output dari beberapa sumber yang berbeda. Yang juga memungkinkan untuk menambahkan pesan ke isi yang sifatnya static dan sebaliknya. Perhatikan contoh 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, kita menggunakan method include untuk menampilkan beberapa halaman HTML yang berbeda(header.html, mainContent.html, footer.html) Untuk user sebagai satu yang mewakili keseluruhan user. Juga, sebuah pesan error akan ditampilkan jika user gagal dalam melakukan validasi disisi server. Advanced Servlets 4
  • 5. J.E.N.I sendRedirect Di sisi lain dari pengalihan output ke suatu entity diluar servlet adalah method sendRedirect. Ini akan memiliki tanda method sebagai berikut : public void sendRedirect(String relativePath) Dan dapat ditemukan dalam object HttpServletResponse. Parameter yang diambil adalah sebuah String mewakili path untuk target yang kita inginkan untuk pengalihan user. Memanggil method ini secara efektif memerintahkan browser untuk mengirim dalam HTTP request yang lain ke tujuan tertentu. Ini membuat target satu-satunya entity yang bertanggungjawab untuk meng generate isi, sama dengan sebuah cara untuk hasil dengan menggunakan method forward dalam object RequestDispatcher yang telah didiskusikan sebelumnya. Bagaimanapun, permintaan dikirim kembali untuk menampilkan beberapa perbedaan secara praktek dibandingkan dengan method forward : – alamat URL pada browser bar mencerminkan target yang ditentukan. Ini membuat penggunaan method sendRedirect tidak digunakan jika kita tidak mengingatkan tentang kesadaran user terhadap fungsi pengalihan. – Sejak ini menjadi sebuah request baru secara efektif, data tersimpan dalam object request yang sebelumnya tidak tersimpan. Disediakan parameter-parameter untuk user, jika ada banyak, harus di submit kembali jika kita ingin target kita sadar terhadap prosedur tersebut. Biasanya data tersimpan dalam object request harus juga dipelihara dengan beberapa cara, jika tidak data-data tersebut akan hilang. Disarankan ketika method include digunakan untuk memungkinkan banyak output source, method forward digunakan jika pengalihan ke sebuah komponen yang menghasilkan isi yang dinamis (servlets atau JSPs yang akan kita diskusikan kemudian), dan method sendRedirect digunakan ketika mengalihkan ke isi yang static. 3.2 PEMBATASAN OBJECT-OBJECT Spesifikasi servlet memungkinkan kita untuk melakukan empat bidang dimana untuk menempatkan data, agar komponen-komponen kita dapat digunakan bersama. Untuk meningkatkan spesifikasinya : ● Halaman-halaman menyangkut suatu bidang didefinisikan menjadi bidang meliputi sebuah halaman JSP tunggal. Variabel-variabel dideklarasikan dalam halaman yang sifatnya dapat dilihat hanya dalam halaman tersebut dan dan tidak akan nampak sekalipun jika servis halaman berakhir. Object yang tergabung dengan bidang ini adalah object PageContext. ● Pembatasan Request - Request didefinisikan menjadi bidang yang meliputi sebuah client dengan request tunggal. Data yang tersimpan dalam bidang ini sifatnya dapat dilihat oleh semua komponen web mengatur request dari client. Setelah request client telah selesai – Kemudian client menerima sebuah respon HTTP dan menutup koneksi ke server – semua data tersimpan dalam bidang ini tidak lagi terlihat. Advanced Servlets 5
  • 6. J.E.N.I Object yang tergabung dengan bidang ini adalah object HttpServletRequest. Instance- instance dari object ini siap dan dapat digunakan untuk servlet, sama seperti yang mereka berikan sebagai parameter untuk method service yang dipanggil oleh container diatas request client. ● Session – bidang ini meliputi sebuah “session” tunggal dengan client. Session ini dimulai ketika client pertama dimulai dengan aplikasi web dan diakhiri sekali ketika user log out dari sistem atau server didefinisikan dengan nilai timeout telah tercapai. Data dalam bidang ini dapat dilihat oleh semua komponen web client membuat dan memakainya selama interval tersebut. Data dari satu session user, bagaimanapun, tidak terlihat dari dalam session user yang lain. Object yang tergabung dengan bidang ini adalah object HttpSession. Sebuah instance dari ini bisa didapatkan kembali dengan menggunakan method getSession() dalam object HttpServletRequest. ● Aplikasi – bidang ini meliputi semua aplikasi. Data yang tersimpan dalambidang ini terlihat oleh semua komponen tanpa memperhatikan request user atau session client yang mengatur dan mengakhiri sampai aplikasi dihentikan. Object yang tergabung dengan bidang ini adalah object ServletContext. Seperti yang telah dibahas sebelumnya, ini bisa didapatkan kembali dengan memanggil method getServletContext() dari object yang valid ServletConfig. 3.2.1 Menyimpan dan mendapatkan kembali data dari suatu bidang Semua dari object bidang seperti yang disebutkan diatas terdiri dari perintah method untuk bisa mendapatkan kembali dan menyimpan data didalamnya. Untuk menyimpan data gunakan method public void setAttribute(String key, Object value); parameter String yang diambil method ini akan menyimpan object dibawah nilai tersebut. Untuk mendapatkan data kemudian, lewati key yang sama seperti parameter. public Object getAttribute(String key); Jika tidak ada object yang bisa mendapatkan kembali dari key yang diberikan, niali null dikembalikan oleh method. Juga, sejak return type adalah Object, itu akan membuat pengembang untuk memilih Object ke class yang sesuai dan menampilan pengujian type. Untuk menghapus sebuah attribut dari object bidang secara sederhana panggil method removeAttribute() dan lalui kunci attribut seperti parameternya. Advanced Servlets 6
  • 7. J.E.N.I 3.2.2 Contoh skenario Mari kita mengikuti skenario berikut ini : kita ingin aplikasi kita dapat menampilkan rincian tentang seseorang diberikan personalIDnya. PersonalID ini akan disediakan oleh user. Untuk memajukan kemampuan maintenance, kita ingin memisahkan komponen yang akan mendapatkan kembali rincian individu dan komponen yang akan menampilkan informasi kepada user. Dua komponen ini kemudian untuk berkomunikasi menggunakan penyimpanan data dan fasilitas pengembalian yang dapat dilakukan ketika terjadi 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 untuk object DataService dan object individu tidak terdaftar disini, implementasinya tidak penting untuk contoh kita. Apa yang ditampilkan pada contoh diatas adalah bagaimana untuk menyimpan object data dari satu servlet dan mengambil data yang sama untuk servlet yang lain yang telah mengakses ke bidang yag sama. Advanced Servlets 7
  • 8. J.E.N.I Perhatikan contoh berikut : pertama, servlet yang kedua bisa mendapatkan data kembali dari request karena ini masih bagian mengatur servlet method getAttribute akan memberikan nilai kembalian null, sejak sendRedirect akan membuat browser untuk request yang lain. Ini mengakhiri secara efektif batas waktu dari object request dalam menyimpan data. Kedua, disarankan bahwa key yang digunakan untuk menyimpan dan mendapatkan data dibuat dapat dipakai untuk aplikasi sebagai konstanta, Seperti contoh diatas. Ini meyakinkan bahwa pasti key yang sama digunakan untuk penyimpanan dan pengambilan kembali data, mengurangi kemungkinan jumlah kemungkinan error yang bisa muncul ketika proses pengembangan dilakukan. 3.3 SESSION TRACKING DAN PENGATURAN Kita harus memanggil kembali HTTP yang didesain sebagai bagian yang terhubung, protocol yang tidak memiliki state. Ketika browser mengirim request ke server, koneksi dibuka, mengirimnya melalui HTTP request, menggunakan respon HTTP, dan kemudian menutup koneksi. Sejak setiap request browser terkirim secara efektif dalam koneksi berbeda tiap waktunya, dan server tidak berhubungan dan memperbaiki secara langsung, secara tidak sadar client mengaksesnya, masalahnya ditunjukkan melalui aplikasi web : bagaimana memperbaiki langkah untuk bagian transaksi web user? Solusi untuk masalah ini adalah server dalam memperbaiki konsep “user session”. Sementara dalam sebuah session, server akan dapat mengenal client diantara banyak request. Secara tidak sadar,kini server dapat memperbaiki state untuk client. Untuk setiap session agar tetap ada, browser client harus dapat mengirim data ke sisi server dari standard HTTP request-nya. Data ini memungkinkan server untuk mengenali user yang mana yang melakukan reques, dan memperbaiki sesuai dengan statenya. Ada tiga tipe solusi untuk masalah ini : cookies, penulisan kembali alamat URL, dan form fields yang tersembunyi. Advanced Servlets 8
  • 9. J.E.N.I 3.3.1 Cookies Cookies adalah struktur data kecil yang digunakan oleh web server untuk mengirim data ke browser client. Data ini disimpan oleh browser, dan dalam beberapa kondisi browser mengembalikan data tersebut kembali ke web server. Menggunakan cookies, servlets dapat menyimpan "session ids" yang dapat digunakan untuk mengenali user sebagai bagian yang ikut serta dalam bagian session. Setelah ID diproses, disimpan dalam object cookie dan mengirim kembali ke browser client untuk penyimpanan. Object cookie ini kemudian dapat ditangkap kembali dalam object request setiap waktu untuk mengetahui jika user ada dalam session. Dibawah ini adalah contoh dari bagaimana untuk mengunakan cookies untuk session tracking dalam servlets : ... String sessionID = generateSessionID(); HashMap map = new HashMap(); HashMap containerMap = retrieveSessionMaps(); containerMap.put(sessionID, map); Cookie sessionCookie = new Cookie("JSESSIONID", sessionID); response.addCookie(sessionCookie); .. Untuk bisa mendapatkan gambaran yang benar mengenai data session, servlet kemudian mendapatkan cookie yang berisi session ID, dan menggunakannya sebagai key, mencapai HashMap yang sesuai. Sementara cookies merupakan solusi yang baik untuk session tracking, penggunaannya memerlukan pengembang untuk mengatur banyak detail : • Membangkitkan session id yang spesifik untuk setiap user. • Mendapatkan cookie yang sesuai dari browser yang berisi session ID. • Mengatur waktu yang terpakai sesuai dengan kebutuhan cookie. Sesuai dengan isi detail diatas, masalah dengan penggunaan cookie dari beberapa user yang browsernya tidak support dengan cookie berkenan dengan keperluan keamanan. Pendekatan alternatif mutlak diperlukan. Advanced Servlets 9
  • 10. J.E.N.I 3.3.2 Penulisan kembali alamat URL Pada pendekatan ini, browser client menambahkan sebuah session ID yang spesifik pada akhir setiap request yang dibuat untuk server. Session ID ini dapat dibaca, dan informasi user yang sesuai bisa didapatkan. Ini adalah solusi lain yang cukup baik, dan satu dari pekerjaan tersebut jika user me non aktifkan pengunaan cookies. Bagaimanapun, ini mengenalkan masalah yang dihadapi untuk meyakinkan bahwa setiap URL yang digunakan oleh client pada bagian atas halaman site memiliki session ID yang ditambahkan didalamnya. 3.3.3 Form fields tersembunyi Pada pendekatan ini, form field tersembunyi dikenalkan dalam bentuk HTML, dengan nilai yang diset untuk bagian session ID. Bagaimanapun, method ini sangat terbatas berhubungan dengan fakta bahwa ini hanya dapat digunakan ketika ada form di halaman yang digunakan client. 3.3.4 Session Tracking dalam Servlets Spesifikasi servlet menyediakan sebuah API tingkat tinggi untuk menyediakan access untuk session tracking : API HttpSession. Menggunakan API ini, pengembang tidak lagi perlu khawatir tentang banyak detail yang disebutkan seperti yang telah disebut diatas : pengenalan session ID , manipulasi detail cookie, dan informasi mengenai detail diringkas oleh pengembang. Juga, pengembang menyediakan lokasi yang sesuai untuk menyimpan data untuk session user. Penggunaan API HttpSession yang benar juga memungkinkan aplikasi Anda untuk secara otomatis beralih ke metod URL-rewriting jika dideteksi adanya support cookie di browser client di non aktifkan. 3.3.5 Mendapatkan sebuah instance dari object HttpSession Object HttpSession mewakili data session yang tergabung untuk diberikan request client dapat dicapai dengan memanggil method getSession() dalam object HttpServletRequest . Container kemudian bertanggung jawab untuk membaca data dari client (salah satu dari cookies atau dari URL-rewriting), dan membuat instance dari object HttpSession. Dengan melewatkan sebuah nilai boolean ke method getSession()(misal, getSession(true) ) kita dapat membatasi ke server jika object HttpSession yang baru harus dibuat secara otomatis dalam kasus user tidak berperan langsung dalam beberapa session. 3.3.6 Menyimpan dan mendapatkan data dalam sebuah session Dengan HttpSession API, pengembang tidak perlu mengatur object secara eksplisit untuk menyimpan data yang diperlukan untuk diperbaiki dalam user session. Semua yang diperlukan adalah untuk memanggil salah satu dari kedua method berikut : • public void setAttribute(String key, Object value) • public Object getAttribute(String key) Advanced Servlets 10
  • 11. J.E.N.I 3.3.7 Menghapus data yang tersimpan session Untuk menghapus data yang berada pada batasan session, panggil method removeAttribute(), dan lewatkan sebagai parameter key String yang tergabung dengan data. 3.3.8 Terminasi session Sessions secara otomatis diterminasi setelah didefinisikan awal interval terbesarnya. Interval ini dapat ditemukan dan dimanipulasi dalam application's deployment descriptor. deployment descriptor untuk contoh FirstServlet dicetak kembali disini untuk memanggil kembali : ... </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> ... Nilai 30 dalam elemen session-timeout mengatakan ke server untuk menunggu suatu periode inactive akhir selama 30 menit sebelum melakukan terminasi session. Pada point ini semua object ditempatkan dalam batasan session akan dihapus dari batasan, dan object HttpSession menjadi invalid. Pengembang dapat melkukan terminasi session melalui program dengan memanggil method invalidate(). 3.3.9 Melakukan URL-Rewriting Secara default, HttpSession API membuat dan mengunakan cookies untuk track sessions. Bagaimanapun, kita harus mengembangkan aplikasi web kita hingga dapat bekerja sama baiknya pada browser yang tidak mendukung cookies dengan menambahkan support untuk URL rewriting. Kita dapat menambahkan support URL rewriting dengan menggunakan method encodeURL() yang dapat ditemukan dalam object HttpServletResponse. Method ini mengambil dalam sebuah String yang mewakili sebuah path atau alamat URL sebagai parameternya. Kemudian dia dapat mengenali jika cookie support diaktifkan pada browser target. Jika dia diaktifkan, dia akan mengembalikan memberikan String sepertinya.jika cookies di non aktifkan, dia mengaktifkan URL rewriting dengan menambahkan session ID ke URL yang diberikan. Advanced Servlets 11
  • 12. J.E.N.I Berikut ini adalah contoh tentang bagaimana untuk menggunakan method encodeURL. ... String encodedURL = response.encodeURL("/welcome.jsp"); out.println("<A HREF='" + encodedURL + "'>Click here to continue</A>"); ... Untuk menyediakan fungsi URL rewriting pada aplikasi kita kemudian , kita harus memindahkan semua URL melewatkannya sebagai link ke user dengan suatu pengkodean kembali dengan menjalankan method encodeURL. Path dilewatkan melalui method sendRedirect yang telah kita diskusikan sebelumnya. Juga harus dikodekan kembali, sekarang menggunakan hasil dari method encodeRedirectURL(). 3.4 FILTERS Filters adalah komponen web lanjutan yang dikenal sejak spesifikasi Serlvet 2.3. Pada dasarnya, komponen mereka yang berdiri diantara request client dan bagian sumber – beberapa telah mencoba untuk mendapat target sumber untuk menjalankan filter. Isi Sumber dapat menjadi static atau dynamic source (HTML, JSP, GIF, ...) Filters bekerja dengan menangkap request client dan tetap ada sebagai bagian dari rantai; berikut ini, pendefinisian dari filter yang requestnya dilewatkan berjalan sebelum benar-benar tiba di sumber target. Ketika request melewati filter, filter menjalankan proses tersebut dan kemudian dapat memutuskan apakah request dapat dilewatkan pada proses filter selanjutnya pada urutan tersebut (jika filter tersebut adalah filter terakhir pada urutan, request dilewatkan pada sumber target), atau untuk melintasi rantai siklus sepenuhnya, menolak acces user ke sumber. CLIENT FILTER FILTER Container FILTER ENDPOINT (HTML, JSP, ) Advanced Servlets 12
  • 13. J.E.N.I Gambar diatas adalah representasi grafis tentang bagaimana request melewatkan beberapa tahap filter sebelum benar-benar tiba pada titik akhir target. Filter adalah komponen yang dapat dipakai sejak ia menawarkan kemudahan untuk pengembang yaitu cara mudah untuk menambahkan proses sebelum sumber didalam aplikasi web diakses. Ini adalah macam-macam kegunaan yang mungkin dengan menggunakan servlet dan pengalihan respon. Ini lebih sulit untuk implementasi berlanjut, dan mensyaratkan setiap servlet pada tingkat yang lebih tinggi sadar akan lokasi servlet selanjutnya dalam urutan. Filter tidak memiliki pembatasan; ini pembangun servlet yang mengatur urutan komponen yang dipanggil sebelumnya request pernah mencapai titik akhir, dan bukan pengembangnya. 3.4.1 Membuat sebuah Filter Untuk membuat sebuah filter, pengembang harus membuat sebuah class yang mengimplementasikan interface javax.servlet.Filter. Interface ini mendefinisikan method- method berikut ini : • void init(FilterConfig config) melempar ServletException – method ini dipanggil oleh servlet container awalnya ini akan mengirim filter ke memory. Inisialisasi kode harus ditempatkan disini, termasuk kode yang mengumpulkan inisialisasi parameter yang terletak dalam web.xml sepanjang penggunaan object FilterConfig yang diberikan. • void destroy – Method ini dipanggil oleh container ketika filter diambil dari memory. Ini selalu dilakukan ketika aplikasi dimatikan. Kode yang menghentikan beberapa sumber dibuat dengan filter yang harus dikerjakan disini. • void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) melempar IOException, ServletException – method ini berisi semua kegunaan dari class filter. Ini dipanggil oleh servlet container ketika server mengenali bahwa filter diharuskan untuk digunakan untuk menangkap respon dari sebagian user. Parameter-parameter yang terlewatkan pada method ini adalah instances dari object ServletRequest, ServletResponse, dan FilterChain. Jika Filter ini berpartisipasi dalam sebuah lingkungan web (seperti kasus yang biasa terjadi) pengembang dapat memilih object permintaan dan respon untuk instances dari HttpServletRequest dan HttpServletResponse, masing-masing, jadi mereka bisa mendapatkan informasi HTTP- tertentu. Seperti servlet, container akan menciptakan hanya satu instance dari sebuah object Filter dan menggunakan multi-threading untuk memungkinkan pengaturan beberapa request client secara bersama-sama. Ini berarti bahwa method ini HARUS didefinsikan menjadi thread-safe. 3.4.2 Rantai Filter Rantai filter memungkinkan filter ditampilkan pada urutan yang benar untuk sebagian sumber, dan diwakili oleh suatu object FilterChain. Kemampuan suatu filter untuk menjadi satu silklus berbentuk rantai tersendiri. Sebaliknya Filter memiliki kegunaan yang sama seperti Servlet. Rantai filter memungkinkan pembersihan secara terpisah diantara tingkat pemrosesan yang berbeda : misalkan, sebagai contoh, fungsi baru yang perlu diimplementasikan sebelum request diproses, ini dapat dibuat dengan sederhana sebagai filter. Pertama-tama filter Advanced Servlets 13
  • 14. J.E.N.I dikonfigurasi, Filter hanya ditambahkan ke pelayanan komponen terhadap request sebelum titik akhir dapat dicapai, ia tidak menyerahkan sepenuhnya beberapa proses yang dilakukan sebelumnya kecuali jika secara explisit ditulis untuk melakukan hal yang sama dapat dilakukan oleh pengembang. Urutan rantai filter dikenali oleh lokasi filter dalam deployment descriptor dan mengikuti pola ascending yang mengharuskan penggunaan elemen<filter-mapping> yang mewakili proses mapping dari setiap filter (selanjutnya akan dibahas lebih dalam mengenai konfigurasi filter). Seperti yang telah dibahas sebelumnya, object FilterChain mewakili urutan dari filter yang akan dipanggil sebelum pada akhirnya mencapai titik akhir. Satu-satunya akses pengembang melalui urutan ini adalah method doFilter dalam object FilterChain : ini memanggil filter selanjutnya dalam urutan, atau sumber target jika suatu filter terletak pada urutan terakhir. Method ini hanya memerlukan object tertentu yaitu ServletRequest dan ServletResponse sebagai parameter. Lagi, sejak tidak ada yang membutuhkan filter programmer untuk memiliki kesadaran tentang filter yang mana akan menerima request selanjutnya, yang memungkinkan programmer untuk memfokuskan diri hanya pada suatu object tertentu saja. Dibawah ini adalah sebuah filter yang menyediakan logging dasar untuk aktifitas pada aplikasi : 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); } } Advanced Servlets 14
  • 15. J.E.N.I 3.4.3 Konfigurasi Filter Konfigurasi Filter adalah sangat sama seperti yang diperlukan pada servlets. Ada bagian yang diperlukan untuk mendefinisikan setiap filter untuk digunakan dalam aplikasi, sama seperti bagian untuk mendefinisikan pola url-yang akan didengar oleh filter untuk ditangkap dan diproses lebih lanjut. Sebuah contoh dari konfigurasi filter 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 web.xml yang sangat khusus tentang pemesanan dari elemen-elemen tertentu, Paling baik untuk meyakinkan bahwa masukan elemen filter didefinisikan sebelum beberapa servlet didefinisikan, tapi setelah ada beberapa masukan context-param. Juga, semua masukan filter-mapping harus diletakkan setelah beberapa definisi filter. Secara default, Filters tidak digunakan terhadap komponen-komponen web (servlets, JSP yang lain) inilah target dari pemanggilan include atau forward dari sebuah object RequestDispatcher. Mereka dipakai hanya untuk request yang dibuat secara langsung oleh client. Kebiasaan ini dapat dirubah biarpun dengan menambahkan satu atau lebih elemen pengiriman untuk memetakan filter. ... </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> Elemen-elemen pengiriman memiliki satu dari nilai berikut : REQUEST, INCLUDE, FORWARD, dan ERROR. Ini menyatakan apakah filter akan digunakan hanya untuk request client, hanya includes, hanya request, atau hanya error, atau beberapa kombinasi dari keempatnya. Advanced Servlets 15