Spring MVC হল স্প্রিং ফ্রেমওয়ার্কের একটি অত্যন্ত জনপ্রিয় এবং শক্তিশালী অংশ, যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। এটি Model-View-Controller (MVC) আর্কিটেকচার প্যাটার্ন অনুসরণ করে, যা অ্যাপ্লিকেশনের বিভিন্ন অংশকে আলাদা করে পরিচালনা করতে সাহায্য করে। Spring MVC ব্যবহার করে আপনি ওয়েব অ্যাপ্লিকেশন তৈরি করতে পারেন, যেখানে আপনার অ্যাপ্লিকেশনটি সহজে মডুলার, রক্ষণাবেক্ষণযোগ্য এবং স্কেলেবল হয়ে ওঠে।
Spring MVC আর্কিটেকচারে তিনটি প্রধান অংশ থাকে:
Spring MVC এর কাজের প্রক্রিয়া সাধারণত নিচের ধাপগুলো অনুসরণ করে:
স্প্রিং MVC কনফিগার করার জন্য, একটি সাধারণ কনফিগারেশন ক্লাস এবং DispatcherServlet ব্যবহার করা হয়। সাধারণভাবে, আপনি XML কনফিগারেশন বা Java-based কনফিগারেশন ব্যবহার করতে পারেন। এখানে একটি উদাহরণ দেওয়া হয়েছে যেখানে Java-based কনফিগারেশন ব্যবহার করা হয়েছে।
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/home").setViewName("home");
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
এখানে:
@Controller
public class HomeController {
@RequestMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home";
}
}
এখানে:
home.jsp:
<!DOCTYPE html>
<html>
<head>
<title>Spring MVC Example</title>
</head>
<body>
<h2>${message}</h2>
</body>
</html>
এখানে, ${message}
ব্যবহার করে মডেল থেকে ডেটা আনা হচ্ছে এবং এটি ভিউতে দেখানো হচ্ছে।
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
এখানে, DispatcherServlet কে কনফিগার করা হয়েছে যাতে এটি সমস্ত রিকোয়েস্ট হ্যান্ডেল করে এবং কন্ট্রোলারকে ডিরেক্ট করে।
স্প্রিং MVC একটি শক্তিশালী ফ্রেমওয়ার্ক যা Model-View-Controller আর্কিটেকচার প্যাটার্ন অনুসরণ করে ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে। এটি স্প্রিং কনটেইনারের মাধ্যমে Dependency Injection এবং IoC (Inversion of Control) ধারণা ব্যবহার করে সহজ, মডুলার, এবং রক্ষণাবেক্ষণযোগ্য অ্যাপ্লিকেশন তৈরি করতে সাহায্য করে। DispatcherServlet, Controller, Model, এবং View এর মাধ্যমে স্প্রিং MVC সহজভাবে ওয়েব রিকোয়েস্ট পরিচালনা করে এবং ফলস্বরূপ, আধুনিক ওয়েব অ্যাপ্লিকেশন তৈরি করতে কার্যকর হয়।
Spring MVC হলো স্প্রিং ফ্রেমওয়ার্কের একটি গুরুত্বপূর্ণ মডিউল, যা Model-View-Controller (MVC) ডিজাইন প্যাটার্নের ভিত্তিতে তৈরি। এটি একটি ওয়েব ফ্রেমওয়ার্ক, যা ওয়েব অ্যাপ্লিকেশন তৈরিতে ব্যবহৃত হয়। Spring MVC ডেভেলপারদের সহজে ওয়েব অ্যাপ্লিকেশন তৈরি এবং মেইনটেন করতে সাহায্য করে।
MVC আর্কিটেকচারের ভূমিকা:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.0</version>
</dependency>
@Controller
public class HomeController {
@RequestMapping("/")
public String homePage(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home";
}
}
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class AppConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
public class WebInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext servletContext) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.register(AppConfig.class);
DispatcherServlet dispatcherServlet = new DispatcherServlet(context);
ServletRegistration.Dynamic registration = servletContext.addServlet("dispatcher", dispatcherServlet);
registration.setLoadOnStartup(1);
registration.addMapping("/");
}
}
Spring MVC একটি শক্তিশালী ফ্রেমওয়ার্ক যা ওয়েব অ্যাপ্লিকেশন তৈরির জন্য সহজ, মডুলার এবং কার্যকরী পদ্ধতি সরবরাহ করে। এটি মডেল, ভিউ এবং কন্ট্রোলারের মধ্যে পরিষ্কার বিভাজন নিশ্চিত করে এবং REST API ডেভেলপমেন্ট থেকে শুরু করে ফ্রন্ট-এন্ড ইন্টিগ্রেশন পর্যন্ত বিভিন্ন সুবিধা প্রদান করে।
Spring ফ্রেমওয়ার্কে DispatcherServlet হলো Spring Web MVC আর্কিটেকচারের কেন্দ্রীয় উপাদান। এটি ফ্রন্ট কন্ট্রোলার ডিজাইন প্যাটার্ন অনুসরণ করে, যা একটি একক এন্ট্রি পয়েন্ট হিসাবে কাজ করে এবং HTTP রিকোয়েস্ট প্রক্রিয়াকরণ পরিচালনা করে।
DispatcherServlet একটি বিশেষায়িত Servlet যা একটি ওয়েব অ্যাপ্লিকেশনে Controller, Model, এবং View এর মধ্যে সমন্বয় করে। এটি ব্যবহারকারীর রিকোয়েস্ট গ্রহণ করে, সংশ্লিষ্ট Controller-এ পাঠায়, ডেটা মডেল প্রস্তুত করে এবং অবশেষে একটি ভিউতে রেসপন্স রেন্ডার করে।
Controller হলো Spring MVC-এর একটি উপাদান, যা DispatcherServlet থেকে রিকোয়েস্ট গ্রহণ করে এবং ব্যবসায়িক লজিক প্রক্রিয়াকরণ করে।
@Controller
বা @RestController
ব্যবহার করা হয়।উদাহরণ:
@Controller
public class HomeController {
@GetMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home";
}
}
Model হলো ডেটা ধারণ করার একটি অবজেক্ট, যা View-তে পাঠানো হয়। Controller মডেল তৈরি করে ডেটা প্রস্তুত করে।
উদাহরণ:
model.addAttribute("message", "Welcome to Spring MVC!");
View হলো ব্যবহারকারীর কাছে রেসপন্স রেন্ডার করার দায়িত্বপ্রাপ্ত অংশ। এটি সাধারণত HTML, JSP, বা Thymeleaf টেমপ্লেট ফাইলের মাধ্যমে ডেটা রেন্ডার করে।
উদাহরণ (Thymeleaf):
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
[Client] ---> [DispatcherServlet] ---> [Controller] ---> [Model] ---> [View Resolver] ---> [View] ---> [Client]
DispatcherServlet Spring MVC আর্কিটেকচারের কেন্দ্রীয় উপাদান, যা Controller, Model এবং View-এর মধ্যে সমন্বয় করে। এর মাধ্যমে ব্যবহারকারীর রিকোয়েস্ট থেকে শুরু করে রেসপন্স রেন্ডারিং পর্যন্ত পুরো প্রক্রিয়া কার্যকরভাবে সম্পন্ন হয়।
Spring Framework-এর Spring MVC (Model-View-Controller) একটি অত্যন্ত জনপ্রিয় এবং শক্তিশালী ওয়েব ফ্রেমওয়ার্ক যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টে ব্যবহৃত হয়। @Controller, @RequestMapping, এবং View Resolver হল Spring MVC এর গুরুত্বপূর্ণ উপাদান যা ওয়েব রিকোয়েস্ট প্রক্রিয়াকরণ এবং রেসপন্স প্রদান করতে সাহায্য করে।
এগুলির মাধ্যমে আপনি HTTP রিকোয়েস্টগুলির হ্যান্ডলিং, ভিউ রেন্ডারিং এবং ব্যবহারকারীদের জন্য ফলস্বরূপ তথ্য প্রদানের কাজ সহজভাবে করতে পারেন।
Spring MVC-এ @Controller একটি ক্লাস লেভেল এনোটেশন যা controller ক্লাসকে চিহ্নিত করে, যার মাধ্যমে HTTP রিকোয়েস্টগুলি প্রক্রিয়া করা হয়। এই এনোটেশন ব্যবহৃত ক্লাসগুলো মূলত UI (User Interface) এর সাথে যোগাযোগ স্থাপন করে, এবং তারা view থেকে model এবং controller থেকে view পর্যন্ত ডেটা ট্রান্সফার করে।
@Controller এনোটেশন ক্লাসে ব্যবহৃত হয় যখন একটি ক্লাস HTTP রিকোয়েস্টের জন্য উপযুক্ত মেথডগুলির সংকলন (collection) হিসেবে কাজ করে।
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/welcome")
public String showWelcomePage() {
return "welcome";
}
}
ব্যাখ্যা:
@Controller
এনোটেশন দিয়ে ক্লাসটিকে একটি controller হিসেবে চিহ্নিত করা হয়।showWelcomePage()
মেথডের মাধ্যমে welcome
নামক view এর জন্য একটি রিটার্ন স্ট্রিং প্রদান করা হয়েছে।@RequestMapping হল Spring MVC এর একটি গুরুত্বপূর্ণ এনোটেশন যা HTTP রিকোয়েস্টের জন্য মেথড নির্ধারণ করে। এটি একটি নির্দিষ্ট URL প্যাটার্নের সাথে মেথড বা ক্লাসের ম্যাপিং তৈরি করে এবং সেই অনুযায়ী রিকোয়েস্ট প্রক্রিয়া করার কাজ করে। @RequestMapping HTTP রিকোয়েস্টের বিভিন্ন টাইপ (GET, POST, PUT, DELETE) সাপোর্ট করে।
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
// Mapping for HTTP GET request
@RequestMapping("/welcome")
public String showWelcomePage() {
return "welcome";
}
// Mapping for HTTP POST request
@RequestMapping(value = "/submit", method = RequestMethod.POST)
public String handleFormSubmission() {
// Process form submission
return "submissionSuccess";
}
}
ব্যাখ্যা:
@RequestMapping("/welcome")
রিকোয়েস্টের জন্য GET HTTP মেথড ব্যবহার করে welcome
view রিটার্ন করে।@RequestMapping(value = "/submit", method = RequestMethod.POST)
ব্যবহার করে POST রিকোয়েস্টের জন্য একটি মেথড তৈরি করা হয়েছে, যা form data প্রসেস করে এবং একটি submissionSuccess
view রিটার্ন করে।Spring 4.3 এবং তার পরবর্তী সংস্করণে, @RequestMapping এর পরিবর্তে আরও স্পেসিফিক HTTP মেথড এনোটেশন রয়েছে, যেমন:
উদাহরণ:
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome";
}
View Resolver হল একটি Spring MVC কম্পোনেন্ট যা রিকোয়েস্টের ভিত্তিতে নির্দিষ্ট view রিটার্ন করে। এটি Spring MVC অ্যাপ্লিকেশন এর মধ্যে ভিউ এবং কন্ট্রোলারের মধ্যে যোগাযোগ স্থাপন করে। View Resolver মূলত logical view name কে actual view (যেমন JSP, Thymeleaf) এর সাথে ম্যাপিং করে।
Spring-এ সাধারণত দুটি ধরনের View Resolver ব্যবহৃত হয়:
XML Configuration (view resolver configuration):
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
Java Configuration Example:
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
registry.jsp("/WEB-INF/views/", ".jsp");
}
}
ব্যাখ্যা:
welcome
নামক view যখন রিটার্ন হয়, তখন Spring সঠিক JSP ফাইল /WEB-INF/views/welcome.jsp
খুঁজে পাবে।Thymeleaf একটি জনপ্রিয় টেমপ্লেট ইঞ্জিন যা Spring Framework এর সাথে ব্যবহৃত হয়।
Java Configuration (Thymeleaf View Resolver):
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".html");
return resolver;
}
}
ব্যাখ্যা:
welcome.html
টেমপ্লেটকে /WEB-INF/views/
ডিরেক্টরির মধ্যে খুঁজে পাবে।welcome
) কে নির্দিষ্ট ফিজিকাল ভিউ (যেমন welcome.jsp
বা welcome.html
) এর সাথে ম্যাপ করে, এবং সেই ভিউ টেমপ্লেট রেন্ডার করে ব্যবহারকারীকে রেসপন্স প্রদান করে।@Controller
public class UserController {
@RequestMapping("/home")
public String showHomePage() {
return "home"; // Logical view name (will be resolved to /WEB-INF/views/home.jsp)
}
@RequestMapping("/profile")
public String showProfilePage() {
return "profile"; // Logical view name (will be resolved to /WEB-INF/views/profile.jsp)
}
}
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
/WEB-INF/views/home.jsp
/WEB-INF/views/profile.jsp
এই উপাদানগুলো একসাথে কাজ করে Spring MVC অ্যাপ্লিকেশনে রিকোয়েস্ট প্রসেসিং এবং ভিউ রেন্ডারিং প্রক্রিয়াকে সহজ এবং কার্যকরী করে তোলে।
Spring MVC (Model-View-Controller) হল স্প্রিং ফ্রেমওয়ার্কের একটি কম্পোনেন্ট যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয়। এটি একটি শক্তিশালী এবং হালকা ওয়েব ফ্রেমওয়ার্ক, যা Model, View, এবং Controller আর্কিটেকচার প্যাটার্ন অনুসরণ করে। Spring MVC ডেভেলপারদের ডাইনামিক ওয়েব পেজ তৈরিতে সাহায্য করে এবং এটি ডেটা বেস বা অন্যান্য ওয়েব রিসোর্সের সাথে যোগাযোগের জন্য শক্তিশালী টুলস সরবরাহ করে।
এই টিউটোরিয়ালে আমরা Spring MVC এর বেসিক কনফিগারেশন এবং একটি সিম্পল অ্যাপ্লিকেশন তৈরি করার প্রক্রিয়া দেখাবো।
Spring MVC মূলত ৩টি প্রধান উপাদানের মাধ্যমে কাজ করে:
এখন, আমরা একটি বেসিক Spring MVC অ্যাপ্লিকেশন তৈরি করার জন্য প্রয়োজনীয় ধাপগুলো দেখে নেব।
প্রথমে, স্প্রিং মেভি সি অ্যাপ্লিকেশন তৈরি করার জন্য মেভেন (Maven) অথবা গ্রেডল (Gradle) ব্যবহার করতে হবে। আমরা মেভেন ব্যবহার করব এবং আমাদের pom.xml
ফাইলটি কনফিগার করব।
<dependencies>
<!-- Spring Web MVC dependency -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
<!-- JSP dependency for View Rendering -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- Apache Commons for file handling (optional) -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- Spring Context dependency for component scanning -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.9</version>
</dependency>
</dependencies>
এই কনফিগারেশনটি স্প্রিং ওয়েব এমভিসি এবং JSP (Java Server Pages) রেন্ডারিংয়ের জন্য প্রয়োজনীয় লাইব্রেরিগুলি ইম্পোর্ট করবে।
এখন, আমাদের Spring MVC কনফিগারেশন ফাইল তৈরি করতে হবে। DispatcherServlet স্প্রিং এমভিসি রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য কাজ করে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example")
public class WebConfig implements WebMvcConfigurer {
// Define view resolver to resolve JSP pages
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
এখানে:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- Spring DispatcherServlet Configuration -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
এখানে, DispatcherServlet মেপিং করা হয়েছে যাতে সব রিকোয়েস্টের জন্য এটি কাজ করে।
এখন একটি Controller তৈরি করি যা ইউজারের রিকোয়েস্ট গ্রহণ করবে এবং একটি ভিউ রিটার্ন করবে।
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/home")
public class SimpleController {
@GetMapping
public String showHomePage() {
return "home"; // This will resolve to /WEB-INF/views/home.jsp
}
}
এখানে, @Controller অ্যানোটেশনটি স্প্রিংকে জানায় যে এই ক্লাসটি একটি কন্ট্রোলার। @RequestMapping এবং @GetMapping ব্যবহার করে /home URL প্যাটার্নের জন্য মেথডটি সংযুক্ত করা হয়েছে।
এখন একটি সিম্পল JSP পেজ তৈরি করা হবে যা home নামক ভিউ রিটার্ন করবে।
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Spring MVC Example</title>
</head>
<body>
<h1>Welcome to Spring MVC!</h1>
<p>This is the home page.</p>
</body>
</html>
এটি একটি সিম্পল HTML পেজ যা home ভিউ হিসেবে রেন্ডার হবে।
এখন আপনি স্প্রিং কনফিগারেশন এবং Spring MVC কন্ট্রোলার তৈরি করার পর অ্যাপ্লিকেশন রান করতে পারেন। আপনাকে অ্যাপ্লিকেশনটি একটি Servlet Container (যেমন Tomcat) এ ডিপ্লয় করতে হবে। আপনার URL হবে http://localhost:8080/your-app/home
এবং এই রিকোয়েস্টে home.jsp পেজ রেন্ডার হবে।
এটি ছিল একটি বেসিক Spring MVC অ্যাপ্লিকেশন তৈরির টিউটোরিয়াল, যেখানে আমরা:
স্প্রিং এমভিসি একটি শক্তিশালী ফ্রেমওয়ার্ক যা দ্রুত ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য আদর্শ এবং এতে ডেটা প্রোসেসিং, ভিউ রেন্ডারিং এবং রিকোয়েস্ট-রেসপন্স ম্যানেজমেন্ট অনেক সহজ হয়ে থাকে।
Read more