Dari Struts ke Spring Boot: Evolusi Arsitektur Rendering Web Java Modern
Bagi developer Java yang telah berkecimpung sejak era 2000-an hingga awal 2010-an, nama Apache Struts tentu sudah tidak asing lagi. Pada masanya, Struts menjadi framework web Java paling populer untuk membangun aplikasi enterprise.
Namun jika sekarang kita berpindah ke Spring Boot, banyak developer yang bertanya:
"Mengapa di Spring Boot tidak ada file seperti
struts-config.xmluntuk mengatur halaman JSP?"
Jawabannya sederhana:
Karena filosofi desain framework telah berubah.
Artikel ini akan membahas evolusi tersebut secara mendalam, mulai dari cara kerja Struts, perubahan paradigma pada Spring MVC, hingga implementasi modern menggunakan REST API.
Sedikit Sejarah
Perjalanan framework web Java secara umum dapat digambarkan sebagai berikut.
Servlet
│
▼
Apache Struts
│
▼
Spring MVC
│
▼
Spring Boot
│
▼
REST API + SPA (React/Vue/Angular)
Setiap generasi berusaha mengurangi kompleksitas framework sebelumnya.
Bagaimana Struts Bekerja?
Pada Struts, hampir seluruh navigasi aplikasi diatur melalui file konfigurasi.
Misalnya terdapat URL:
http://server/login.do
Request tersebut tidak langsung menuju class Java.
Alurnya adalah:
Browser
│
▼
login.do
│
▼
struts-config.xml
│
▼
LoginAction
│
▼
success
│
▼
login_success.jsp
Semua hubungan tersebut didefinisikan di dalam XML.
Contohnya:
<action
path="/login"
type="com.nirantara.LoginAction"
name="loginForm">
<forward
name="success"
path="/WEB-INF/jsp/home.jsp"/>
<forward
name="failed"
path="/WEB-INF/jsp/login.jsp"/>
</action>
Kemudian Action:
public class LoginAction extends Action {
public ActionForward execute(...) {
if(validUser){
return mapping.findForward("success");
}
return mapping.findForward("failed");
}
}
Perhatikan bahwa Action bahkan tidak mengetahui lokasi JSP.
Ia hanya mengembalikan nama:
success
Kemudian XML yang menentukan halaman sebenarnya.
Kelebihan Pendekatan Struts
Pada masanya pendekatan ini memiliki beberapa keuntungan.
- Seluruh routing berada di satu tempat.
- Mudah dipahami oleh tim besar.
- Pergantian halaman tidak perlu mengubah source Action.
- Semua alur aplikasi dapat dibaca dari XML.
Untuk aplikasi enterprise tahun 2005-an, pendekatan ini sangat masuk akal.
Kekurangan Struts
Semakin besar aplikasi, file konfigurasi menjadi semakin sulit dipelihara.
Contoh:
struts-config.xml
500 baris
1000 baris
3000 baris
5000 baris
Sering ditemukan konfigurasi seperti:
<action path="/customerCreate"...>
<action path="/customerEdit"...>
<action path="/customerDelete"...>
<action path="/customerSearch"...>
<action path="/customerExport"...>
<action path="/customerPrint"...>
Semua berada dalam satu file besar.
Masalah lain yang sering muncul:
- typo pada XML
- path JSP salah
- forward salah
- merge conflict Git/SVN
- sulit melakukan refactoring
XML menjadi bottleneck pengembangan.
Spring MVC Mengubah Paradigma
Spring memperkenalkan pendekatan yang jauh lebih sederhana.
Alih-alih menyimpan konfigurasi di XML, informasi tersebut ditempel langsung pada kode melalui annotation.
Contohnya:
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login";
}
}
Tidak ada lagi:
- struts-config.xml
- action mapping XML
- forward XML
Semuanya berada di dalam controller.
Alur Request Spring MVC
Browser
│
▼
/login
│
▼
DispatcherServlet
│
▼
LoginController
│
▼
return "login"
│
▼
View Resolver
│
▼
login.html
Perhatikan bahwa proses menjadi jauh lebih pendek.
View Resolver
Spring tetap memiliki konsep resolver.
Misalnya konfigurasi:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
Controller:
@GetMapping("/dashboard")
public String dashboard() {
return "dashboard";
}
Spring otomatis mencari:
/WEB-INF/jsp/dashboard.jsp
Controller tidak perlu mengetahui lokasi file secara penuh.
Mengapa XML Ditinggalkan?
Ada beberapa alasan utama.
1. Lebih Mudah Dibaca
Struts:
Controller
↓
XML
↓
JSP
Spring:
Controller
↓
View
Lebih sedikit "lompatan" ketika membaca source code.
2. Refactoring Lebih Mudah
IDE seperti Eclipse atau IntelliJ dapat melakukan:
- Rename Class
- Rename Method
- Find Usage
- Navigation
Karena semua hubungan berada di source Java.
3. Compile-Time Checking
Annotation dapat diperiksa compiler.
Sedangkan XML baru diketahui salah ketika aplikasi dijalankan.
4. Mengurangi Boilerplate
Bandingkan.
Struts:
Action
Form Bean
XML
Forward
JSP
Spring:
Controller
View
Jauh lebih ringkas.
Apakah Spring Boot Masih Bisa Menggunakan JSP?
Jawabannya:
Bisa.
Walaupun sekarang bukan pilihan utama.
Contoh struktur:
WEB-INF
jsp
home.jsp
login.jsp
Controller:
@GetMapping("/")
public String home() {
return "home";
}
Konfigurasi:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
Spring tetap dapat merender JSP seperti aplikasi Java klasik.
Lalu Mengapa Banyak Orang Beralih ke Thymeleaf?
Karena lebih modern.
Contoh:
templates
home.html
login.html
Controller:
@GetMapping("/")
public String home(Model model){
model.addAttribute("user","Sena");
return "home";
}
HTML:
<h2 th:text="${user}"></h2>
Tidak perlu lagi scriptlet JSP seperti:
<%= user.getName() %>
atau
<c:forEach>
HTML tetap valid walaupun dibuka tanpa server.
Evolusi Selanjutnya: REST API
Saat ini banyak aplikasi bahkan tidak melakukan rendering HTML sama sekali.
Spring Boot hanya mengembalikan JSON.
Browser
↓
React
↓
REST API
↓
Spring Boot
↓
Database
Controller menjadi:
@RestController
public class UserController {
@GetMapping("/users")
public List<User> users(){
return userService.findAll();
}
}
Response:
[
{
"id":1,
"name":"Sena"
},
{
"id":2,
"name":"Nirantara"
}
]
Frontend bertugas membangun tampilan.
Contoh Implementasi Berdasarkan Arsitektur
1. Struts + JSP
Cocok untuk:
- Aplikasi enterprise lama
- Sistem pemerintahan
- Legacy system
Alur singkat:
URL
↓
struts-config.xml
↓
Action
↓
JSP
2. Spring Boot + JSP
Cocok untuk:
- Migrasi dari aplikasi lama
- Intranet perusahaan
- Sistem internal sederhana
Alur singkat:
URL
↓
Controller
↓
JSP
3. Spring Boot + Thymeleaf
Cocok untuk:
- Admin panel
- Dashboard internal
- CMS
- Portal perusahaan
Alur singkat:
URL
↓
Controller
↓
HTML (Thymeleaf)
4. Spring Boot + REST API
Cocok untuk:
- Mobile application
- React
- Vue
- Angular
- Flutter
- Desktop application
Alur singkat:
Browser / Mobile
↓
REST API
↓
JSON
5. Microservices
Cocok untuk:
- Sistem berskala besar
- Cloud Native
- Kubernetes
Alur singkat:
Gateway
↓
REST API
↓
Service A
Service B
Service C
Masing-masing service memiliki tanggung jawab yang spesifik dan saling berkomunikasi melalui API.
Perbandingan Singkat
| Aspek | Struts | Spring Boot |
|---|---|---|
| Routing | XML | Annotation |
| Konfigurasi | Besar | Minimal |
| Refactoring | Sulit | Mudah |
| Boilerplate | Banyak | Sedikit |
| View | JSP | JSP / Thymeleaf / JSON |
| REST API | Tidak alami | Native |
| Pengembangan | Lebih lambat | Lebih cepat |
Apakah Konsep Struts Salah?
Tidak.
Struts adalah hasil dari kebutuhan zamannya.
Pada era ketika annotation belum populer dan IDE belum secanggih sekarang, pendekatan XML memberikan struktur yang jelas dan terpusat.
Namun seiring berkembangnya bahasa Java, tooling, serta kebutuhan aplikasi web modern, pendekatan annotation menawarkan produktivitas yang lebih tinggi, lebih mudah dipelihara, dan lebih aman saat melakukan refactoring. Inilah alasan mengapa Spring MVC dan kemudian Spring Boot menjadi standar de facto dalam pengembangan aplikasi Java modern.
Penutup
Perbedaan terbesar antara Struts dan Spring Boot bukan sekadar hilangnya struts-config.xml, melainkan perubahan filosofi desain.
Struts berorientasi pada configuration-driven development, di mana perilaku aplikasi banyak ditentukan melalui berkas konfigurasi XML. Sebaliknya, Spring Boot mengedepankan convention over configuration, dengan memanfaatkan annotation, auto-configuration, dan konvensi yang telah disepakati sehingga developer dapat lebih fokus pada logika bisnis daripada konfigurasi.
Akibatnya, kode menjadi lebih ringkas, lebih mudah dibaca, lebih mudah diuji, dan lebih sederhana untuk dipelihara. Itulah sebabnya mayoritas proyek Java modern kini menggunakan Spring Boot sebagai fondasi utama, sementara Struts lebih banyak dijumpai pada aplikasi legacy yang masih berjalan di berbagai organisasi besar.
Published by Nirantara
Nirantara is an Indonesian Enterprise AI company specializing in Enterprise AI, RAG, Intelligent Search, and AI Automation. Article written by jsturana.