Implementasi Spring MVC pada Google App Engine part 1

Kali ini saya mau membuat catatan pribadi, barang kali bermanfaat buat diri sendiri dan orang lain. Catatan ini rangkuman dari pembelajaran beberapa minggu terakhir, setelah melakukan percarian kesana-kesini :D . Catatan ini bertujuan bagaimana membuat aplikasi Java Web dengan hosting server gratisan (Indonesia banget hehe) lalu ketemulah saya dengan Google App Engine. Awalnya hanya berfikir untuk membuat prohect Java Web dengan Google App Engine, singkat saja GAE.

Namun di tengah jalan berfikir, “wah kok lama-lama codingnya gak karuan gini”. Dimana view, manipulasi data, dan penyimpanan data dihajar di satu tempat.
Perjalanan berlanjut ketika terlintas ide untuk membuat aplikasi web dengan konsep MVC, dan mencari framework apa yang compatible dangn GAE ini. Ternyata setelah bertanya, Spring bisa berjalan di GAE, horayyy!

Oke kita langsung bkin saja project nya dengan konfigurasi seperti yang diharapkan. Disini saya menggunakan Spring versi 3.0.5.RELEASE, bisa didownload disini Spring download  atau bisa cari disini Maven Repository untuk mengambil perbagian saja .

Sedangkan untuk GAE nya saya menggunakan versi 1.6.0, bisa di download disini Google App Engine. Semua hal diatas bisa di download secara cuma-cuma, menarik bukan :D

Untuk IDE saya menggunakan Eclipse 3.7 Java EE(Indigo kalo gak salah). Menggunakan Eclipse untuk Google Plugin for Eclipse . Untuk cara installasi bisa ikuti disana. Setelah berhasil menginstall kita lanjut untuk New Project.

Buat project dengan nama Spring GAE atau terserah anda. Bisa juga mengikuti petunjuk dibawah ini.
Google Plugins

Web project
 
Library
Perhatikan isi folder /WEB-INF/lib pada project, untuk memastikan dapat berjalan lancar anda dapat menyamakan isi nya dgn gambar diatas.

Setelah berhasil membuat project, selanjutnya kita harus mengubah file web.xml terlebih dahulu. Dari xml dibawah ini kita melakukan handling request root “/” oleh DispatcherServlet milik spring.

Pada cacatan ini saya menggunakan annotation based configuration untuk spring web nya.

<?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"
	version="2.5">

	<!-- Context configuration -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>com.yanuar.notepad.config.AppConfig</param-value>
	</context-param>

	<!-- Web root dispatcher servlet -->
	<servlet>
		<servlet-name>SpringDispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- Using annotation based configuration instead XML based configuration -->
		<init-param>
			<param-name>contextClass</param-name>
			<param-value>
              org.springframework.web.context.support.AnnotationConfigWebApplicationContext
          </param-value>
		</init-param>
		<!-- Locate our context configuration -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>com.yanuar.notepad.config.AppConfig</param-value>
		</init-param>
	</servlet>

	<!-- Mapping root URL request -->
	<servlet-mapping>
		<servlet-name>SpringDispatcherServlet</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>

</web-app>

Setelah itu kita buat sebuah class konfigurasi untuk Spring, karena kita menggunakan Annotation Based melainkan XML Based, maka kita perlu menambah anotasi @Configuration pada class AppConfig

AppConfig.java

package com.yanuar.notepad.config;

import java.util.logging.Logger;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

import com.yanuar.notepad.controller.IndexController;

@Configuration
public class AppConfig {

	@Bean
	public IndexController indexController() {
		return new IndexController();
	}

	@Bean
	public InternalResourceViewResolver internalResourceViewResolver() {
		InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
		viewResolver.setPrefix("/WEB-INF/view/");
		viewResolver.setSuffix(".jsp");
		return viewResolver;
	}
}

Pada code diatas kita menentukan letak folder view JSP pada folder WEB-INF/view/ dengan suffix .jsp sesuai ekstensi file view.

Ketika kita melakukan request http://localhost:8888/ Spring menentukan mapping sesuai URL Request yang sudah kita tentukan pada class IndexController sebagai berikut

IndexController.java

package com.yanuar.notepad.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


@Controller
@RequestMapping(value="/")
public class IndexController {

	@RequestMapping(method=RequestMethod.GET)
	public String index(){
		return "index";
	}
}

Pada method index() kita mengembalikan View untuk dikembalikan ke user, Spring akan mencari view dengan prefix view yaitu /WEB-INF/view/ dengan mencari file view dengan nama index , dengan suffix .JSP. Namun URL pada browser user tetap http://localhost:8888/ bukan http://localhost:8888/WEB-INF/view/index.jsp… bagaimana, menarik bukan? ;)

Project bisa di download langsung di sini Notepad Cloud
Index page

Happy coding :D

mau tinggalin pesan?

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 )

Connecting to %s