suhe arie's pages

Programmer juga manusia

Pengenalan Web Framework: Apache Struts

Karena ini adalah artikel pertama saya tentang framework, ada baiknya kita tahu dulu apakah yang disebut framework, dan mengapa kita memerlukannya. Ok, secara singkat dapat dikatakan bahwa framework biasanya terdiri atas:
1. Library, adalah kumpulan kode siap pakai.
2. Pattern, pola kerjanya.
3. Rule. Misalnya file xxx harus diletakkan di direktori abc, buat file xml dengan nama blablabla.xml, letakkan di folder xyz.

Tujuan framework adalah untuk memudahkan programmer untuk melakukan pekerjaan yang umum dan dilakukan secara berulang-ulang. Dengan adanya framework, hal-hal tersebut menjadi lebih mudah karena framework sudah menyediakan fitur-fitur tersebut, sehingga waktu pengerjaan diharapkan bisa menjadi lebih cepat dan memperoleh hasil yang lebih baik. Keuntungan lain dari penggunaan framework adalah programming style dari tim developer bisa lebih seragam (konsisten), karena framework sudah menyediakan pattern yang sudah terbukti efektif untuk mendevelop aplikasi.
Kelemahan penggunaan framework adalah perlunya waktu untuk mempelajari cara penggunaan framework itu sendiri. Jika waktu tersebut masih jauh lebih pendek daripada waktu pengerjaan proyeknya, maka menggunakan framework akan memberikan manfaat yang signifikan.

Pernah merasa melakukan sesuatu yang sama, berulang2 pada setiap project ? Misalnya, untuk bikin aplikasi web, kita sering bekerja untuk:
1. Validasi input dari html form.
2. Mengambil semua parameter yang disertakan dalam http request, kemudian mengubahnya menjadi java object.
3. Membuat servlet untuk melakukan complex processing.
4. Melakukan manipulasi database.
5. Setelah processing selesai, forward control ke halaman JSP.

Jika jawabannya adalah YA, maka Anda bisa menggunakan web framework untuk mengerjakan hal-hal tersebut dengan lebih mudah.

Struts, mungkin Anda sering dengar, sering baca di forum, artikel atau lowongan pekerjaan. Bagi yang belum tahu, Struts adalah web development framework yang berada di bawah payung Apache Software Foundation. Struts menggunakan pattern Model-View-Controller (MVC) dengan memanfaatkan Java Bean (Model), Servlet (Controller) dan JSP (View). Sekilas pengenalan tentang Servlet dan JSP bisa dibaca di sini.

Berikut adalah gambar yang mendeskripsikan bagaimana struts framework bekerja dalam aplikasi web:

Pada saat web container mendeploy aplikasi, ActionServlet akan membaca file struts-config.xml yang berisi semua konfigurasi yang diperlukan untuk menjalankan sistem ini. Ketika ada request dari browser, langkah-langkah berikut akan dijalankan:

  1. Request data akan secara otomatis dibungkus ke dalam sebuah object ActionForm.
  2. ActionServlet akan mencari controller (Action class) yang sesuai dengan path yang direquest oleh browser.
  3. Action class memiliki satu method utama dengan nama execute, yang akan dijalankan untuk melayani request. Semua processing yang dibutuhkan seperti akses database, perhitungan, dan lain lain dijalankan di dalam method ini. Di sini object model dimasukkan ke dalam variable HTTP request atau HTTP session, yang selanjutnya akan dipanggil dari halaman JSP.
  4. Setelah processing selesai, method execute tersebut akan mengembalikan return value yang akan menunjukkan status dari processing.
  5. Selanjutnya, status dari Action class tersebut akan digunakan untuk menentukan halaman JSP mana yang akan ditampilkan.
  6. JSP dievaluasi, object model dirender ke dalam halaman HTML, dan response dikirimkan ke browser.

Lagi-lagi saya akan menggunakan skenario tentang kalkulator, kali ini dengan mengimplementasikan Struts framework. Saya akan menggunakan Eclipse for Java EE Developer sebagai IDE dan Apache Tomcat 6 sebagai web server/web container-nya. Jika Anda belum terbiasa menggunakan Eclipse, ada baiknya untuk membaca artikel ini terlebih dahulu. Ok, mari kita mulai:

