endy muhardin - struts (id)

18
Seri Pemrograman Web M MENGGUNAKAN ENGGUNAKAN W WEB EB A APPLICATION PPLICATION F F RAMEWORK RAMEWORK Struts Struts © 2005 Endy Muhardin <endy at artivisi dot com> last updated 200502021

Upload: api-3771999

Post on 07-Jun-2015

261 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Endy Muhardin - Struts (ID)

Seri Pemrograman Web

MMENGGUNAKANENGGUNAKAN W WEBEB A APPLICATIONPPLICATION F FRAMEWORKRAMEWORK

StrutsStruts

© 2005 Endy Muhardin <endy at artivisi dot com>last updated 200502021

Page 2: Endy Muhardin - Struts (ID)

Daftar IsiI. Arsitektur Dasar Aplikasi Web...............................................................................................1II. Pengenalan Struts....................................................................................................................1

A. Keunggulan Struts..............................................................................................................1B. Framework alternatif..........................................................................................................1

III. Menggunakan Struts..............................................................................................................1A. Instalasi ...............................................................................................................................1B. Hello World...........................................................................................................................1C. Memproses HTML Form.....................................................................................................1D. Validasi Form.......................................................................................................................1E. Mengatur Layout dengan Tiles..........................................................................................1

Page 3: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

I. I. Arsitektur Dasar Aplikasi WebArsitektur Dasar Aplikasi WebDalam membangun aplikasi web, kita pasti akan dihadapkan pada tugas­tugas

pemrograman berikut: 

● Menangkap request dari browser

● Memproses request,  melakukan business  logic,  dan menampilkan dynamicpage yang sesuai

● Menerima input berupa HTML Form

● Melakukan validasi HTML Form

● Memproses input dari Form

● Melakukan  akses  database  untuk  mengambil   data,   menambah  data,   ataumengubah data.

Selain  itu,  kita   juga seringkali  harus  membuat  aplikasi  web yang  skinnable,seperti WinAMP, yang tampilannya bisa diganti hanya dengan satu klik tombol. 

Komunitas programmer mengenal suatu istilah untuk memisahkan tugas­tugastersebut  agar aplikasi  yang dibuat menjadi mudah di­maintain.  Ada  tiga  layerutama   dalam   arsitektur   web   MVC,   yang   disebut   sebagai   best­practices   danbanyak diadopsi oleh para arsitek aplikasi: 

– Model

– View

– Controller

Layer Model merupakan business logic utama. Di dalamnya ada kode untukdata persistence dan perhitungan business  logic utama. Secara singkat,  layerModel ini menangani content dari aplikasi. Di layer ini diputuskan data apa yangakan diberikan pada client. Dengan menggunakan analogi Aplikasi Diskon, layerini  memutuskan  angka berapa yang akan keluar  sebagai  totalDiskon,  berapaharga untuk mouse, dan sebagainya.

Layer   View   menangani   masalah­masalah   yang   berkaitan   dengan   tampilan.Layer   ini   tidak   peduli   apa   content   yang   ada,   tugasnya   hanya   melakukanformatting terhadap data tersebut agar tampilannya sesuai dengan kebutuhanuser.   Misalnya,   untuk   Aplikasi   Diskon,   layer   ini   memutuskan   apakah   daftar

©Endy Muhardin <endy at artivisi dot com> halaman 1

Page 4: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

belanja akan ditampilkan dalam tabel HTML, ditampilkan ke command prompt,disajikan dalam tabel Swing, atau diekspor menjadi file text. Sebagai tambahan,biasanya   layer   View   juga   bertugas   untuk   melakukan   validasi   data   yangdiinputkan user.

Layer  Controller  mengatur  user   flow.  Di  sini  dilakukan pemrosesan   requestuntuk menentukan business logic mana yang akan dieksekusi. Biasanya layercontroller juga digunakan untuk mengatur ijin akses dan permission.

Dengan   menggunakan   MVC   pattern,   banyak   framework   yang   telah   dibuat.Salah satu diantaranya adalah Struts, yang akan kita pelajari pada modul ini.

II. II. Pengenalan StrutsPengenalan Struts

A. A. Fitur StrutsFitur Struts

– Utility classes untuk menangani tugas rutin pemrograman web.

– Tag library untuk membuat elemen HTML yang sering digunakan.

