Spring Web MVC – Quick Start with Eclipse (Episode 2)


Persiapan:

  1. Tau cara Start New (Dynamic Web) Project menggunakan Eclipse. Jika belum tahu silahkan baca artikel ini
  2. Sudah membaca artikel Spring Web MVC – Quick Start with Eclipse (Episode 1). Jika belum, silahkan baca artikel ini

Apakah anda sudah mengerti alur dari program yang sudah anda buat pada Episode 1? Jika belum, akan saya coba jelaskan agak detail:

  1. Anda (client) merequest alamat http://localhost:8080/firstProgram/hello.asik
  2. Web Server akan membaca settingan web.xml, disitu kita deklarasikan kalau ada request yang berakhiran dengan .asik maka akan diproses oleh Class org.springframework.web.servlet.DispatcherServlet, dengan settingan yang dibuat ada di tjong-servlet.xml
  3. Lalu si Web Server akan membaca settingan lagi di tjong-servlet.xml, disitu kita deklarasikan, jika ada yang merequest page “/hello.asik” akan diatur oleh Controller class=”com.firstProgram.web.HelloController
  4. Web Server akan membaca class com.firstProgram.web.HelloController, pada class HelloController, kita sudah mendeklarasikan untuk menampilkan file pages/hello.jsp. Maka Web Server akan menampilkan pages/hello.jsp kepada Anda (client).

Coba anda perhatikan, jika anda ingin membuat banyak page, pasti akan sangat merepotkan jika harus mendeklarasikan satu persatu file yang anda buat ke dalam tjong-servlet.xml (Khusus untuk controler, anda harus mendeklarasikan satu persatu Controller untuk page yang anda buat). Untuk mengatasi hal tersebut – Spring telah mempersiapkan beberapa optional untuk mengatur konfigurasi Controller dan View – silahkan baca (http://static.springsource.org/spring/docs/2.5.x/reference/view.html) jika ingin mengetahui lebih lanjut. Untuk contoh pada artikel ini saya akan mencoba menggunakan class org.springframework.web.servlet.view.ResourceBundleViewResolver.

Langsung ke contoh saja, silahkan ikuti langkah2 berikut:

  1. Tambahkan javax.servlet-jstl.jar ke folder lib. link bisa diambil di sini.
  2. Edit tjong-servlet.xml
    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
    <!-- the application context definition for the springapp DispatcherServlet -->
    
    <!-- Contoh Pada Episode 1 -->
    <!-- <bean name="/hello.asik" /> -->
    
    <!-- Contoh Pada Episode 2 -->
    <context:component-scan base-package="com.firstProgram.web"/>
    
    <!--Kesalahan pada contoh Gery, see the comment below-->
    <!--<bean id="viewResolver"
    p:basename="views"/>-->
    <bean id="viewResolver"
    p:basename="view"/>
    
    </beans>
    

    *edited 21 March 2011: thanks to Gery

  3. buat Source Folder (selanjutnya untuk file-file configurasi sebaiknya disatukan saja di dalam folder ini) – pada saat build akan di-compile ke dalam Classpath. Caranya klik kanan nama Project – New – Source Folder. Beri nama resources
  4. buat file view.propertiesdalam folder resources yang baru saja anda buat.
    pages/hello.url = /WEB-INF/pages/hello.jsp
    pages/hello.class= org.springframework.web.servlet.view.JstlView
    
  5. pindahkan folder pages menjadi di dalam folder WEB-INF. (Untuk alas an keamanan).
  6. Edit HelloController.java
    package com.firstProgram.web;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    @Controller
    public class HelloController{
    
    	@RequestMapping (value="/hello.asik", method=RequestMethod.GET)
        public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            return new ModelAndView("pages/hello");
        }
    }
    
  7. Testing aplikasi anda. http://localhost:8080/firstProgram/hello.asik. Seharusnya tidak ada perubahan pada tampilan nya, yang berubah hany konfigurasi di belakang layarnya saja.
Advertisement

Spring Web MVC – Quick Start with Eclipse (Episode 1)


Sebelum anda mulai mengikuti tutorial di bawah, ada beberapa hal yang harus dipersiapkan:

  1. Tau cara Start New (Dynamic Web) Project menggunakan Eclipse. Jika belum tahu silahkan baca artikel ini.
  2. Download beberapa jar yang dibutuhkan:
  • spring-2.5.6.jar (untuk contoh ini saya masih menggunakan versi 2.5.6) – download disini
  • spring-webmvc-2.5.6.jar, download disini.
  • commons-logging.jar. download disini.

