Membangun Project Pertama Menggunakan Spring Web MVC (Bagian 1)
Dalam artikel berseri mengenai pembahasan Tutorial Spring Web MVC yang pertama, subrutin telah mengulas mengenai pattern dari mvc dan bagaimana diagram dari konsep Spring Web MVC bekerja. Kali ini, subrutin akan melanjutkan ulasan mengenai bagaimana programmer dapat membangun project pertama kali menggunakan framework Spring Web MVC.
- Prasyarat Perangkat Lunak
Dalam pembahasan kali ini, diasumsikan software berikut sudah terinstal. ( Pembaca dapat merujuk ke tautan yang disertakan untuk menginstal perangkat lunak tersebut )
- OpenJDK 11 ( klik disini untuk petunjuk menginstal OpenJDK)
- Apache Maven (Klik disini untuk menginstal Apache Maven)
- Apache Tomcat 9
- IDE (Eclipse IDE, Spring Tool Suite, VSCode)
- Generate Archetype
Buka terminal atau command prompt pada mesin komputer, lalu ketik perintah berikut untuk membuat sebuah project baru menggunakan maven
mvn archetype:generate -DgroupId=com.subrutin -DartifactId=first-springmvc-init-DarchetypeArtifactId=maven-archetype-webapp -DarchetypeVersion=1.4 -Dpackage=com.subrutin.springmvc -DinteractiveMode=false
Baca juga :
- Ubah pom.xml
Ubah project maven yang telah digenerate agar menggunakan OpenJDK 11 yang telah diinstal. Caranya ganti value tag pada pom.xml berikut menjadi 11 dari yang semula 1.7
maven.compiler.source
maven.compiler.target
Berikutnya, tambahkan beberapa dependensi berikut pada pom.xml
- servlet-api
- jsp-api
- jstl
<!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>4.0.3</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api --> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>2.3.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
Tambahkan pula dependensi Spring Framework termasuk Spring Web MVC
- spring-core
- spring-context
- spring-context-support
- spring-expression
- spring-beans
- spring-webmvc
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency>
Perhatikan, ${spring.version}
adalah variabel versi spring yang didefinisikan pada properties
<spring.version>5.2.6.RELEASE</spring.version>
Berikut adalah hasil akhir dari pom.xml
yang telah diubah
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.subrutin</groupId> <artifactId>first-springmvc-init</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>first-springwebmvc Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>https:/subrutin.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>11</maven.compiler.source> <maven.compiler.target>11</maven.compiler.target> <spring.version>5.2.6.RELEASE</spring.version> </properties> <dependencies> <!-- https://mvnrepository.com/artifact/jakarta.servlet/jakarta.servlet-api --> <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>4.0.3</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/jakarta.servlet.jsp/jakarta.servlet.jsp-api --> <dependency> <groupId>jakarta.servlet.jsp</groupId> <artifactId>jakarta.servlet.jsp-api</artifactId> <version>2.3.6</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-expression</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> </dependencies> <build> <finalName>first-springwebmvc</finalName> <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> <plugins> <plugin> <artifactId>maven-clean-plugin</artifactId> <version>3.1.0</version> </plugin> <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> <plugin> <artifactId>maven-resources-plugin</artifactId> <version>3.0.2</version> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> </plugin> <plugin> <artifactId>maven-surefire-plugin</artifactId> <version>2.22.1</version> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>3.2.2</version> </plugin> <plugin> <artifactId>maven-install-plugin</artifactId> <version>2.5.2</version> </plugin> <plugin> <artifactId>maven-deploy-plugin</artifactId> <version>2.8.2</version> </plugin> </plugins> </pluginManagement> </build> </project>
- Ubah web.xml
Pada web.xml
tambahkan DispatcherServlet
yang bertindak sebagai front controller pada Spring WebMVC. Perhatikan pada baris 23-26, servlet dipetakan untuk semua request yang berakhiran .html
<servlet> <servlet-name>main</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>main</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping>
Begitu DispatcherServlet
diinisiasi, ia akan membentuk application context berdasarkan konfigurasi xml yang secara default memiliki nama [nama-servlet]-servlet.xml
. Oleh karena itu, buat file bernama main-servlet.xml
dengan konfigurasi sebagai berikut
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context-4.3.xsd"> <mvc:annotation-driven/> <context:component-scan base-package="com.subrutin.springmvc.controller" /> <mvc:default-servlet-handler /> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> </beans>
Perhatikan pada baris 12-13 didefinisikan <context:component-scan>
yang merupakan konfigurasi agar framework melakukan pemindaian semua “komponen spring” pada package com.subrutin.springmvc.controller
berserta semua package anakannya
Pada baris 16-18, didefinisikan bean viewResolver
yang bertugas menerjemahkan view yang diminta dan menambahkannya di lokasi dengan prefix /WEB-INF/jsp/
dan format file (suffix) .jsp
Dari sini, programmer telah berhasil mensetup project kosong yang siap diisi dengan program yang akan dibahas pada bagian kedua tulisan ini.