– Action dan ActionForm untuk menangani HTML Form.

– Tiles untuk memudahkan mengatur layout.

B. B. Framework alternatifFramework alternatif

– Turbine

– Spring

– WebWork

III. III. Menggunakan StrutsMenggunakan Struts

A. A. Instalasi Instalasi

Untuk menjalankan Struts, terlebih dahulu kita harus memiliki instalasi Tomcatyang telah berjalan dengan sukses. Setelah itu, berikut adalah langkah­langkahinstalasi Struts : 

– Download Struts dari http://jakarta.apache.org

– Extract Struts

– Instal  struts­blank.war  dan  struts­documentation.war  ke   folder

©Endy Muhardin <endy at artivisi dot com> halaman 2

Page 5: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

[TOMCAT]/webapps

– Browse ke aplikasi web yang telah terinstal. 

Misalnya http://localhost:9090/struts­blank

Instalasi yang sukses akan menampilkan tampilan sebagai berikut: 

Dokumentasi yang disertakan juga bisa ditampilkan melalui url:

http://localhost:9090/struts­documentation 

©Endy Muhardin <endy at artivisi dot com> halaman 3

Page 6: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

B. B. Hello WorldHello World

Kita akan memindahkan Aplikasi Diskon yang telah dibuat agar bisa diaksesmelalui   website.   Untuk   itu,   rename  [TOMCAT]/webapps/struts­blankmenjadi  [TOMCAT]/webapps/diskon.   Kemudian,   kita   akan   menampilkanHelloWorld sebagai halaman default. Berikut langkah­langkahnya: 

1. Stop Tomcat

2. Rename   folder  [TOMCAT]/webapps/struts­blank  menjadi  [TOMCAT]/webapps/diskon

3. Hapus file [TOMCAT]/webapps/struts­blank.war 

4. Buat file welcome.jsp dengan isi sebagai berikut: 

<html>

  <head>

    <title>Hello World</title>

  </head>

  <body>

      Hello World !!!

  </body>

</html>

5. Edit  [TOMCAT]/webapps/diskon/WEB­INF/struts­config.xml  padabaris yang mendefinisikan action dan action­mappings menjadi: 

©Endy Muhardin <endy at artivisi dot com> halaman 4

Page 7: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

<action path="/Welcome" forward="/welcome.jsp"/>

6. Start   Tomcat   dan   browse   ke  http://localhost:9090/diskon/.  Jika   langkah­langkah   tersebut   dilakukan   dengan   benar,   akan   muncul   tampilan   sebagaiberikut:

C. C. Arsitektur StrutsArsitektur Struts

Struts, sesuai dengan tujuan utamanya mengimplementasikan pattern ModelView Controller, didesain dengan tiga komponen utama : 

– Action sebagai Controller

– JSP dan kumpulan Taglibs sebagai View

– Form Bean sebagai Model

Ketiganya dihubungkan dengan menggunakan konfigurasi di struts­config.xml

D. D. Aplikasi SederhanaAplikasi Sederhana

Pada   contoh   berikut,   kita   akan   membuat   aplikasi   guestbook   sederhana.Aplikasi   tersebut   akan   menampilkan   sebuah   form   untuk   mengisi   komentar.Pengunjung akan mengisi komentar dan identitasnya, untuk kemudian disimpandalam database.

Berikut adalah screen­screen yang akan ditampilkan: 

1. Form Komentar (comment.jsp)

2. Tampilan terima kasih atas pengisian guestbook (thanks.jsp)

3. Form Error (error.jsp)

4. Tampilan seluruh komentar yang ada (guestbook.jsp)

Berikut adalah kode program untuk tampilan.

©Endy Muhardin <endy at artivisi dot com> halaman 5

Page 8: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

comment.jsp

<%@ taglib uri="/tags/struts­bean" prefix="bean" %>

<%@ taglib uri="/tags/struts­html" prefix="html" %>

<%@ taglib uri="/tags/struts­logic" prefix="logic" %>