Ketiga jar diatas adalah minimal untuk memulai membuat Web menggunakan Spring MVC. Tutorial lainnya menggunakan Spring MVC dapat dengan mudah anda jumpai di internet, untuk tutorial yang saya buat ini – saya usahakan mudah dimengerti untuk pemula yang belum pernah menggunakan framework dalam pemrograman nya.

Agar pembelajaran lebih mudah – saya coba tampilkan dulu hasil akhir yang diinginkan. Perhatikan gambar di bawah:

To the point saja. Silahkan ikuti langkah-langkah di bawah:

  1. Jalankan aplikasi Eclipse anda. (Pada contoh ini saya menggunakan Eclipse 3.4.0)
  2. Buat New Project dengan nama firstProgram
  3. Buat package com.firstProgram.web (untuk selanjutnya Class Controller akan dimasukkan ke dalam package ini.)
  4. Edit web.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4"
     xmlns="http://java.sun.com/xml/ns/j2ee"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    
     <display-name>firstProgram</display-name>
    
     <servlet>
     <servlet-name>tjong</servlet-name>
     <servlet-class>
     org.springframework.web.servlet.DispatcherServlet
     </servlet-class>
     <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
     <servlet-name>tjong</servlet-name>
     <url-pattern>*.asik</url-pattern>
     </servlet-mapping>
    
     <welcome-file-list>
     <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
    </web-app>
    
  5. Copy kan 3 buah jar yang sudah anda download ke dalam folder /WEB-INF/lib
  6. Perhatikan pada web.xml, disitu anda sudah menulis nama servlet anda adalah tjong, yang kebetulan adalah nama saya. :p dan menggunakan class org.springframework.web.servlet.DispatcherServlet. Pada spring, adalah suatu keharusan untuk membuat file xml dengan format nama <nama servlet yang di deklarasikan>-servlet.xml, fungsinya adalah mengatur settingan servlet anda.
  7. Buat file dengan nama tjong-servlet.xml di dalam folder WEB-INF
    <?xml version="1.0" encoding="UTF-8"?>
    
    <beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
    
     <!-- the application context definition for the springapp DispatcherServlet -->
    <bean name="/hello.asik" class="com.firstProgram.web.HelloController"/>
    
    </beans>
    
  8. Buat folder pages di dalam folder WebContent. Untuk selanjutnya setiap file jsp yang anda buat sebaiknya disatukan di dalam folder ini.
  9. Buat file hello.jsp di dalam folder pages
    <html>
     <head><title>Example :: First Spring MVC Application</title></head>
     <body>
     <h1>Example - Spring Application</h1>
     <p>For my nakama.</p>
     </body>
    </html>
    
  10. Terakhir adalah membuat class Controller, buat file HelloController.java pada package com.firstProgram.web
    package com.firstProgram.web;
    
    import org.springframework.web.servlet.mvc.Controller;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import java.io.IOException;
    
    public class HelloController implements Controller {
    
     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response)
     throws ServletException, IOException {
    
     System.out.println("Andreas");
     return new ModelAndView("pages/hello.jsp");
     }
    
    }
    
  11. Coba jalankan aplikasi anda pada server.  Di address bar masukkan alamat berikut: http://localhost:8080/firstProgram/hello.asik.  Hasilnya kira-kira adalah seperti ini.

Daftar Pusataka:

  1. Spring MVC step by step. link

NOTE: mohon maaf sebelumnya karena ada kesalahan pengetikan yang cukup fatal pada saat publish Dec 17, 2010, Dan sudah diperbaiki per tanggal Dec 20, 2010.

Running Command Prompt’s Command from JAVA


Seperti yang anda ketahui, kita dapat menjalan kan command line di dalam JAVA. Sebagai contoh saya ingin men-compress file, saya dapat menggunakan software third party seperti 7zip untuk melakukan proses zipping, sedangkan JAVA hanya sebagai trigger untuk menjalankan command line nya saja.

Kode JAVA yang diperlukan untuk merunning command line kira-kira seperti ini:

public class ZipUtil {

 public static void zipFile(String appPath, String archiveName, String fromDirectory)throws IOException {

String s = null;
Process p = Runtime.getRuntime().exec(appPath + " u " + archiveName + " " + fromDirectory);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));

// read the output from the command
//logger.info("Here is the standard output of the command:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}

// read any errors from the attempted command
while ((s = stdError.readLine()) != null) {
System.out.println(s);

}
}
}

Tapi ada permasalahan disini, jika kita ingin merunning command-command dasar dari command prompt itu sendiri, seperti copy, dir, del, dll akan muncul error.Penjelasan kenapa error ini bisa terjadi ada pada paragraph di bawah ini:

