Spring MVC-তে Model এবং ModelMap দুটি ক্লাস ব্যবহার করা হয় ডেটা বা অবজেক্টগুলো Controller থেকে View (JSP বা অন্য View technologies) এ পাঠানোর জন্য। এগুলো Controller এবং View এর মধ্যে ডেটা আদান-প্রদান করে। Model এবং ModelMap মূলত একই কাজ করে, তবে তাদের ব্যবহারে কিছু পার্থক্য আছে।
Model:
Model একটি ইন্টারফেস যা Spring MVC-তে ডেটা বহন করতে ব্যবহৃত হয়। এটি Controller থেকে View এ ডেটা প্রেরণ করতে সাহায্য করে। Controller-এ কোনো ডেটা তৈরি করা হলে, সেই ডেটা Model অবজেক্টে সেট করা হয় এবং DispatcherServlet সেই Model কে View এ পাঠিয়ে দেয়।
Model ব্যবহার:
Model একটি ইন্টারফেস, তাই এটি সাধারণত addAttribute() মেথড ব্যবহার করে ডেটা সংরক্ষণ করে।
@Controller
public class HelloController {
@RequestMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("message", "Hello, Spring MVC!");
return "greeting"; // View name
}
}
Explanation:
Model model: Controller-এModelঅবজেক্ট ইনজেক্ট করা হয়েছে। এটি ডেটা (যেমন,message) View-এ পাঠানোর জন্য ব্যবহার হবে।model.addAttribute("message", "Hello, Spring MVC!"): Model-এ একটি অ্যাট্রিবিউটmessageযোগ করা হচ্ছে, যেটি View-এ পাঠানো হবে।return "greeting": View নাম"greeting"সরবরাহ করা হচ্ছে, যেখানে Model এর ডেটা রেন্ডার করা হবে (যেমন, JSP বা Thymeleaf পেজে)।
ModelMap:
ModelMap হলো Map ইন্টারফেসের একটি অ্যাপ্লিকেশন, যা Model এর মতো কাজ করে, তবে এটি Map স্টাইল ডেটা স্টোরেজের মাধ্যমে ডেটা সংরক্ষণ এবং রিটার্ন করে। ModelMap ব্যবহার করলে আপনি কনভেনশন অনুযায়ী ডেটা সংরক্ষণ করতে পারেন।
ModelMap ব্যবহার:
@Controller
public class HelloController {
@RequestMapping("/greeting")
public String greeting(ModelMap modelMap) {
modelMap.addAttribute("message", "Hello, Spring MVC with ModelMap!");
return "greeting";
}
}
Explanation:
ModelMap modelMap: Controller-এModelMapব্যবহার করা হয়েছে। এটি Map এর মতো ডেটা সংরক্ষণ করবে।modelMap.addAttribute("message", "Hello, Spring MVC with ModelMap!"): ModelMap-এ"message"অ্যাট্রিবিউট যোগ করা হচ্ছে।return "greeting": View নাম"greeting"প্রদান করা হচ্ছে, যেখানেModelMapএর ডেটা রেন্ডার হবে।
Model এবং ModelMap এর মধ্যে পার্থক্য:
- Inheritance:
- Model একটি ইন্টারফেস, যা মূলত
ModelAndViewবা@ModelAttributeসহ ব্যবহৃত হয়। - ModelMap হল
Mapএর মতো একটি কনটেইনার যা ডেটা কীগুলোর মাধ্যমে সংরক্ষণ করে। এটি Map ইন্টারফেস থেকে ইনহেরিট করা হয়।
- Model একটি ইন্টারফেস, যা মূলত
- Convenience:
- ModelMap সাধারণত বেশি জনপ্রিয়, কারণ এটি কনভেনশন অনুযায়ী কাজ করে এবং কীগুলির মাধ্যমে ডেটা অ্যাক্সেস করতে সুবিধাজনক।
- Implementation:
- Model-এ ডেটা যুক্ত করতে
addAttribute()ব্যবহার করা হয়। এটি Spring MVC এর বেসিক ধারণা। - ModelMap-এও
addAttribute()মেথড ব্যবহার করা হয়, তবে এটি কীগুলির মাধ্যমে ডেটা সরবরাহের জন্য সুবিধাজনক হতে পারে।
- Model-এ ডেটা যুক্ত করতে
- Usage:
- Model সাধারনত শুধুমাত্র Controller থেকে View-এ ডেটা পাঠানোর জন্য ব্যবহৃত হয়।
- ModelMap কেবলমাত্র View-এ ডেটা পাঠানোর জন্য নয়, এটি ডেটা স্টোরেজের মতোও কাজ করতে পারে।
Model vs ModelMap – কখন কোনটি ব্যবহার করবেন?
- Model:
- আপনি যদি সাধারণ Spring MVC অ্যাপ্লিকেশন তৈরি করতে চান যেখানে শুধুমাত্র View এবং Model মধ্যে ডেটা আদান-প্রদান হয়, তবে Model যথেষ্ট।
- এটি সহজ এবং সোজা ব্যবহারযোগ্য।
- ModelMap:
- আপনি যদি Map স্টাইল ডেটা সংরক্ষণ এবং অ্যাক্সেস করতে চান, তবে ModelMap বেশি সুবিধাজনক হতে পারে। এটি আপনার ডেটা সংরক্ষণের জন্য একটি কীগুলির মাধ্যমে ম্যাপ স্টাইল অফ অ্যাক্সেস প্রদান করে।
- যদি আপনার অ্যাপ্লিকেশনটিতে ডেটার কীগুলির সাথে কাজ করতে হয়, তবে ModelMap উপযুক্ত হতে পারে।
Spring MVC-তে Model এবং ModelMap এর উদাহরণ:
Model উদাহরণ:
@Controller
public class HelloController {
@RequestMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("message", "Hello from Spring MVC!");
return "greeting"; // View Name
}
}
greeting.jsp:
<html>
<body>
<h1>${message}</h1>
</body>
</html>
ModelMap উদাহরণ:
@Controller
public class HelloController {
@RequestMapping("/greeting")
public String greeting(ModelMap modelMap) {
modelMap.addAttribute("message", "Hello from Spring MVC with ModelMap!");
return "greeting"; // View Name
}
}
greeting.jsp:
<html>
<body>
<h1>${message}</h1>
</body>
</html>
উপসংহার:
Spring MVC-তে Model এবং ModelMap ডেটা এবং ভিউ এর মধ্যে সংযোগ স্থাপন করতে ব্যবহৃত হয়। Model একটি সাধারণ ইন্টারফেস যা ডেটা পাঠানোর জন্য ব্যবহৃত হয়, এবং ModelMap এটি একটি Map স্টাইল কনটেইনার যা কীগুলির মাধ্যমে ডেটা পরিচালনা করে। আপনার অ্যাপ্লিকেশনের চাহিদার উপর নির্ভর করে আপনি যে কোনো একটি ব্যবহার করতে পারেন, তবে অধিকাংশ ক্ষেত্রে ModelMap ব্যবহারের সুবিধা থাকে কারণ এটি কনভেনশনের ভিত্তিতে দ্রুত কাজ করতে পারে।
Spring MVC এ Model এবং ModelMap হল এমন দুটি ক্লাস যা Controller থেকে View-এ ডেটা পাঠানোর জন্য ব্যবহৃত হয়। এগুলি মূলত Model-View-Controller (MVC) আর্কিটেকচারে ডেটা ট্রান্সফার করতে সহায়ক।
যখন কন্ট্রোলার কোন HTTP রিকোয়েস্ট হ্যান্ডল করে, তখন কন্ট্রোলার সাধারণত কিছু ডেটা তৈরি করে এবং সেটি ভিউতে পাঠাতে হয়। Spring MVC এই ডেটা ভিউতে পাঠানোর জন্য Model বা ModelMap ব্যবহার করে।
1. Model:
Model একটি ইন্টারফেস যা controller থেকে view-এ ডেটা পাঠানোর জন্য ব্যবহৃত হয়। এটি মূলত Map এর মতো কাজ করে, যা কন্ট্রোলার থেকে ভিউতে ডেটা পাঠানোর জন্য একটি কন্টেইনার হিসেবে কাজ করে।
Model Interface:
public interface Model {
void addAttribute(String attributeName, Object attributeValue);
}
- addAttribute মেথডটি ব্যবহার করে, কন্ট্রোলার ভিউতে ডেটা পাঠাতে পারে। এখানে
attributeNameহল ভিউতে প্রদর্শন করার জন্য দেওয়া নাম এবংattributeValueহল ডেটা যা আমরা পাঠাতে চাই।
2. ModelMap:
ModelMap হল Model ইন্টারফেসের একটি বাস্তবায়ন (implementation) যা কন্ট্রোলার থেকে ভিউতে ডেটা পাঠানোর জন্য ব্যবহৃত হয়। এটি মূলত Map<String, Object> এর মতো কাজ করে, যেখানে আমরা key হিসেবে অ্যাট্রিবিউট নাম এবং value হিসেবে অ্যাট্রিবিউট ভ্যালু প্রদান করি।
ModelMap সহজে ডেটা পরিচালনা এবং অ্যাট্রিবিউটের সাথে কাজ করতে সহায়ক।
ModelMap ব্যবহার:
import org.springframework.ui.ModelMap;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class GreetingController {
@GetMapping("/greet")
public String greet(ModelMap model) {
model.addAttribute("message", "Hello, Spring MVC!");
return "greet"; // "greet.jsp" or other view template
}
}
ব্যাখ্যা:
- এখানে,
model.addAttribute("message", "Hello, Spring MVC!");এই লাইনটিmessageনামক অ্যাট্রিবিউটের সাথে একটি স্ট্রিং "Hello, Spring MVC!" ভ্যালু যুক্ত করছে এবং এটি ভিউতে পাঠানোর জন্য প্রস্তুত হচ্ছে। - তারপর কন্ট্রোলারটি greet.jsp বা অন্য কোনো ভিউ টেমপ্লেটে এই ডেটা রেন্ডার করবে।
Model এবং ModelMap এর মধ্যে পার্থক্য:
- Model হল একটি সাধারণ ইন্টারফেস যা ডেটা পাঠানোর জন্য ব্যবহার করা হয়।
- ModelMap হল Model ইন্টারফেসের একটি কনক্রিট (concrete) ক্লাস যা
Mapএর মতো কাজ করে এবং এটি ব্যবহারকারীর জন্য আরো সহজ এবং সুবিধাজনক।
তবে, Spring MVC তে ModelMap এবং Model এর মধ্যে কোনো ফাংশনাল পার্থক্য নেই, এবং আপনি যেকোনো একটি ব্যবহার করতে পারেন। ModelMap সাধারণত বেশি ব্যবহৃত হয় কারণ এটি Map এর মতো ব্যবহার করা যায়।
Model এবং ModelMap এর ব্যবহার উদাহরণ:
Model (Model interface) উদাহরণ:
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "hello"; // hello.jsp
}
}
hello.jsp:
<html>
<head>
<title>Spring MVC Example</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
ModelMap উদাহরণ:
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(ModelMap model) {
model.addAttribute("message", "Welcome to Spring MVC with ModelMap!");
return "hello"; // hello.jsp
}
}
hello.jsp:
<html>
<head>
<title>Spring MVC Example</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
Model এবং ModelMap এর সুবিধা:
- Data Transfer Between Controller and View:
- Model এবং ModelMap এর মাধ্যমে কন্ট্রোলার থেকে ভিউতে ডেটা সহজেই স্থানান্তরিত করা যায়।
- Separation of Concerns:
- Model এবং ModelMap ভিউ থেকে কন্ট্রোলার লজিক আলাদা রাখতে সাহায্য করে, যার ফলে কোড আরও পরিষ্কার এবং রক্ষণাবেক্ষণযোগ্য হয়।
- Flexible and Extensible:
- আপনি Model বা ModelMap এর মাধ্যমে যেকোনো ধরনের ডেটা পাঠাতে পারবেন, যেমন কমপ্লেক্স অবজেক্ট অথবা সিম্পল প্রিমিটিভ ডেটা।
- Multiple Data Transfer:
- একাধিক ডেটা একসাথে পাঠানোর জন্য Model বা ModelMap ব্যবহার করা যায়, যেমন মডেল অবজেক্ট বা মডেল কোলেকশন।
Conclusion:
Spring MVC তে Model এবং ModelMap হল গুরুত্বপূর্ণ উপাদান যা কন্ট্রোলার থেকে ভিউতে ডেটা স্থানান্তর করতে ব্যবহৃত হয়। Model একটি ইন্টারফেস যা ডেটা মডেল হিসাবে ব্যবহার করা হয়, এবং ModelMap হল এটি একটি কনক্রিট ক্লাস যা ডেটা কনটেইনার হিসেবে কাজ করে। আপনি যেকোনো একটি ব্যবহার করতে পারেন, তবে ModelMap অধিক ব্যবহৃত কারণ এটি বেশি ফ্লেক্সিবল এবং সুবিধাজনক।
Spring MVC-তে Model একটি গুরুত্বপূর্ণ উপাদান, যা কন্ট্রোলার এবং ভিউ (View) এর মধ্যে ডেটা স্থানান্তর করতে ব্যবহৃত হয়। Model Object ব্যবহার করে কন্ট্রোলার থেকে ভিউতে ডেটা পাঠানো এবং ভিউ থেকে কন্ট্রোলারে ডেটা গ্রহণ করা হয়। এটি অ্যাপ্লিকেশনটির ডেটা এবং ব্যবসায়িক লজিক (business logic) রেন্ডার করার জন্য অত্যন্ত গুরুত্বপূর্ণ।
Model Object কী?
Model হল Spring MVC-এর একটি অবজেক্ট যা ইউজারের রিকোয়েস্ট বা অ্যাপ্লিকেশনের অভ্যন্তরীণ ডেটা ধারণ করে। কন্ট্রোলার এই Model-এ ডেটা রাখে এবং ভিউ রেন্ডার করার সময় সেই ডেটা ব্যবহার করে।
Model Object এর মাধ্যমে ডেটা পাঠানো:
Spring MVC তে কন্ট্রোলার মেথডের মাধ্যমে Model অবজেক্ট ব্যবহার করে ডেটা ভিউতে পাঠানো হয়। এটি Model, ModelAndView, অথবা @ModelAttribute অ্যানোটেশন ব্যবহার করে করা যায়।
1. Model Object ব্যবহার করে ডেটা পাঠানো
Spring MVC-তে ডেটা কন্ট্রোলার থেকে ভিউতে পাঠানোর জন্য আমরা Model অবজেক্ট ব্যবহার করি। কন্ট্রোলার মেথডে Model অবজেক্টের addAttribute() মেথড ব্যবহার করা হয় ডেটা যুক্ত করার জন্য।
Controller Example:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class HomeController {
@GetMapping("/greet")
public String greet(Model model) {
model.addAttribute("message", "Hello, World!"); // Add data to Model
return "greet"; // Return the view name (greet.jsp or greet.html)
}
}
- model.addAttribute("message", "Hello, World!"): এখানে
messageনামে একটি অ্যাট্রিবিউট যুক্ত করা হয়েছে যেটি ভিউতে পাঠানো হবে। - কন্ট্রোলার মেথড
greet()ভিউয়ের নাম "greet" রিটার্ন করবে।
View Example (greet.jsp):
<!-- /WEB-INF/views/greet.jsp -->
<html>
<body>
<h1>${message}</h1> <!-- The data passed from the controller -->
</body>
</html>
- এখানে
${message}ভিউতে রেন্ডার করা হবে, যা কন্ট্রোলার থেকে Model Object এর মাধ্যমে পাঠানো হয়েছিল।
ModelAndView ব্যবহার করে ডেটা পাঠানো:
ModelAndView হল Spring MVC এর একটি ক্লাস যা একই সাথে Model (ডেটা) এবং View (ভিউ পেজ) রিটার্ন করতে সক্ষম। এটি একত্রে ভিউ এবং ডেটা ফেরত দেওয়ার একটি সুবিধাজনক উপায়।
ModelAndView Example:
import org.springframework.web.servlet.ModelAndView;
import org.springframework.stereotype.Controller;
@Controller
public class HomeController {
@GetMapping("/welcome")
public ModelAndView welcome() {
ModelAndView modelAndView = new ModelAndView("welcome"); // View name
modelAndView.addObject("message", "Welcome to Spring MVC!"); // Add data to Model
return modelAndView;
}
}
- এখানে ModelAndView অবজেক্টে ভিউ এবং ডেটা একত্রে রিটার্ন করা হয়েছে।
modelAndView.addObject("message", "Welcome to Spring MVC!")দিয়ে ডেটা যুক্ত করা হয়েছে এবং"welcome"নামক ভিউ রিটার্ন করা হয়েছে।
View Example (welcome.jsp):
<!-- /WEB-INF/views/welcome.jsp -->
<html>
<body>
<h1>${message}</h1> <!-- The data passed from the controller -->
</body>
</html>
@ModelAttribute অ্যানোটেশন ব্যবহার করে ডেটা পাঠানো:
@ModelAttribute অ্যানোটেশনটি Spring MVC-তে মডেল ডেটা অ্যাট্রিবিউট হিসেবে ব্যবহার করতে ব্যবহৃত হয়। এটি পদ্ধতির আর্গুমেন্ট হিসেবে ব্যবহারকারীকে কাস্টম অবজেক্ট (POJO) পাঠাতে সহায়ক।
@ModelAttribute Example:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.ui.Model;
@Controller
public class UserController {
@ModelAttribute("user")
public User getUser() {
// A method-level ModelAttribute, which will be available in all handler methods
User user = new User();
user.setName("John Doe");
user.setAge(25);
return user;
}
@GetMapping("/user")
public String showUserDetails(Model model) {
// The 'user' model attribute is already available
return "userDetails";
}
}
- @ModelAttribute("user"): এই অ্যানোটেশনটি
getUser()মেথডকে মডেল অবজেক্ট হিসেবে সংজ্ঞায়িত করে, যা অন্য মেথডে ব্যবহার করা যাবে। - showUserDetails() মেথডে
userমডেল অবজেক্টটি ভিউতে পাঠানো হয়েছে।
View Example (userDetails.jsp):
<!-- /WEB-INF/views/userDetails.jsp -->
<html>
<body>
<h1>User Information</h1>
<p>Name: ${user.name}</p>
<p>Age: ${user.age}</p> <!-- Displaying data from the user object -->
</body>
</html>
Model Object এর মাধ্যমে ডেটা গ্রহণ:
Model Object এর মাধ্যমে ডেটা গ্রহণ করতে, Spring MVC আপনাকে @RequestParam বা @ModelAttribute অ্যানোটেশন ব্যবহার করতে সহায়তা করে। এগুলি রিকোয়েস্টের প্যারামিটার বা ফর্ম ডেটাকে স্বয়ংক্রিয়ভাবে মডেল অবজেক্টে ম্যাপ করতে পারে।
@RequestParam Example (Form Data Handling):
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class UserController {
@GetMapping("/submitForm")
public String submitForm(@RequestParam("username") String username, @RequestParam("age") int age, Model model) {
model.addAttribute("username", username);
model.addAttribute("age", age);
return "userProfile";
}
}
- @RequestParam: এই অ্যানোটেশনটি রিকোয়েস্ট প্যারামিটার থেকে ডেটা গ্রহণ করতে ব্যবহৃত হয়।
View Example (userProfile.jsp):
<!-- /WEB-INF/views/userProfile.jsp -->
<html>
<body>
<h1>Profile</h1>
<p>Username: ${username}</p>
<p>Age: ${age}</p>
</body>
</html>
@ModelAttribute Example (Form Binding):
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
@Controller
public class UserController {
@PostMapping("/addUser")
public String addUser(@ModelAttribute User user, Model model) {
// The 'user' object is automatically populated from the form data
model.addAttribute("user", user);
return "userDetails";
}
}
- @ModelAttribute: ফর্ম থেকে আসা ডেটাকে কাস্টম পিওজিও (POJO) অবজেক্টে ম্যাপ করতে ব্যবহৃত হয়।
Form Example (addUser.jsp):
<form action="/addUser" method="POST">
<input type="text" name="name" />
<input type="text" name="age" />
<button type="submit">Submit</button>
</form>
Conclusion
Spring MVC তে Model Object অত্যন্ত গুরুত্বপূর্ণ কারণ এটি কন্ট্রোলার এবং ভিউ এর মধ্যে ডেটা স্থানান্তর করার জন্য ব্যবহৃত হয়। Model, ModelAndView, এবং @ModelAttribute এর মাধ্যমে আপনি ডেটা কন্ট্রোলার থেকে ভিউতে পাঠাতে এবং ফর্ম ডেটা বা কাস্টম অবজেক্ট কন্ট্রোলারে গ্রহণ করতে পারেন। Spring MVC আপনাকে এই ডেটা বিনিময়ের প্রক্রিয়া সহজ এবং নমনীয়ভাবে পরিচালনা করতে সহায়তা করে।
Spring MVC তে ModelAndView হল একটি ক্লাস যা মডেল এবং ভিউ উভয়কেই পরিচালনা করে। এটি Spring MVC অ্যাপ্লিকেশনে HTTP রিকোয়েস্টের জন্য মডেল ডেটা এবং ভিউ নির্ধারণ করতে ব্যবহৃত হয়। Model হল ডেটা যা কন্ট্রোলার থেকে ভিউতে পাঠানো হয়, এবং View হল ইউজার ইন্টারফেস যা সেই ডেটা প্রদর্শন করে।
ModelAndView Overview
- Model: Spring MVC এর Model হল ডেটা যা আপনি কন্ট্রোলার থেকে ভিউতে পাঠাতে চান। এটি সাধারণত একটি Map অবজেক্ট যা কন্ট্রোলারের মধ্যে ব্যবহৃত হয় এবং ভিউতে পৌঁছায়।
- View: এটি হল সেই উপাদান যা কন্ট্রোলার থেকে পাঠানো ডেটা ব্যবহার করে ইউজারকে উপস্থাপন করে। এটি সাধারণত একটি JSP, HTML, Thymeleaf বা অন্য যেকোনো ভিউ টেমপ্লেট হতে পারে।
ModelAndView আপনাকে এই দুটি (মডেল এবং ভিউ) একত্রে পরিচালনা করার সুবিধা দেয়। এটি Model এর সাথে View নির্ধারণ করে এবং রিকোয়েস্ট-রেসপন্স সাইকেল শেষে ভিউ এবং ডেটা প্রেরণ করে।
ModelAndView কিভাবে কাজ করে?
ModelAndView ক্লাসটি Spring MVC-তে দুটি প্রধান ফাংশনality প্রদান করে:
- Model - কন্ট্রোলার থেকে ভিউতে ডেটা পাঠানোর জন্য।
- View - কন্ট্রোলারের হ্যান্ডলার মেথডে ফেরত পাঠানো ভিউ, যা সাধারণত HTML বা JSP টেমপ্লেট।
Spring MVC Example: ModelAndView
Step 1: Controller Class with ModelAndView
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HomeController {
@RequestMapping("/home")
public ModelAndView home() {
// Create a new ModelAndView object
ModelAndView modelAndView = new ModelAndView();
// Adding model attributes (data)
modelAndView.addObject("message", "Welcome to Spring MVC!");
modelAndView.addObject("date", new java.util.Date());
// Setting the view name (JSP page)
modelAndView.setViewName("home"); // home.jsp or home.html
return modelAndView; // Return ModelAndView
}
}
ModelAndViewঅবজেক্ট তৈরি করা হয় এবং এর মধ্যে মডেল ডেটা যোগ করা হয় (যেমন "message" এবং "date")।addObject()মেথডটি ব্যবহার করে ডেটা (মডেল) ভিউতে পাঠানো হয়।setViewName()মেথডটি ভিউ নাম সেট করে, যা Spring MVC এর ভিউ রেজোলভার (View Resolver) দ্বারা রেন্ডার হবে। এখানে,homeনামে একটি JSP বা HTML ফাইল ভিউ হিসেবে রেন্ডার হবে।
Step 2: View (home.jsp)
<!-- home.jsp -->
<html>
<head><title>Spring MVC Example</title></head>
<body>
<h1>${message}</h1> <!-- This will display the message from the model -->
<p>Current Date: ${date}</p> <!-- This will display the current date -->
</body>
</html>
${message}এবং${date}হল Spring Expression Language (SpEL) এর মাধ্যমে মডেল ডেটা এক্সেস করার পদ্ধতি। এগুলো ModelAndView থেকে পাঠানো ডেটার মান।
Step 3: Spring Configuration (view resolver)
Spring MVC অ্যাপ্লিকেশনের জন্য view resolver কনফিগারেশন প্রয়োজন। যদি Spring Boot ব্যবহার না করেন, তবে এই কনফিগারেশন dispatcher-servlet.xml ফাইলে করতে হবে।
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
এখানে, prefix /WEB-INF/views/ নির্ধারণ করা হয়েছে এবং suffix .jsp যা Spring MVC কে জানিয়ে দেয় যে ভিউ ফাইলগুলির নাম /WEB-INF/views/ ডিরেক্টরির মধ্যে .jsp এক্সটেনশন সহ থাকবে।
ModelAndView এর আরও কিছু বৈশিষ্ট্য
- Multiple Objects in Model: একাধিক ডেটা একসাথে পাঠানো যায়।
modelAndView.addObject("key", value)ব্যবহার করে একাধিক অটোমেটিক মডেল ডেটা পাঠানো যায়।
Returning ModelAndView with Redirect: আপনি মডেল এবং ভিউ নিয়ে রিডাইরেক্টও করতে পারেন।
@RequestMapping("/redirect") public ModelAndView redirectExample() { return new ModelAndView("redirect:/home"); // Redirect to "/home" URL }ModelAndView with JSON (RESTful Services): আপনি JSON রেসপন্স প্রদান করতে পারেন @ResponseBody অ্যানোটেশন সহ ModelAndView ব্যবহার করে।
@RequestMapping("/json") @ResponseBody public ModelAndView getJson() { ModelAndView modelAndView = new ModelAndView(); modelAndView.addObject("message", "JSON Response"); return modelAndView; }
ModelAndView vs Model + View
ModelAndView: এটি Model এবং View একত্রে সেট করে, একটিই অবজেক্টে সমস্ত ডেটা এবং ভিউ কোড রাখে।ModelএবংView: আপনিModelএবংViewদুটি আলাদাভাবে ব্যবহার করতে পারেন, যেখানে আপনি প্রথমে Model তৈরি করবেন এবং পরে View সেট করবেন।
@RequestMapping("/example")
public String example(Model model) {
model.addAttribute("message", "Hello, Spring MVC!");
return "exampleView"; // Returns a view name
}
এখানে Model শুধুমাত্র ডেটা ধারণ করে এবং View নামটি আলাদাভাবে রিটার্ন হয়।
Conclusion
Spring MVC তে ModelAndView ক্লাসটি খুবই কার্যকরী একটি টুল যা ভিউ এবং মডেল ডেটা একত্রে পরিচালনা করতে সাহায্য করে। এটি আপনাকে সহজে ডেটা এবং ভিউ নির্ধারণ করে HTTP রিকোয়েস্টের জন্য রেসপন্স তৈরি করতে সহায়ক। ModelAndView এর মাধ্যমে ডেটা পাঠানোর সাথে সাথে ভিউ কনফিগার করা যায়, যা Spring MVC অ্যাপ্লিকেশনের জন্য একটি সরল এবং কার্যকরী কৌশল।
Model এবং ModelMap হল স্প্রিং এমভিসি ফ্রেমওয়ার্কের গুরুত্বপূর্ণ অংশ, যা কন্ট্রোলার এবং ভিউর মধ্যে ডাটা শেয়ার করার জন্য ব্যবহৃত হয়। এগুলি কন্ট্রোলারের মেথড থেকে ডাটা (যেমন, ইউজার ইনপুট, ব্যবসায়িক লজিকের আউটপুট) ভিউ (যেমন, JSP, Thymeleaf) তে পাঠানোর জন্য ব্যবহৃত হয়। তবে, Model এবং ModelMap কিছুটা আলাদা হলেও, তাদের কাজ প্রায় একই।
১. Model:
Model হল একটি ইন্টারফেস যা কন্ট্রোলার এবং ভিউর মধ্যে ডাটা আদান-প্রদান করতে ব্যবহৃত হয়। এটি সাধারণত কন্ট্রোলারের মেথডে ডাটা অ্যাট্রিবিউট হিসেবে যুক্ত করা হয় এবং ভিউতে ওই ডাটা প্রদর্শিত হয়।
২. ModelMap:
ModelMap হল Map ইন্টারফেসের একটি বাস্তবায়ন যা মডেল ডাটাকে key-value pair আকারে স্টোর করে। এটি ডাটা পাঠানোর জন্য আরেকটি পদ্ধতি এবং এটি Model এর চেয়ে একটু বেশি ফিচারযুক্ত, তবে ব্যবহারে তারা প্রায় একে অপরের সমান।
Model এবং ModelMap এর ব্যবহার
স্প্রিং এমভিসিতে Model এবং ModelMap এর মাধ্যমে কন্ট্রোলার থেকে ভিউতে ডাটা পাঠানোর উদাহরণ দেখানো হলো।
উদাহরণ: Model এবং ModelMap ব্যবহার
১. Controller:
এখানে একটি কন্ট্রোলার ক্লাস দেখানো হলো যা Model এবং ModelMap উভয়ই ব্যবহার করে ডাটা ভিউতে পাঠায়।
@Controller
public class UserController {
@RequestMapping("/welcome")
public String showWelcomePage(Model model) {
// Using Model to add data
model.addAttribute("message", "Welcome to Spring MVC using Model!");
return "welcome"; // This will resolve to /WEB-INF/views/welcome.jsp
}
@RequestMapping("/hello")
public String showHelloPage(ModelMap modelMap) {
// Using ModelMap to add data
modelMap.addAttribute("greeting", "Hello, Spring MVC using ModelMap!");
return "hello"; // This will resolve to /WEB-INF/views/hello.jsp
}
}
কন্ট্রোলার ব্যাখ্যা:
@RequestMapping("/welcome")URL রিকোয়েস্ট/welcomeএ আসলে, কন্ট্রোলারের showWelcomePage() মেথড কল হবে। এখানে Model ব্যবহার করে"message"অ্যাট্রিবিউট যোগ করা হয়েছে এবং ভিউতে পাঠানো হয়েছে।@RequestMapping("/hello")URL রিকোয়েস্ট/helloএ আসলে, কন্ট্রোলারের showHelloPage() মেথড কল হবে। এখানে ModelMap ব্যবহার করে"greeting"অ্যাট্রিবিউট যোগ করা হয়েছে এবং ভিউতে পাঠানো হয়েছে।
২. View (JSP):
এখন, কন্ট্রোলার থেকে পাঠানো ডাটা ভিউতে প্রদর্শিত হবে। নিচে দুটি JSP ভিউ-এর উদাহরণ দেয়া হলো।
welcome.jsp (JSP উদাহরণ):
<html>
<body>
<h1>${message}</h1> <!-- Displaying the message from Model -->
</body>
</html>
এখানে ${message} মডেল থেকে পাঠানো ডাটা দেখাচ্ছে, যা "Welcome to Spring MVC using Model!"।
hello.jsp (JSP উদাহরণ):
<html>
<body>
<h1>${greeting}</h1> <!-- Displaying the greeting from ModelMap -->
</body>
</html>
এখানে ${greeting} মডেল ম্যাপ থেকে পাঠানো ডাটা দেখাচ্ছে, যা "Hello, Spring MVC using ModelMap!"।
Model এবং ModelMap এর মধ্যে পার্থক্য:
| বৈশিষ্ট্য | Model | ModelMap |
|---|---|---|
| প্রকার | ইন্টারফেস | Map ইন্টারফেসের বাস্তবায়ন |
| ব্যবহার | সাধারণত ভিউতে ডাটা পাঠানোর জন্য ব্যবহৃত হয় | সাধারণত key-value pair আকারে ডাটা ব্যবস্থাপনার জন্য ব্যবহৃত হয় |
| ফিচার | সীমিত ফিচার | বেশি ফিচার, বিশেষ করে Map এর সুবিধা রয়েছে |
| অভ্যন্তরীণ স্টোরেজ | ডাটা গুলি অ্যাট্রিবিউট হিসেবে সংরক্ষিত হয় | key-value pair হিসেবে ডাটা সংরক্ষিত হয় |
৩. Model এবং ModelMap এর ব্যবহার:
স্প্রিং এমভিসিতে Model এবং ModelMap ব্যবহারের জন্য কোন একটির ব্যবহার বিশেষভাবে ভাল বলা যায় না, কারণ উভয়ের কাজ প্রায় সমান। তবে, ModelMap একটু বেশি ফিচারযুক্ত এবং এটি Map ইন্টারফেসের মাধ্যমে অনেক ধরনের ডাটা সংরক্ষণ করতে সাহায্য করে। অন্যদিকে, Model সাধারণত একটি সরল উপায় হিসেবে ব্যবহার করা হয়।
উপসংহার:
- Model এবং ModelMap উভয়ই স্প্রিং এমভিসিতে কন্ট্রোলার থেকে ভিউতে ডাটা পাঠানোর জন্য ব্যবহৃত হয়।
- Model একটি সাধারণ ইন্টারফেস এবং সহজে ডাটা অ্যাড করার জন্য ব্যবহৃত হয়, যেখানে ModelMap আরো বেশি ফিচারযুক্ত এবং
Mapস্ট্রাকচার ব্যবহার করে। - স্প্রিং এমভিসিতে এই দুটি উপাদান ব্যবহার করে মডেল ডাটা ভিউতে পাঠানো হয় এবং ভিউতে সেই ডাটা প্রদর্শিত হয়।
এইভাবে, স্প্রিং এমভিসি ফ্রেমওয়ার্কে Model এবং ModelMap ব্যবহার করে কন্ট্রোলার এবং ভিউয়ের মধ্যে ডাটা শেয়ার করা যায়।
Read more