<html:html locale="true">

  <head>

    <title>Guestbook</title>

  </head>

  <body>

    Silahkan isi buku tamu dan berikan komentar Anda

  <br>

  <html:form action="InputComment">

  <table border="1">

    <tbody>

      <tr>

        <td>Nama</td>

        <td><html:text property="name"/></td>

      </tr>

      <tr>

        <td>Email</td>

        <td><html:text property="email"/></td>

      </tr>

      <tr>

        <td rowSpan="1" colspan="2">Komentar<br>

        <html:textarea property="comment"/><br>

        <html:submit value="Ok"/>

        </td>

      </tr>

    </tbody>

  </table>

  </html:form>

  </body>

</html:html>

Untuk   menampung   data   isian   dari   form­form   di   atas,   kita   akan   membuatJavaBeans, yaitu CommentBean, dengan kode program sebagai berikut:

©Endy Muhardin <endy at artivisi dot com> halaman 6

Page 9: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

package bukutamu.beans;

import org.apache.struts.action.ActionForm;

public class CommentBean extends ActionForm {

  private String name;

  private String email;

  private String comment;

  

  public CommentBean(){  }  

  public String getComment() {

    return comment;

  }  

  public void setComment(String comment) {

    this.comment = comment;

  }  

  // ­­ getter dan setter lainnya ­­ //

}

Data   JavaBeans   ini   –untuk   menyederhanakan   masalah–   akan   disimpandalam sebuah List yang disimpan dalam memori. Harap diperhatikan bahwadengan pendekatan ini, data yang tersimpan akan hilang pada saat Tomcatdishutdown.

List   yang   akan   digunakan   untuk   menyimpan   diinisialisasi   oleh   GuestBookservlet. 

Berikut adalah kode program untuk GuestBookServlet

©Endy Muhardin <endy at artivisi dot com> halaman 7

Page 10: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

package bukutamu.beans;

import java.util.*;

import javax.servlet.http.HttpServlet;

/*

Servlet definition di web.xml

Mapping tidak dibutuhkan, karena tidak akan diakses lewat URL

<servlet>

  <servlet­name>GuestBookServlet</servlet­name>

  <servlet­class>bukutamu.beans.GuestBookServlet</servlet­class>

  <load­on­startup>2</load­on­startup>

</servlet>

*/

public class GuestBookServlet extends HttpServlet {

  public void init(){

    List gb = Collections.synchronizedList(new ArrayList());

    getServletContext().setAttribute("guestbook", gb);

  }

}

Selanjutnya,   form  comment.jsp  disambut  oleh  CommentAction,   turunan  dariclass Action yang disediakan oleh Struts. Berikut adalah kode program dari classCommentAction.

©Endy Muhardin <endy at artivisi dot com> halaman 8

Page 11: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

package bukutamu.actions;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.*;

import bukutamu.beans.CommentBean;

public class CommentAction extends Action {

  public ActionForward execute (ActionMapping map, 

                                ActionForm bean, 

                                HttpServletRequest req, 

                                HttpServletResponse res) {

    CommentBean data = (CommentBean) bean;

    List guestbook = (List) req.getSession()

                               .getServletContext()

                               .getAttribute("guestbook");

    guestbook.add(data);

    return map.findForward("success");

  }

}

Perhatikan  bahwa kita   tidak  melakukan  validasi  apa­apa.  Semua  input  dariuser   diasumsikan   bersih   dan   rapi.   Validasi   akan   dibahas   pada   chapterselanjutnya.

Setelah   CommentAction   dieksekusi,   user   akan   diarahkan   ke   halamanguestbook.jsp. Halaman ini menampilkan semua komentar yang telah terkumpuldi dalam sistem. Berikut adalah kode program guestbook.jsp

©Endy Muhardin <endy at artivisi dot com> halaman 9

Page 12: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

<%@ taglib uri="/tags/struts­bean" prefix="bean" %>

<%@ taglib uri="/tags/struts­html" prefix="html" %>

<%@ taglib uri="/tags/struts­logic" prefix="logic" %>

<html:html locale="true">

  <head>

    <title>Buku Tamu</title>

  </head>

  <body>

  <h1>Daftar Komentar yang sudah kami kumpulkan</h1>

  Anda ingin <a href="comment.jsp">menambahkan komentar</a> ???

 <logic:iterate id="comment" type="bukutamu.beans.CommentBean" name="guestbook">

  <table border=1>

  <tbody>  

    <tr>

      <td>${comment.name}</td>

      <td>${comment.email}</td>      

    </tr>

    <tr>

      <td rowSpan="1" colspan="2">${comment.comment}</td>

    </tr>

  </tbody>