Perlu diketahui saat kita memanggil method getRuntime() dari Class Runtime artinya system harus merunning executable file (ada di dalam parameter) dan tidak ada return value. Saat kita coba menjalankan copy file1 file2 system akan mencoba mencari file copy.exe pada System Path di komputer, jika ada file copy.exe maka file inilah yang akan di execute, dengan file1 dan file2 sebagai parameternya.

Lalu bagaimana caranya untuk merunning command prompt’s command melalui JAVA. Caranya sangat simple, apa nama file executable untuk menjalankan command prompt? Jawabannya adalah command prompt itu sendiri – cmd.exe. Jadi untuk menjalankan command prompt’s command melalui JAVA adalah dengan cara menggunakan command line seperti ini:

cmd.exe /C [command] [parameter1] [parameter2] .. [parameter..]

Java mail on Exchange Server 2007


Pada artikel kali ini saya coba untuk menjabarkan bagaimana cara untuk mengirimkan email melalui Java. <*reader*>Yah ini mah common banget – cari di internet juga udah banyak contohnya </*reader*>.  Tenang dulu, sesuai dengan judulnya saya juga akan coba bahas common problem yang terjadi pada saat mengirimkan email melalui Echange Server 2007.

1.Pertama – tama saya berikan contoh untuk

 String host = "your mail server";
 String from = "your email";

 Properties props = System.getProperties();
 props.put("mail.smtp.host", host);
 props.put("mail.smtp.user", from);
 props.put("mail.smtp.port", "25");
 props.put("mail.debug", "true");

 //props.put("mail.smtp.auth", "true");
 //String userId = "user01";
 //String userPassword = "password01";

 String[] to = {"your email"};

 Session session = Session.getDefaultInstance(props, null);
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 InternetAddress[] toAddress = new InternetAddress[to.length];

 // To get the array of addresses
 for( int i=0; i < to.length; i++ ) { // changed from a while loop
 toAddress[i] = new InternetAddress(to[i]);
 }
 for( int i=0; i < toAddress.length; i++) { // changed from a while loop
 message.addRecipient(Message.RecipientType.TO, toAddress[i]);
 }

 String bodyMessage = "TESTING";
 message.setSubject("EMAIL TESTING");
 message.setText(bodyMessage);

 Transport transport = session.getTransport("smtp");

 try{
//transport.connect(userId, userPassword);
 transport.connect();
 transport.sendMessage(message, message.getAllRecipients());
 transport.close();
 }
 catch(Exception e){
 System.out.println(e.getMessage());
 }
 

Sekarang coba dijalankan dulu syntax di atas. Jangan lupa diliat output nya, untuk men-trace jika ada error. Jika aplikasi ini gagal mengirimkan email ada beberapa hal yang harus anda check:

  • Check apakah PORT 25 di block Firewall tidak
  • Coba check antivirus anda, apakah java.exe sudah masuk ke exception list untuk bagian mail sendernya. (Saya pernah mengalami hal ini pada antivirus Mc Affe)
  • Check Settingan Exchange Server anda. Server Configuration -> Hub Transport -> Default your server. Apakah anonymous nya di check list? Kemungkinan besar anonymousnya tidak di check list, jika hal ini terjadi berarti Security Networking anda hanya mengijinkan pengiriman email oleh user dengan authentikasi.

2. Contoh pengiriman email menggunakan authentikasi, tinggal dibuka comment nya saja. 😉

 String host = "your mail server";
 String from = "your email";

 Properties props = System.getProperties();
 props.put("mail.smtp.host", host);
 props.put("mail.smtp.user", from);
 props.put("mail.smtp.port", "25");
 props.put("mail.debug", "true");

 props.put("mail.smtp.auth", "true");
 String userId = "user01";
 String userPassword = "password01";

 String[] to = {"your email"};

 Session session = Session.getDefaultInstance(props, null);
 MimeMessage message = new MimeMessage(session);
 message.setFrom(new InternetAddress(from));
 InternetAddress[] toAddress = new InternetAddress[to.length];

 // To get the array of addresses
 for( int i=0; i < to.length; i++ ) { // changed from a while loop
 toAddress[i] = new InternetAddress(to[i]);
 }
 for( int i=0; i < toAddress.length; i++) { // changed from a while loop
 message.addRecipient(Message.RecipientType.TO, toAddress[i]);
 }

 String bodyMessage = "TESTING";
 message.setSubject("EMAIL TESTING");
 message.setText(bodyMessage);

 Transport transport = session.getTransport("smtp");

 try{
 transport.connect(userId, userPassword);
 //transport.connect();
 transport.sendMessage(message, message.getAllRecipients());
 transport.close();
 }
 catch(Exception e){
 System.out.println(e.getMessage());
 }
 

Untuk mengirimkan email yang masih ke dalam Local Area Networks saja, seharusnya tidak ada masalah.

3. sekarang coba anda ganti To – nya ke alamat email di luar jaringan anda, misalnya ke gmail atau ke yahoo. Jika tidak bisa terkirim berarti harus ada penambahan beberapa settingan lagi pada Exchange Server anda.

Silahkan melihat referensi berikut:
http://msexchangeteam.com/archive/2006/12/28/432013.aspx

Creating Web Statistic Analyzer in Tomcat


Original tutorial: http://www.nuxora.com/2007/07/10/awstats-on-tomcat/

Please give credit to Him.

Saya akan menjelaskan bagaimana cara untuk membuat sebuah Web Statistic Analyzer pada Tomcat 5/6 khususnya untuk Operating System berbasis Windows. (Pada tutorial ini saya menggunakan OS Windows XP)

Requirement:
1. Perl 5.2 or Above (Pada tutorial ini saya akan menggunakan Strawberry Perl untuk Windows)
2. Tomcat 5 or above (Pada tutorial ini saya akan menggunakan Tomcat 6)
3. awstats.war –> original war file sudah tidak aktif, anda bisa mendownloadnya disini

Langsung saja saya coba menerangkan langkah2 yang harus dilakukan:
A. Installation
1. Install Strawberry Perl pada OS anda, atau anda bisa menggunakan installasi lain untuk Perl.

B. Tomcat Setting
Pada tahapan ini saya anggap configurasi pada Tomcat anda adalah by default, atau anda tidak pernah melakukan perubahan konfigurasi apapun pada Tomcat server anda.
1. Buka file %Tomcat_Home%/conf/server.xml. Langsung menujun pada beberapa baris paling bawah. Uncomment bagian Valve, lalu modifikasi sedikit menjadi seperti ini:

<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve" directory="logs"
               prefix="access." suffix=".log" pattern="combined" resolveHosts="false"

2. Buka file %Tomcat_Home%/conf/context.xml. Modifikasi dan Tambahkan line berikut:

<Context reloadable="true" privileged="true">
.
.
.
	WatchedResource>WEB-INF/web.xml</WatchedResource>
.
.
.
</Context>

3. Jika anda menggunakan Tomcat 6, anda membutuhkan file servlets-cgi.jar dari library Tomcat 5.

C. Installation awstats

1. Taruh awstats.war pada file webapps Tomcat.

2. Jalankan Tomcat – biarkan sampai awstats di deploy oleh Tomcat

3. Matikan Tomcat, sekarang masuk ke bagian setup awstats

D. Awstats Setting

1. Buka Windows Explorer, lalu masuk ke Directory %Tomcat_Home%/webapps/WEB-INF/cgi-bin, copy file awstats.model.conf ke folder yang sama, lalu rename file copy-an nya menjadi awstats.%nama_aplikasi%.conf. Sebagai contoh awstats.www.tjong.com.conf (NOTE: untuk selanjutnya pada referensi ini, saya akan menggunakan istilah awstats.www.tjong.com.conf sebagai referensi untuk file configurasi anda).

2. Buka file awstats.pl. Rubah baris pertama

dari:

#!usr/bin/perl

menjadi

#!%strawberry_perl_home%/perl/bin/perl

NOTE %strawberry_perl_home% = directory tempat anda menginstall strawberrry perl.

3. Buka file awstats.www.tjong.com.conf, modifikasi beberapa line sebagai berikut:

a. Baris ke-50:

dari:

LogFile="[TomcatInstallDir]/webapps/awstats/WEB-INF/tools/logresolvemerge.pl [TomcatInstallDir]/logs/*.log |"

menjadi:

LogFile="%Tomcat_Home%/logs/access.%YYYY-0-%MM-0-%DD-0.log"

b. Baris ke-146:

dari:

SiteDomain=""

menjadi:

SiteDomain="localhost"

c. Baris ke-232:

dari:

AllowToUpdateStatsFromBrowser=0

menjadi:

AllowToUpdateStatsFromBrowser=1

4. Open Command Prompt. Masuk ke Directory %Tomcat_Home%/webapps/awstats/WEB-INF/cgi-bin jalankan perintah berikut:

perl awstats.pl -config=www.tjong.com -update

D. Running Application
1. Jalankan Tomcat Server anda
2. Pergi ke alamat ini:

http://localhost:8080/awstats/cgi-bin/awstats.pl?config=www.tjong.com

3. Tampilannya kurang lebih akan seperti ini:

4. Click Update Now untuk menggenerate data terbaru