@Controller অ্যানোটেশনটি Spring Framework-এর একটি গুরুত্বপূর্ণ অ্যানোটেশন যা Spring MVC-তে কন্ট্রোলার ক্লাস চিহ্নিত করতে ব্যবহৃত হয়। এই অ্যানোটেশনটি Spring MVC এর কন্ট্রোলারের ভূমিকা পালন করে এবং এটি HTTP রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য কন্ট্রোলার মেথড তৈরি করতে ব্যবহৃত হয়।
@Controller অ্যানোটেশনটি Spring IoC কনটেইনারে একটি কম্পোনেন্ট হিসেবে ক্লাসটিকে চিহ্নিত করে, যার মাধ্যমে এটি Spring MVC রিকোয়েস্ট-রেসপন্স সাইকেলে অংশগ্রহণ করতে সক্ষম হয়।
@Controller অ্যানোটেশন এর মূল উদ্দেশ্য:
- HTTP রিকোয়েস্ট হ্যান্ডলিং:
@Controllerঅ্যানোটেশন ব্যবহৃত ক্লাস HTTP রিকোয়েস্ট হ্যান্ডলিংয়ের জন্য দায়িত্বপ্রাপ্ত। এটি Model-View-Controller (MVC) আর্কিটেকচার অনুযায়ী ভিউ এবং কন্ট্রোলারের মধ্যে সম্পর্ক স্থাপন করে। - রাউটিং:
@RequestMappingবা অন্যান্য HTTP মেথডের অ্যানোটেশন (যেমন@GetMapping,@PostMapping) এর সাথে ব্যবহার করে HTTP রিকোয়েস্টটি নির্দিষ্ট কন্ট্রোলার মেথডে রাউট করতে ব্যবহৃত হয়। - View Selection:
কন্ট্রোলার সাধারণত মডেল ডেটা প্রক্রিয়া করে এবং একটি ভিউ রিটার্ন করে, যা UI তে তথ্য উপস্থাপন করবে।
@Controller অ্যানোটেশন এর ব্যবহার:
1. সাধারণ কন্ট্রোলার উদাহরণ
@Controller অ্যানোটেশন ব্যবহার করে একটি সাধারণ কন্ট্রোলার তৈরি করা:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/home")
public String home(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home"; // home.jsp বা home.html ভিউ রিটার্ন করবে
}
}
এখানে:
@Controllerঅ্যানোটেশনটি HomeController ক্লাসটিকে কন্ট্রোলার হিসেবে চিহ্নিত করছে।@RequestMapping("/home")রিকোয়েস্টটি/homeURL-এ প্রাপ্ত হলেhome()মেথডটি কল হবে।model.addAttribute()ব্যবহার করে ভিউতে ডেটা পাঠানো হচ্ছে, যাতে "home" ভিউতে মেসেজ প্রদর্শিত হয়।
2. HTTP Method Mapping
Spring MVC-তে বিভিন্ন HTTP মেথড যেমন GET, POST, PUT, DELETE কন্ট্রোলারের মেথডে ম্যাপ করার জন্য @RequestMapping বা অ্যানোটেশন স্ন্যাপশট ব্যবহার করা যায়। উদাহরণস্বরূপ:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String showLoginPage() {
return "login"; // login.jsp বা login.html ভিউ রিটার্ন করবে
}
@PostMapping("/login")
public String loginUser(String username, String password) {
// authentication logic here
return "welcome"; // successful login leads to welcome page
}
}
এখানে:
@GetMapping("/login")GET রিকোয়েস্টের জন্য ব্যবহৃত হয়েছে যা লগইন পেজ প্রদর্শন করবে।@PostMapping("/login")POST রিকোয়েস্টের জন্য ব্যবহৃত হয়েছে যা লগইন করার পরে কার্যক্রম পরিচালনা করবে।
3. PathVariable এবং RequestParam ব্যবহার
@PathVariable এবং @RequestParam ব্যবহার করে ডাইনামিক ভ্যালু সংগ্রহ করা যেতে পারে:
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class UserController {
// @PathVariable উদাহরণ
@RequestMapping("/user/{id}")
public String getUserById(@PathVariable("id") int id, Model model) {
// id দিয়ে ইউজার তথ্য অনুসন্ধান এবং মডেল পাস করা
model.addAttribute("userId", id);
return "userProfile";
}
// @RequestParam উদাহরণ
@RequestMapping("/search")
public String searchUser(@RequestParam("query") String query, Model model) {
// সার্চ কুয়েরি অনুসন্ধান এবং মডেল পাস করা
model.addAttribute("query", query);
return "searchResults";
}
}
এখানে:
@PathVariable("id")ব্যবহার করে URL প্যাথ থেকে ডাইনামিক ভ্যালু{id}সংগ্রহ করা হয়েছে।@RequestParam("query")ব্যবহার করে URL প্যারামিটার থেকেqueryভ্যালু সংগ্রহ করা হয়েছে।
4. ModelAttribute এবং Binding:
@ModelAttribute ব্যবহার করে ইউজারের ইনপুট বা ডেটা মডেল অবজেক্টে ব্যান্ড করা যায়।
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserController {
@RequestMapping("/userForm")
public String showForm() {
return "userForm"; // userForm.jsp ভিউ
}
@RequestMapping("/submitForm")
public String submitForm(@ModelAttribute("user") User user) {
// মডেল অবজেক্টের ডেটা প্রক্রিয়া করা
return "userDetails"; // userDetails.jsp ভিউ
}
}
এখানে:
@ModelAttribute("user")ব্যবহার করেUserঅবজেক্টকে ফর্ম ডেটা মডেল হিসেবে ব্যান্ড করা হয়েছে।- ইউজার ইনপুট সংগ্রহের পর সেই ইনপুট
Userঅবজেক্টে ম্যাপ করা হবে।
5. Redirecting and Forwarding
Spring MVC-তে রিকোয়েস্ট রিডাইরেক্ট বা ফরওয়ার্ড করার জন্য redirect: এবং forward: প্রিফিক্স ব্যবহার করা হয়।
উদাহরণ: Redirect:
@RequestMapping("/loginSuccess")
public String loginSuccess() {
return "redirect:/home"; // /home URL-এ রিডাইরেক্ট করবে
}
উদাহরণ: Forward:
@RequestMapping("/forwardExample")
public String forwardExample() {
return "forward:/anotherPage"; // anotherPage পেজে ফরওয়ার্ড হবে
}
Conclusion:
Spring MVC-তে @Controller অ্যানোটেশন কন্ট্রোলার ক্লাস চিহ্নিত করে, যা HTTP রিকোয়েস্ট হ্যান্ডলিং এবং মডেল-ভিউ সম্পর্ক স্থাপন করে। এটি Spring MVC অ্যাপ্লিকেশনে ভিউ এবং কন্ট্রোলারের মধ্যে যোগাযোগ সঠিকভাবে পরিচালনা করতে সাহায্য করে। @Controller এবং অন্যান্য অ্যানোটেশন (যেমন @RequestMapping, @GetMapping, @PostMapping, @ModelAttribute) ব্যবহার করে স্পষ্টভাবে HTTP রিকোয়েস্ট হ্যান্ডলিং এবং ডেটা প্রসেসিং সম্ভব হয়।
Read more