</table>

  </logic:iterate>

  </body>

</html:html>

Dengan demikian, selesailah satu aliran proses dengan Struts.  Bagan aliranproses dapat dijelaskan dengan bagan sebagai berikut: 

©Endy Muhardin <endy at artivisi dot com> halaman 10

Page 13: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

Seluruh rangkaian proses tersebut diatur oleh file konfigurasi Struts di struts­config.xml. Berikut konfigurasi dalam struts­config.xml

<?xml version="1.0" encoding="ISO­8859­1" ?>

<!DOCTYPE struts­config PUBLIC

          "­//Apache Software Foundation//DTD Struts Configuration 1.2//EN"

          "http://jakarta.apache.org/struts/dtds/struts­config_1_2.dtd">

<struts­config>

    <form­beans>

        <form­bean name="comment" type="bukutamu.beans.CommentBean"/>

    </form­beans>

    <global­exceptions>

    </global­exceptions>

    <global­forwards>

        <forward name="welcome" path="/Welcome.do"/>

    </global­forwards>

    <action­mappings>

        <action path="/Welcome" forward="/pages/Welcome.jsp"/>

        <action

            path="/InputComment"

            type="bukutamu.actions.CommentAction"

            name="comment"

            scope="request"

            validate="false"

            input="/pages/comment.jsp">

           <forward name="success" path="/pages/guestbook.jsp" redirect="true"/>

         </action>

    </action­mappings>    

    <message­resources parameter="MessageResources" />

</struts­config>

Perhatikan konfigurasi : 

1. Form Bean (CommentBean)

2. Action (Comment Action)

3. Forwarding (guestbook.jsp)

©Endy Muhardin <endy at artivisi dot com> halaman 11

Page 14: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

IV. IV. Validasi InputValidasi InputDengan menggunakan Struts, validasi user input dapat dilakukan secara client­

side (menggunakan JavaScript) maupun secara server­side (dengan melakukanvalidasi   dengan   kode   program   di   Action).   Pada   tutorial   berikut,   kita   akanmenambahkan validasi client­side pada form isi komentar kita (comment.jsp). 

Langkah­langkah yang harus dilakukan adalah: 

1. Mendaftarkan HTML form berikut aturan validasinya di validation.xml

2. Menambah kode untuk validasi di HTML Form (comment.jsp)

Aturan validasi yang akan diberlakukan adalah:

● Kolom nama tidak boleh kosong

● Kolom email tidak boleh kosong

● Email harus mengikuti format standar (misal: [email protected]

Berikut adalah tambahan pada validation.xml

        <form name="comment">

          <field property="name" depends="required">   

            <msg name="required" key="name.required"/>

          </field>

          <field property="email" depends="required,email">   

            <msg name="required" key="email.required"/>

            <msg name="email" key="email.malformed"/>

          </field>

        </form>

Kode di atas diletakkan di dalam blok formset dalam validation.xml

Penjelasannya adalah sebagai berikut:

● form name : nama form, harus sama dengan deklarasi di comment.jsp

● field   property   :   nama   field   yang   akan   divalidasi.   Aturan   validasi   yangdiberlakukan disebutkan dalam atribut depends. Jadi, untuk form di atas, fieldname memberlakukan aturan required, sedangkan field email memberlakukanaturan required dan email.

● msg : pesan error untuk aturan name yang dilanggar. Pesan error diambil dari

©Endy Muhardin <endy at artivisi dot com> halaman 12

Page 15: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

MessageResources.properties.   Jadi,   bila   aturan   required   dilanggar,   akanmuncul pesan name.required

Berbagai kode JavaScript untuk aturan required dan email sudah disediakanoleh Struts.  Bagi  yang  tertarik  dapat  melihat  dan  (bila  diperlukan)  mengubahisinya,  dalam  file  validator­rules.xml.  Pada Struts  1.1,  kode  JavaScript  ditulisdalam   validator­rules.xml.   Mulai   Struts   1.2,   kode   JavaScript   tersebut   sudahdimasukkan ke dalam paket commons­validator.

Sedangkan kode untuk mengaktifkan validasi pada HTML form adalah sebagaiberikut (comment.jsp) :

<html:form action="InputComment" onsubmit="return validateComment(this)">

<!­­ kode form yang lainnya tidak berubah ­­> 

</html:form>

<html:javascript formName="comment"/>

V. V. LayoutLayoutStruts memiliki fasilitas khusus untuk menangani layout yang dinamakan Tiles.

Konsepnya adalah memisahkan bagian­bagian yang digunakan berulang­ulangke dalam file  tersendiri  sehingga bisa digunakan berkali­kali.  Langkah­langkahuntuk mengaplikasikan Tiles adalah sebagai berikut:

1. Tentukan desain yang akan digunakan

2. Pisahkan bagian­bagian yang berulang ke dalam file tersendiri

3. Buat file JSP yang mendefinisikan layout

4. Buat file JSP yang akan mengisi layout

5. Satukan semuanya dalam file konfigurasi

Berikut adalah tampilan halaman yang akan dibuat : 

Dari  gambar  di atas,   terlihat  bahwa ada bagian­bagian yang berulang, yaituHeader, Footer, dan Menu. Bagian­bagian tersebut akan kita pisahkan menjadiheader.jsp, footer.jsp, dan menu.jsp, sebagai berikut : 

©Endy Muhardin <endy at artivisi dot com> halaman 13

Page 16: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

● header.jsp

Apache Struts Tile Tutorial

● footer.jsp

<center>

Copyright &copy; 2005 Endy Muhardin &lt;endy at artivisi dot com&gt;

</center>

● menu.jsp

<a href="architecture.html">Arsitektur Struts</a><br />

<a href="formbeans.html">FormBean</a>  <br />

<a href="action.html">Action</a><br />

<a href="mapping.html">Mapping</a><br />

<a href="tile.html">Tiles</a><br />

<a href="validation.html">Validasi</a><br />

● content.jsp

©Endy Muhardin <endy at artivisi dot com> halaman 14

Page 17: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

Berikut adalah langkah­langkah menggunakan Tile: 

<ol>

  <li>Tentukan layout desain</li>

  <li>Pisahkan bagian­bagian yang berulang ke dalam file tersendiri</li>

  <li>Buat kode JSP yang mendefinisikan Layout</li>

  <li>Buat kode JSP untuk mengisi layout</li>

  <li>Buat konfigurasi di definisi tile</li>

</ol>

Kemudian, buat file JSP yang mendefinisikan layout, misalnya layout.jsp :

<%@ taglib uri=”tags/struts­tiles” prefix=”tiles”%>

<html>

  <head>

    <title><tiles:getAsString name=”title”/></title>    

    <link rel="stylesheet" href="sitestyle.css" type="text/css"  />    

  </head>

  <body>

  <div id="Header"><tiles:insert attribute=”header”/></div>  

  <div id="Menu"><tiles:insert attribute=”menu”/></div>  

  <div id="Content"><tiles:insert attribute=”content”/></div>  

  <div id="Footer"><tiles:insert attribute=”footer”/></div>

  </body>

</html>

Terakhir adalah file yang menyatukan semua bagian tersebut. Inilah file yangnantinya akan diakses user, misalnya kita beri nama tutorial.jsp : 

<%@ taglib uri="/tags/struts­tiles" prefix="tiles" %> 

<tiles:insert page="/tiles/layout.jsp"> 

  <tiles:put name="title" value="Belajar Tiles dengan Struts"/> 

  <tiles:put name="header" value="/tiles/header.jsp"/> 

  <tiles:put name="menu" value="/tiles/menu.jsp"/> 

  <tiles:put name="body" value="/tiles/content.jsp"/> 

  <tiles:put name="footer" value="/tiles/footer.jsp"/> 

</tiles:insert>

VI. VI. PenutupPenutupDemikianlah   tulisan   singkat   tentang   penggunaan   framework   Struts   untuk

membangun   aplikasi   web   secara   lebih   produktif.   Tetapi   perlu   diingat   bahwa

©Endy Muhardin <endy at artivisi dot com> halaman 15

Page 18: Endy Muhardin - Struts (ID)

Java TrainingStruts Web Framework

setiap framework memiliki kurva belajar, sehingga sebelum produktif, seseorangharus bingung dulu. Ini merupakan hal yang wajar, sebaiknya dianggap sebagaiharga yang harus dibayar untuk pengembangan diri. 

©Endy Muhardin <endy at artivisi dot com> halaman 16