1. Download Struts 1 di http://struts.apache.org/download.cgi
Saya menggunakan Struts versi 1.3.8. Silahkan download file struts-1.3.8-all.zip. Ekstrak file tersebut ke komputer Anda. Anda akan mendapatkan folder dengan nama apps, dan di dalamnya terdapat file struts-blank-1.3.8.war yang akan kita pergunakan sebagai start-up dari aplikasi yang akan kita buat. Ekstrak file ini juga. Direktori tempat Anda mengekstrak file tersebut akan kita sebut sebagai STRUTS_HOME.

2. Setup eclipse project
Buat web project di eclipse. Di control box project explorer, klik kanan, pilih New -> Project.

3. “Masukkan” Struts ke dalam project
Di eclipse, expand tree di project TestStruts, klik ganda di item Deployment Descriptor, maka eclipse akan membuka file web.xml di web project kita. Buka file STRUTS_HOME/WEB-INF/web.xml dengan notepad, copy deklarasi servlet dan servlet-mapping, pindahkan ke web.xml yang ada di eclipse sehingga menjadi seperti berikut:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>TestStruts</display-name>

  <!-- Standard Action Servlet Configuration -->
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
 </servlet>

  <!-- Standard Action Servlet Mapping -->
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

Masuk ke direktori STRUTS_HOME/WEB-INF, copy direktori classes, direktori lib, file struts-config.xml, file validation.xml, paste ke eclipse di TestStruts/WebContent/WEB-INF.
Masuk ke direktori STRUTS_HOME, copy direktori pages dan file index.jsp ke eclipse di TestStruts/WebContent.
Hasilnya tampak seperti berikut:

4. Test konfigurasi
Di control box server, klik kanan di server tomcat, pilih Add and Remove Projects. Masukkan project TestStruts ke server ini.

Klik kanan di server tomcat, pilih Start.

Untuk melakukan test, buka browser, arahkan ke http://localhost:8080/TestStruts. Jika Anda mendapatkan halaman seperti ini, artinya konfigurasi project Struts kita sudah benar.

5. Tambahkan XML declaration
Konfigurasi utama Struts ada di file struts-config.xml. Eclipse menyediakan XML editor yang cukup canggih, namun untuk memanfaatkan editor ini secara maksimal, termasuk fitur auto-complete, shema validation, kita harus me-register file DTD nya ke dalam eclipse. Masuk ke direktori STRUTS_HOME/WEB-INF/lib, buka file struts-core-1.3.8.jar dengan winrar, ektrak file struts-config_1_3.dtd.

Di Eclipse, klik menu Window -> Perferences, pilih tree item XML -> XML Catalog.

Di kotak sebelah kanan, pilih User Specified Entries, kemudian klik tombol Add.

Ok, sekarang perlengkapan sudah siap, kita bisa mulai coding dengan struts.

6. File form input: index.jsp
File index.jsp ini akan kita isi dengan HTML form yang berisi parameter-parameter perhitungan. Form tersebut akan disubmit ke URL calculate.do.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Java EE Calculator</title>
</head>
<body>
<h2>Struts Calculator</h2>
<form action='calculate.do' method='POST'>
            Operation:
            <select name="operation">
                <option selected value="ADD">ADD</option>
                <option value="SUBSTRACT">SUBSTRACT</option>
                <option value="MULTIPLY">MULTIPLY</option>
                <option value="DIVIDE">DIVIDE</option>
            </select>

            Operand 1:<input type="text" name="oper1" value="0" />

            Operand 2:<input type="text" name="oper2" value="0" />

            <input type="submit" value="Calculate" name="Calculate" />
        </form>
</body>
</html>

7. Class ActionForm (CalculatorForm)
Ini adalah class yang akan kita gunakan untuk membungkus parameter-parameter yang disertakan dalam HTTP request. Class ini harus meng-extend class ActionForm, dan mengikuti aturan Java Bean (zero argument constructor, class property, dan getter-setter untuk masing-masing property).

package suhearie.blog.struts1;

import org.apache.struts.action.ActionForm;

public class CalculatorForm extends ActionForm {

	private String operation;

	private int oper1;

	private int oper2;

	public String getOperation() {
		return operation;
	}

	public void setOperation(String operation) {
		this.operation = operation;
	}

	public int getOper1() {
		return oper1;
	}

	public void setOper1(int oper1) {
		this.oper1 = oper1;
	}

	public int getOper2() {
		return oper2;
	}

	public void setOper2(int oper2) {
		this.oper2 = oper2;
	}

}

8. Class Action (CalculatorAction)
Class CalculatorAction ini adalah class yang bertugas untuk menangani request, melakukan processing, membentuk object hasil processing, menaruhnya sebagai atribut di object HTTP request, dan pada akhirnya menentukan status dari processing.

