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

25 thoughts on “Spring Web MVC – Quick Start with Eclipse (Episode 2)

  1. Mas andreas, saya senang bisa mengikuti tutorial spring ini dr episode awal, tp kenaapa di episode 2 saya msh bingung, pada tahap Edit tjong-servlet.xml kok scriptnya jd komentar, ada yg salah tdk pak. begitupula dengan episode selanjutnya…. thanks

  2. mas sya dah coba, tp hasilnya ga nampil,,,
    pesan errornya :

    HTTP Status 500 –
    type Exception report
    message
    description The server encountered an internal error () that prevented it from fulfilling this request.

    exception
    org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.util.MissingResourceException: Can’t find bundle for base name views, locale en_US
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:583)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    root cause
    java.util.MissingResourceException: Can’t find bundle for base name views, locale en_US
    java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1539)
    java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1278)
    java.util.ResourceBundle.getBundle(ResourceBundle.java:980)
    org.springframework.web.servlet.view.ResourceBundleViewResolver.getBundle(ResourceBundleViewResolver.java:264)
    org.springframework.web.servlet.view.ResourceBundleViewResolver.initFactory(ResourceBundleViewResolver.java:217)
    org.springframework.web.servlet.view.ResourceBundleViewResolver.loadView(ResourceBundleViewResolver.java:186)
    org.springframework.web.servlet.view.AbstractCachingViewResolver.createView(AbstractCachingViewResolver.java:159)
    org.springframework.web.servlet.view.AbstractCachingViewResolver.resolveViewName(AbstractCachingViewResolver.java:78)
    org.springframework.web.servlet.DispatcherServlet.resolveViewName(DispatcherServlet.java:1215)
    org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1164)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:902)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:807)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:571)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:501)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

    note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.

    gmn tuh mas?? hehehe 😀

    • Haha.. Stupid me..
      Gery, saya coba bantu supaya kamu paham dimana errornya.

      Coba kamu check di tjong-servlet.xml, disitu ada line yang isinya seperti ini:
      p:basename=”views”/>

      Nah disitu kan ditulis-nya “views”, jadi yang harus dibuat adalah “views.properties” bukan nya “view.properties”, perbedaan nya hanya di huruf “s”-nya. Kesalahan sederhana, tapi fatal akibatnya.

      • kok ditulisnya views.properties… padahal di source folder ‘resources’ itukan nama filenya adalah view.properties. Nah saya udah coba pakai kedua-duanya, view.properties dan views.properties hasilnya pun belum nampak mas. pesan erronya pun msh sama..

        oiya mas andreas ada ym, minta boleh…hehe

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 )

Facebook photo

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

Connecting to %s