package suhearie.blog.struts1;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class CalculatorAction extends Action {

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response) {
		// cast ActionForm to CalculatorForm
		CalculatorForm calForm = (CalculatorForm) form;
		String operation = calForm.getOperation();
		int oper1 = calForm.getOper1();
		int oper2 = calForm.getOper2();

		// we don't allow negative operands
		if (calForm.getOper1() < 0 || calForm.getOper2() < 0) {
			return mapping.findForward("failed");
		}
		else {
			int result = 0;
		        if (operation.equals("ADD")) {
		        	result = oper1+oper2;;
		        }
		        else if (operation.equals("SUBSTRACT")) {
        	        result = oper1-oper2;
		        }
		        else if (operation.equals("MULTIPLY")) {
		        	result = oper1*oper2;
		        }
		        else if (operation.equals("DIVIDE")) {
        	        result = oper1/oper2;
		        }
		        else {
		        	return mapping.findForward("failed");
		        }
		        request.setAttribute("result", result);
			return mapping.findForward("success");
        	}
	}

}
&#91;/sourcecode&#93;
<p style="text-align:justify;">Di contoh ini, kita tidak memperbolehkan user untuk memasukkan angka negatif sebagai operand.</p>

<p style="text-align:justify;"><strong>9. Edit file struts-config.xml</strong>
Ini adalah bagian penting yang akan menyatukan halaman JSP dan class-class yang sudah kita buat. Di eclipse, kita bisa menggunakan XML editor untuk mengedit file ini. Karena kita sudah memasukkan DTD dari file struts-config.xml ini, kita bisa mengedit dengan sangat mudah karena eclipse akan secara otomatis memberikan bantuan (suggestion) tentang elemen-elemen XML yang bisa kita tambahkan ke dokumen tersebut, sesuai dengan isi DTD. Misalnya, untuk menambahkan form-bean baru, tinggal klik kanan di element form-beans, kemudian pilih Add Child -&gt; form-bean.

<a href="https://suhearie.files.wordpress.com/2008/10/eclipse-xmleditor.jpg"><img class="alignnone size-full wp-image-308" title="eclipse-xmleditor" src="https://suhearie.files.wordpress.com/2008/10/eclipse-xmleditor.jpg" alt="" width="645" height="152" /></a>
<p style="text-align:justify;">Elemen yang harus ditambahkan di file struts-config.xml adalah form-bean dan action. Berikut adalah screenshotnya:</p>

<a href="https://suhearie.files.wordpress.com/2008/10/struts-config1.jpg"><img class="alignnone size-full wp-image-309" title="struts-config1" src="https://suhearie.files.wordpress.com/2008/10/struts-config1.jpg" alt="" width="606" height="285" /></a>

Ini adalah file xml nya:


<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">
<struts-config>

    <form-beans>
		<form-bean name="calculatorForm" type="suhearie.blog.struts1.CalculatorForm"></form-bean>
    </form-beans>

    <global-exceptions>
    </global-exceptions>

    <global-forwards>
    </global-forwards>

    <action-mappings>
		<action path="/calculate" name="calculatorForm"
    	type="suhearie.blog.struts1.CalculatorAction" scope="request">
			<forward name="success" path="/success.jsp"></forward>
			<forward name="failed" path="/failed.jsp"></forward>
		</action>
    </action-mappings>

    <message-resources parameter="MessageResources" />
<plug-in className="org.apache.struts.tiles.TilesPlugin" >

      <set-property property="definitions-config"
                       value="/WEB-INF/tiles-defs.xml" />
      <set-property property="moduleAware" value="true" />
    </plug-in>
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property
        property="pathnames"
        value="/org/apache/struts/validator/validator-rules.xml,
               /WEB-INF/validation.xml"/>
  </plug-in>

</struts-config>

10. Deploy dan test

Operasi sukses:

Operasi gagal:

Advertisements

October 5, 2008 - Posted by | Java, Java Enterprise | , , ,

13 Comments »

  1. Mas Hendra, saya baru saja presentasi Struts dlm mata kuliah S2 yang sedang saya ambil. Terus terang, bisa dibilang gagal sih krn harus diulang tanggal 7 Maret nanti.
    Penyebab kegagalan presentasi saya adalah saat membuat sample program tidak menggunakan fasilitas framework struts. Mas, terus terang saya tertarik program calculator di atas, terutama saat muncul pesan kesalahan “Sorry .. bla bla bla”. Bisa minta source-nya (atau bisa diambil dari situs mana ya?)

    Comment by rahmadya | March 3, 2009 | Reply

    • Sorry baru bales.
      Program di atas cuma menggunakan 3 file jsp (index.jsp, success.jsp dan failed.jsp) dan 2 class (calculatorForm dan CalculatorAction).
      Sepertinya semuanya sudah saya cantumkan source codenya, kecuali success.jsp dan failed.jsp.
      Itu sebenarnya halaman JSP biasa saja, anda bisa buat sendiri. Nanti kalau saya sempat akan saya tambahkan file success.jsp dan failed.jsp nya.

      Comment by suhearie | July 6, 2010 | Reply

  2. HTTP Status 404 – /TestStruts/calculate.do
    type Status report

    message /TestStruts/calculate.do

    description The requested resource (/TestStruts/calculate.do) is not available.

    Program can not compiled to “calculate.do”. Please tell me why.

    Comment by Ha Nguyen | July 5, 2010 | Reply

    • The Java source should be compiled to normal class (with file extension dot class). The mapping from URL “calculate.do” to the real class name “suhearie.blog.struts1.CalculatorAction” is done by configuring the strutus-config.xml. See the step 9 in the tutorial. Another thing to remember is, you need to configure the web.xml file correctly, as shown in the step 3 in the tutorial.

      Comment by suhearie | July 6, 2010 | Reply

      • Thanks!
        I’ve just research about jsp, servlet and struts. Can you share me some ebooks about them?

        Comment by Ha Nguyen | July 6, 2010

  3. Hi..
    Saya benar2 newbi dgn struts ini.
    1. Saya mencoba semua langkah Anda ini dgn benar2 urut dan diulang brp kali. Namun hasilnya sperti ini :
    “HTTP Status 404 – Servlet action is not available”.
    2. Di console saya muncul exception bahwa tidak dtemukan /WEB-INF/tiles-defs.xml. Dan dari langkah2 Anda diatas memang tidak ada langkah tentang mengcopy-kan file ini.
    Jadi seharusnya bagaimana?

    Comment by rey | August 5, 2010 | Reply

    • Tiles adalah salah satu fitur tambahan di Struts, dan saya tidak menggunakan tiles. Kalau Anda menggunakan Struts 1.3.8 seperti yang saya pakai, mungkin ada yang salah di setting project di eclipse nya. Mungkin bisa dicari disini:
      http://struts.apache.org/1.x/struts-tiles/index.html

      Comment by suhearie | October 23, 2010 | Reply

  4. Hello, pak. Saya sedang coba2 struts. Kok saya baru di step 4, yg jalanin localhost:8080/TestStruts malah error.
    Pesan errornya begini :

    HTTP Status 404 – /TestStruts/pages/Welcome.jsp

    type Status report

    message /TestStruts/pages/Welcome.jsp

    description The requested resource (/TestStruts/pages/Welcome.jsp) is not available.

    Saya pakai Struts 1.3.10 & Tomcatnya yg 7.0.2. Kira-kira salahnya dimana ya? Soalnya saya udah ikutin step2nya dari awal.

    1 lagi, pak. Sebelumnya saya coba pake Struts 2.2.1. Ternyata di STRUTS_HOME/WEB-INF, isi web.xml nya beda banget sama yang anda jelaskan di atas. Apa bisa kita pakai web.xml yang baru ini untuk tutorial anda??

    Thanks untuk perhatiannya.

    Comment by joe | December 21, 2010 | Reply

    • Coba cek apa file Welcome.jsp nya ada di folder WebContent/pages. Itu file standard nya struts yang harusnya langsung jalan tanpa perlu modifikasi.
      Konfigurasi Struts 2.x berbeda dengan Struts 1.x karena cara kerjanya juga sedikit beda. Saya belum pernah coba Struts 2 pake web.xml yang di atas, sorry ga bisa comment.

      Comment by suhearie | September 19, 2011 | Reply

  5. bardzo ciekawe, dzieki

    Comment by Demssuego | January 30, 2011 | Reply

    • What language are you talking in? 🙂

      Comment by suhearie | September 19, 2011 | Reply

  6. […] Sumber : https://suhearie.wordpress.com/2008/10/05/pengenalan-web-framework-apache-struts/ […]

    Pingback by Tutorial Netbeans: #3 Membuat Web Dengan Struts 1.3 dan Framework Hibernate « Blog S3m00t | June 6, 2013 | Reply

  7. Terima Kasih Kakak atas postingannya 🙂 Sangat membantu saya dalam menyelesaikan tugas praktikum 🙂

    Comment by Trisna Yansyah | April 21, 2014 | Reply


Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: