DispatcherServlet হল Spring MVC-এর একটি গুরুত্বপূর্ণ উপাদান যা সমস্ত HTTP রিকোয়েস্টের জন্য কেন্দ্রীয় রুটার বা ফ্রন্ট কন্ট্রোলার হিসেবে কাজ করে। এটি Spring MVC অ্যাপ্লিকেশনের মূল অংশ এবং MVC (Model-View-Controller) আর্কিটেকচারের মধ্যে সমন্বয় তৈরি করে। যখনই একটি HTTP রিকোয়েস্ট আসে, DispatcherServlet সেটি গ্রহণ করে এবং উপযুক্ত প্রক্রিয়া সম্পাদনের জন্য রিকোয়েস্টকে যথাযথ কম্পোনেন্টে রিডাইরেক্ট করে।
DispatcherServlet এর প্রধান ভূমিকা:
- রুটিং এবং রিকোয়েস্ট ডিসপ্যাচিং (Routing and Request Dispatching):
- DispatcherServlet প্রথমে HTTP রিকোয়েস্ট গ্রহণ করে এবং তা বিভিন্ন Spring MVC কনফিগারেশনের মাধ্যমে সঠিক Controller এবং View-এ রিডাইরেক্ট করে। এটি মূলত রিকোয়েস্ট রুটিং এবং মডেল-ভিউ কন্ট্রোলারের মধ্যে সমন্বয়কারী হিসেবে কাজ করে।
- Controller-এ রিকোয়েস্ট পাঠানো:
- DispatcherServlet রিকোয়েস্ট অনুযায়ী Controller-এর মেথড কল করে। Controller মেথড থেকে Model তৈরি হয় এবং DispatcherServlet সেটি View-এ পাঠায়।
- View Resolver-এ রিকোয়েস্ট পাঠানো:
- Controller থেকে প্রাপ্ত Model এবং View নাম নিয়ে DispatcherServlet উপযুক্ত View Resolver ব্যবহার করে View তৈরি করে এবং সেটি রেন্ডার করতে ব্যবহারকারীকে পাঠায়। এটি ব্যবহারকারীর কাছে HTML বা JSP টেমপ্লেট রেন্ডার করে দেখায়।
- HandlerMapping এবং HandlerAdapter:
- DispatcherServlet, HandlerMapping এবং HandlerAdapter-এর মাধ্যমে রিকোয়েস্টটি সঠিক Controller মেথডে পাঠানোর জন্য কাজ করে। HandlerMapping URL প্যাটার্ন অনুযায়ী সঠিক Controller মেথডের সাথে রিকোয়েস্টটি মেলান এবং HandlerAdapter সেই মেথডটিতে রিকোয়েস্ট পাঠানোর জন্য ব্যবহার হয়।
- Exception Handling:
- DispatcherServlet ত্রুটির জন্য একটি Global Exception Handler ব্যবহার করতে পারে, যাতে যেকোনো Controller থেকে উঠানো Exception গুলি হ্যান্ডেল করা যায়।
- CSRF, Security, Filters:
- DispatcherServlet Spring Security এবং অন্যান্য ফিল্টারের মাধ্যমে নিরাপত্তা চেক করেও রিকোয়েস্ট গুলি প্রক্রিয়া করতে পারে।
DispatcherServlet কনফিগারেশন
Spring MVC অ্যাপ্লিকেশনে DispatcherServlet কনফিগার করা হয় web.xml ফাইলের মাধ্যমে অথবা Spring Boot ব্যবহার করলে Java Config এর মাধ্যমে।
1. Traditional web.xml Configuration (Non-Spring Boot Applications)
web.xml ফাইলে DispatcherServlet কনফিগার করা হয় যাতে এটি সমস্ত HTTP রিকোয়েস্ট প্রসেস করতে পারে।
<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">
<!-- 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> <!-- Dispatch all requests to this servlet -->
</servlet-mapping>
</web-app>
Explanation:
<servlet>: এখানে DispatcherServlet কে Spring MVC রিকোয়েস্ট হ্যান্ডলারের জন্য কনফিগার করা হয়েছে।<servlet-mapping>: DispatcherServlet কে সমস্ত রিকোয়েস্টের জন্য রুটিং দেওয়া হয়েছে, অর্থাৎ/URL প্যাটার্নে আসা সব রিকোয়েস্ট DispatcherServlet দ্বারা প্রক্রিয়া করা হবে।
2. Spring Boot Configuration (Java-based Configuration)
Spring Boot অ্যাপ্লিকেশনে DispatcherServlet কনফিগারেশন সাধারণত স্বয়ংক্রিয়ভাবে করা হয়। তবে, আপনি Java Config ব্যবহার করেও DispatcherServlet কনফিগার করতে পারেন।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
@Bean
public DispatcherServlet dispatcherServlet() {
return new DispatcherServlet();
}
// Additional configuration if needed
}
Explanation:
@EnableWebMvc: Spring MVC-কে সক্রিয় করার জন্য এই অ্যানোটেশনটি ব্যবহার করা হয়।DispatcherServletBean: DispatcherServlet কে Bean হিসেবে কনফিগার করা হয়েছে।
DispatcherServlet এর কাজের প্রক্রিয়া:
- HTTP রিকোয়েস্ট আসলে DispatcherServlet কাজ শুরু করে:
- DispatcherServlet প্রথমে রিকোয়েস্টটি গ্রহণ করে এবং URL প্যাটার্ন অনুযায়ী Controller এর মেথডে পাঠায়।
- DispatcherServlet Controller কে কল করে:
- DispatcherServlet HTTP রিকোয়েস্টের জন্য সঠিক Controller নির্বাচন করে এবং সেই Controller-এ রিকোয়েস্ট পাঠায়।
- Model এবং View তৈরি হয়:
- Controller ডেটা প্রক্রিয়া করে একটি Model তৈরি করে এবং এটি DispatcherServlet কে ফিরিয়ে দেয়। DispatcherServlet এই Model এবং View নাম ব্যবহার করে উপযুক্ত View তৈরি করে।
- View Resolver নির্বাচন করা হয়:
- DispatcherServlet View Resolver ব্যবহার করে Model এবং View নাম থেকে সঠিক View তৈরি করে, যা ব্যবহারকারীকে প্রদর্শন করা হয়।
- Response তৈরি করা হয় এবং রিটার্ন করা হয়:
- DispatcherServlet তৈরি করা View-টি ব্যবহারকারীকে রিটার্ন করে।
DispatcherServlet এর সিকিউরিটি এবং অন্যান্য কার্যক্রম:
- Authentication এবং Authorization:
- DispatcherServlet নিরাপত্তা চেক করার জন্য Spring Security ব্যবহার করতে পারে। এটি সমস্ত রিকোয়েস্টকে Spring Security কনফিগারেশনের মাধ্যমে প্রক্রিয়া করে।
- Exception Handling:
- DispatcherServlet একটি কেন্দ্রীয় স্থান হিসেবে কাজ করে এবং সমস্ত অ্যাপ্লিকেশন এক্সেপশন হ্যান্ডলিংয়ের জন্য Global Exception Handler ব্যবহার করতে পারে।
- Filter Integration:
- DispatcherServlet ফিল্টারের মাধ্যমে রিকোয়েস্টে কোনো অতিরিক্ত কার্যকলাপ যেমন লগিং, CSRF প্রতিরোধ বা ইনপুট ভ্যালিডেশন পরিচালনা করতে পারে।
উপসংহার:
DispatcherServlet হল Spring MVC অ্যাপ্লিকেশনের মূল অংশ যা রিকোয়েস্টের প্রক্রিয়া এবং সমস্ত HTTP রিকোয়েস্টের জন্য উপযুক্ত Controller এবং View গুলি নির্ধারণ করে। এটি Spring MVC এর মূল কন্ট্রোলার হিসেবে কাজ করে এবং রিকোয়েস্ট-প্রসেসিং চেইনের মধ্যে সমস্ত কার্যকলাপ পরিচালনা করে। Spring MVC অ্যাপ্লিকেশন গুলিতে DispatcherServlet কনফিগারেশন এবং কার্যপ্রণালী সঠিকভাবে না থাকলে, রিকোয়েস্ট হ্যান্ডলিং এবং View রেন্ডারিং সঠিকভাবে হবে না।
DispatcherServlet হল Spring MVC ফ্রেমওয়ার্কের মূল কম্পোনেন্ট যা সমস্ত HTTP রিকোয়েস্ট এবং রেসপন্সকে প্রসেস এবং পরিচালনা করে। এটি front controller হিসেবে কাজ করে, যা Model-View-Controller (MVC) আর্কিটেকচার প্যাটার্নে রিকোয়েস্টগুলোকে সঠিক কন্ট্রোলার, ভিউ এবং মডেলের সাথে সম্পর্কিত করে।
DispatcherServlet এর কাজ:
DispatcherServlet একটি সেন্ট্রাল কন্ট্রোলার হিসেবে কাজ করে, যা সমস্ত রিকোয়েস্ট রিসিভ করে এবং সেগুলিকে উপযুক্ত কন্ট্রোলারে বিতরণ করে। এটি অ্যাপ্লিকেশনের সমস্ত প্রক্রিয়া সমন্বয় করে এবং ব্যবহৃত মডেল, ভিউ, এবং কন্ট্রোলারের মধ্যে সমন্বয় নিশ্চিত করে।
DispatcherServlet এর কাজের ধাপগুলো নিচে বিস্তারিত দেওয়া হলো:
DispatcherServlet এর কাজের ধাপগুলো:
- Request Handling:
- যখন একটি HTTP রিকোয়েস্ট আসবে, DispatcherServlet প্রথমে সেই রিকোয়েস্টটি গ্রহণ করে। এটি সমস্ত রিকোয়েস্টের প্রথম পয়েন্ট (entry point) হিসেবে কাজ করে।
- DispatcherServlet কনফিগারেশন অনুসারে রিকোয়েস্ট রিসিভ করবে এবং সঠিক কন্ট্রোলারে পাঠাবে।
- HandlerMapping (Request Mapping):
- DispatcherServlet রিকোয়েস্ট পেয়ে HandlerMapping চেক করে কোন কন্ট্রোলার সেই রিকোয়েস্টটি হ্যান্ডেল করবে। এটি কন্ট্রোলার মেথডে রিকোয়েস্টটি ম্যাপ করে (উদাহরণস্বরূপ,
@RequestMapping,@GetMappingইত্যাদি অ্যানোটেশন ব্যবহার করে)।
- DispatcherServlet রিকোয়েস্ট পেয়ে HandlerMapping চেক করে কোন কন্ট্রোলার সেই রিকোয়েস্টটি হ্যান্ডেল করবে। এটি কন্ট্রোলার মেথডে রিকোয়েস্টটি ম্যাপ করে (উদাহরণস্বরূপ,
- Handler Execution:
- HandlerMapping এর মাধ্যমে DispatcherServlet সঠিক কন্ট্রোলার এবং তার মেথডে রিকোয়েস্ট পাঠিয়ে দেয়। কন্ট্রোলার সেই রিকোয়েস্ট প্রক্রিয়া করবে এবং মডেল অবজেক্ট তৈরি করবে। কন্ট্রোলার মেথড একটি ভিউ বা রেসপন্স প্রদান করবে।
- ViewResolver:
- DispatcherServlet কন্ট্রোলার থেকে রিটার্ন হওয়া ভিউ নামটি ViewResolver এর মাধ্যমে যাচাই করে, এবং সঠিক ভিউ টেমপ্লেটটি নির্বাচন করা হয় (যেমন, JSP, Thymeleaf, ফ্রি মার্কার, ইত্যাদি)।
- Response Generation:
- DispatcherServlet ভিউ থেকে ডেটা রেন্ডার করে এবং HTTP রেসপন্সে সেটি ব্যবহারকারীর ব্রাউজারে পাঠিয়ে দেয়।
- Exception Handling:
- DispatcherServlet প্রক্রিয়ার মধ্যে যদি কোনো এক্সেপশন ঘটে, তাহলে এটি HandlerExceptionResolver ব্যবহারের মাধ্যমে সেই এক্সেপশনটি হ্যান্ডেল করে।
DispatcherServlet এর প্রধান ভূমিকা:
- রুট রিকোয়েস্ট ম্যানেজমেন্ট:
- DispatcherServlet Spring MVC অ্যাপ্লিকেশনের জন্য রুট রিকোয়েস্ট এবং রেসপন্স পরিচালনা করে।
- Request Dispatching:
- DispatcherServlet বিভিন্ন রিকোয়েস্ট হ্যান্ডলিং কন্ট্রোলারের সাথে রিকোয়েস্টগুলোকে পাঠায়। এটি কন্ট্রোলার এবং মডেল ভিউের মধ্যে যোগাযোগ স্থাপন করে।
- Model and View Integration:
- এটি কন্ট্রোলার থেকে মডেল এবং ভিউ অবজেক্ট গ্রহণ করে এবং ভিউ টেমপ্লেটে মডেল ডেটা রেন্ডার করে।
- Exception Handling:
- DispatcherServlet অ্যাপ্লিকেশন মধ্যে ঘটে যাওয়া এক্সেপশনগুলো (যেমন 404, 500 ইত্যাদি) সঠিকভাবে হ্যান্ডেল করে।
- Dispatcher Servlet এর Initialization:
- web.xml বা Java-based কনফিগারেশনে DispatcherServlet কনফিগার করা হয় যা Spring MVC ফ্রেমওয়ার্কের প্রাথমিক কনফিগারেশন সেটআপ হয়।
DispatcherServlet এর কনফিগারেশন উদাহরণ:
web.xml ফাইলে DispatcherServlet কনফিগারেশন:
<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">
<!-- 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 এর জন্য সার্ভলেট কনফিগার করা হয়েছে, যা সমস্ত HTTP রিকোয়েস্ট রিসিভ করবে এবং তা সঠিক কন্ট্রোলারে পাঠাবে।
Spring MVC Configuration (Java Config):
Spring 3.x থেকে Java-based configuration এর মাধ্যমে DispatcherServlet কনফিগার করা যায়।
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
এখানে:
- @EnableWebMvc: Spring MVC সক্রিয় করার জন্য।
- viewResolver: HTML বা JSP ফাইলগুলি রেন্ডার করার জন্য ViewResolver কনফিগারেশন।
DispatcherServlet এর স্টেপ বাই স্টেপ কার্যক্রম:
- HTTP Request আসবে:
- DispatcherServlet প্রথমে রিকোয়েস্ট গ্রহণ করে।
- Handler Mapping:
- DispatcherServlet রিকোয়েস্টের জন্য সঠিক কন্ট্রোলার এবং মেথড চয়ন করে (Handler Mapping)।
- Controller Execution:
- DispatcherServlet কন্ট্রোলারে রিকোয়েস্ট পাঠিয়ে সেই রিকোয়েস্ট প্রক্রিয়া করতে বলে। কন্ট্রোলার মডেল এবং ভিউ রিটার্ন করে।
- View Resolution:
- DispatcherServlet কন্ট্রোলার থেকে ভিউ নামটি গ্রহণ করে এবং ViewResolver ব্যবহার করে সঠিক ভিউ টেমপ্লেট খুঁজে বের করে।
- Response Creation:
- DispatcherServlet ভিউ থেকে রেসপন্স রেন্ডার করে এবং ব্যবহারকারীর ব্রাউজারে রিটার্ন করে।
DispatcherServlet এর সুবিধা:
- Centralized Request Handling: DispatcherServlet Spring MVC অ্যাপ্লিকেশনগুলির জন্য রিকোয়েস্ট এবং রেসপন্সের একটি কেন্দ্রীয় পয়েন্ট হিসেবে কাজ করে।
- Separation of Concerns: DispatcherServlet মডেল, ভিউ, এবং কন্ট্রোলারের মধ্যে দায়িত্ব ভাগ করে দেয়, যার ফলে অ্যাপ্লিকেশনটি আরও নমনীয় এবং রক্ষণাবেক্ষণযোগ্য হয়।
- Easy Integration: DispatcherServlet অন্যান্য Spring মডিউল (যেমন Spring Security, Spring Data) এর সাথে সহজে একত্রিত হতে পারে।
- Flexible Configuration: DispatcherServlet কনফিগারেশন XML বা Java config এর মাধ্যমে কাস্টমাইজ করা যেতে পারে।
- Exception Handling: DispatcherServlet অ্যাপ্লিকেশনের মধ্যে কোনো এক্সেপশন ঘটলে তা সঠিকভাবে হ্যান্ডেল করতে পারে।
Conclusion:
DispatcherServlet হল Spring MVC ফ্রেমওয়ার্কের সবচেয়ে গুরুত্বপূর্ণ উপাদান, যা সমস্ত HTTP রিকোয়েস্ট হ্যান্ডলিং এবং প্রক্রিয়া পরিচালনা করে। এটি front controller হিসেবে কাজ করে এবং মডেল, ভিউ, এবং কন্ট্রোলারগুলির মধ্যে সমন্বয় প্রতিষ্ঠা করে। DispatcherServlet এর মাধ্যমে Spring MVC অ্যাপ্লিকেশনের কার্যক্ষমতা, ফ্লেক্সিবিলিটি, এবং স্কেলেবিলিটি উন্নত হয়।
DispatcherServlet হল Spring MVC-এর একটি মূল উপাদান যা সমস্ত HTTP রিকোয়েস্ট প্রক্রেস করতে এবং রিকোয়েস্টের ভিত্তিতে সঠিক রেসপন্স পাঠাতে দায়িত্বপ্রাপ্ত। এটি একটি ফ্রন্ট কন্ট্রোলার (Front Controller) হিসেবে কাজ করে এবং ওয়েব অ্যাপ্লিকেশনের সমস্ত রিকোয়েস্ট এবং রেসপন্সের ট্রান্সপোর্ট এবং প্রক্রিয়াজাতকরণ নিয়ন্ত্রণ করে।
DispatcherServlet এর কাজের প্রক্রিয়া
Spring MVC অ্যাপ্লিকেশনে DispatcherServlet হল প্রথম স্থান যেখানে সব রিকোয়েস্ট আসে। DispatcherServlet সমস্ত কাজের জন্য দায়ী, যেমন কন্ট্রোলার চিহ্নিত করা, ভিউ রেন্ডার করা, মডেল ডেটা সেট করা, এবং অন্যান্য এক্সটেনশান হ্যান্ডলিং। DispatcherServlet-এর কাজের প্রক্রিয়া (Flow) নিম্নরূপ:
DispatcherServlet এর কাজের প্রক্রিয়া:
- Request Arrival (রিকোয়েস্ট আগমন)
- যখন কোনো HTTP রিকোয়েস্ট আসে (যেমন, ইউজার URL এ প্রবেশ করেন), তখন সেটি DispatcherServlet-এ চলে আসে। DispatcherServlet-ই ওয়েব অ্যাপ্লিকেশনের প্রথম পয়েন্ট।
HandlerMapping (Controller নির্বাচন)
- DispatcherServlet রিকোয়েস্ট পেয়ে HandlerMapping ব্যবহার করে সঠিক Controller এবং HandlerMethod খুঁজে বের করে। HandlerMapping DispatcherServlet কে জানায় কোন কন্ট্রোলার এবং মেথড রিকোয়েস্টটি হ্যান্ডল করবে।
- Spring MVC-তে অনেক ধরনের HandlerMapping আছে, যেমন
RequestMappingHandlerMapping,SimpleUrlHandlerMapping, ইত্যাদি।
উদাহরণ:
- একটি রিকোয়েস্ট যেমন
/greetকন্ট্রোলারেরgreet()মেথডের সাথে সম্পর্কিত হতে পারে।
Controller Execution (Controller এক্সিকিউশন)
- DispatcherServlet সঠিক কন্ট্রোলার নির্বাচন করার পর, এটি কন্ট্রোলারের মেথডে রিকোয়েস্ট পাঠায় এবং সেই মেথডটি এক্সিকিউট হয়।
- কন্ট্রোলার মেথডটি সাধারণত ডেটা (Model) প্রক্রিয়া করে এবং ভিউ (View) তৈরি করার জন্য রিটার্ন করে।
Controller Example:
@Controller public class HomeController { @GetMapping("/greet") public String greet(Model model) { model.addAttribute("message", "Hello, World!"); return "greet"; // Return view name (greet.jsp or greet.html) } }ViewResolver (ভিউ নির্বাচন)
- কন্ট্রোলার মেথড যখন একটি ভিউ রিটার্ন করে (যেমন
"greet"), DispatcherServlet ভিউ রেজলভার (ViewResolver) ব্যবহার করে সঠিক ভিউ সিলেক্ট করে। - ViewResolver কনফিগারেশন অনুযায়ী ভিউ ফাইল (যেমন
greet.jsp,greet.html,greet.ftl) সিলেক্ট করা হয় এবং DispatcherServlet এটি রেন্ডার করতে পাঠায়।
ViewResolver Example:
@Configuration public class WebConfig implements WebMvcConfigurer { @Bean public InternalResourceViewResolver viewResolver() { InternalResourceViewResolver resolver = new InternalResourceViewResolver(); resolver.setPrefix("/WEB-INF/views/"); resolver.setSuffix(".jsp"); return resolver; } }- কন্ট্রোলার মেথড যখন একটি ভিউ রিটার্ন করে (যেমন
- Rendering the View (ভিউ রেন্ডারিং)
- DispatcherServlet ভিউ রিটার্ন করার পর, এটি রেন্ডার করার জন্য ভিউটিকে সঠিক রেসপন্সে পরিণত করে এবং ইউজারের ব্রাউজারে পাঠায়।
- View এ মডেল ডেটা (যেমন, "Hello, World!") থাকবে, যা ইউজারের কাছে প্রদর্শিত হবে।
- Response Delivery (রেসপন্স প্রেরণ)
- DispatcherServlet সর্বশেষে রেন্ডার করা ভিউ (যেমন HTML বা JSP) ইউজারের ব্রাউজারে পাঠিয়ে দেয়। এটি রেসপন্স অবজেক্টের মাধ্যমে ব্রাউজারকে HTTP রেসপন্স হিসেবে ফেরত আসে।
DispatcherServlet এর Working Process Flow (Diagram)
- User Request:
- Client sends an HTTP request (e.g.,
/greet).
- Client sends an HTTP request (e.g.,
- DispatcherServlet Receives Request:
- DispatcherServlet is the front controller. It intercepts all incoming requests.
- HandlerMapping:
- DispatcherServlet consults HandlerMapping to determine which controller and method will handle the request.
- Controller Method Execution:
- DispatcherServlet invokes the controller method that matches the request URL. The controller method processes the request and prepares a Model (data) to be displayed.
- ViewResolver:
- DispatcherServlet uses ViewResolver to select the appropriate view (e.g., JSP, Thymeleaf) based on the view name returned by the controller.
- View Rendering:
- The view is rendered, often by JSP or another view technology, and the model data is embedded into the view.
- Response Sent:
- Finally, DispatcherServlet sends the view (HTML, JSP) to the client (browser) as the HTTP response.
DispatcherServlet এর Advantages
- Centralized Request Handling: DispatcherServlet all incoming requests are handled centrally, making the system easy to configure and manage.
- Separation of Concerns: Spring MVC uses the Model-View-Controller (MVC) design pattern, ensuring a clean separation of concerns between the data, user interface, and control logic.
- Flexible View Configuration: It supports multiple view technologies (JSP, Thymeleaf, FreeMarker, etc.), making it flexible and adaptable.
- Easy Integration: DispatcherServlet integrates smoothly with other Spring components, like Spring Security, Spring Data, and Spring Boot.
- Decoupling Components: It decouples the request-processing logic, enabling easy modifications and maintainability.
Conclusion
In Spring MVC, the DispatcherServlet plays a crucial role as the central dispatcher that processes HTTP requests and controls the flow of the application. It handles incoming requests, directs them to appropriate controllers, resolves views, and sends the final response to the client. Its architecture allows for clean separation of concerns, flexibility in handling requests, and integration with various Spring components, making it a key component of the Spring MVC framework.
Spring MVC অ্যাপ্লিকেশন তৈরি করার সময়, DispatcherServlet হল একটি কেন্দ্রীয় উপাদান যা সব incoming HTTP রিকোয়েস্ট প্রসেস করে এবং সঠিক Controller অথবা View Resolver এর মাধ্যমে response তৈরি করে। Spring Boot এর মাধ্যমে Spring MVC অ্যাপ্লিকেশন কনফিগার করার সময়, DispatcherServlet স্বয়ংক্রিয়ভাবে কনফিগার হয়ে যায়, তবে আপনি যদি web.xml ফাইলের মাধ্যমে বা Spring Boot Configuration এ কাস্টম কনফিগারেশন করতে চান, তবে কিছু অতিরিক্ত কনফিগারেশন করতে হবে।
1. web.xml এর মাধ্যমে DispatcherServlet কনফিগারেশন
Spring MVC অ্যাপ্লিকেশনে web.xml ফাইলটি স্ট্যান্ডার্ড ওয়েব অ্যাপ্লিকেশন কনফিগারেশন ফাইল ছিল, যা DispatcherServlet এবং অন্যান্য সেটআপ কনফিগার করার জন্য ব্যবহৃত হত। এখানে, DispatcherServlet কনফিগার করতে হবে এবং Spring MVC এর জন্য প্রয়োজনীয় কনফিগারেশন সেট করতে হবে।
Step-by-Step Example (web.xml Configuration)
web.xml কনফিগারেশন:
<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">
<display-name>Spring MVC Application</display-name>
<!-- DispatcherServlet Configuration -->
<servlet>
<servlet-name>spring-mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- Define the DispatcherServlet's initialization parameters -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Map DispatcherServlet to handle all requests -->
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
Key Elements:
<servlet>: DispatcherServlet এর জন্য এই element ব্যবহার করা হয়।servlet-name: DispatcherServlet এর নাম দেওয়া হয়েছেspring-mvc।servlet-class: Spring MVC DispatcherServlet এর ক্লাস।contextConfigLocation: Spring config ফাইলের পথ নির্ধারণ করে (এখানে/WEB-INF/spring-config.xml)।load-on-startup: DispatcherServlet কে অ্যাপ্লিকেশন শুরু হওয়ার সাথে সাথে লোড করার নির্দেশ দেয়।
<servlet-mapping>: DispatcherServlet এর URL প্যাটার্ন কনফিগার করে। এই ক্ষেত্রে, সব incoming রিকোয়েস্ট/URL প্যাটার্নের মাধ্যমে DispatcherServlet দ্বারা হ্যান্ডল করা হবে।
spring-config.xml (Spring Bean Configuration):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- Enable component scanning -->
<context:component-scan base-package="com.example" />
<!-- Define view resolver (JSP example) -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
- Component Scan:
com.exampleপ্যাকেজে থাকা Spring Beans গুলো স্ক্যান করতে ব্যবহৃত হয়। - View Resolver:
InternalResourceViewResolverব্যবহার করা হয়েছে, যা JSP পেজগুলিকে রেন্ডার করবে।
2. Spring Boot-এ DispatcherServlet কনফিগারেশন
Spring Boot অ্যাপ্লিকেশন ব্যবহার করে Spring MVC কনফিগার করার সময় DispatcherServlet স্বয়ংক্রিয়ভাবে কনফিগার হয়ে যায় এবং আপনাকে web.xml কনফিগারেশন করার দরকার পড়ে না। Spring Boot এর মাধ্যমে DispatcherServlet কনফিগারেশন অনেক সহজ, কারণ Spring Boot সাধারণভাবে স্বয়ংক্রিয় কনফিগারেশন ব্যবস্থা প্রদান করে।
Spring Boot কনফিগারেশন Example:
Spring Boot অ্যাপ্লিকেশনের জন্য DispatcherServlet কনফিগারেশন করার জন্য শুধুমাত্র একটি @SpringBootApplication ক্লাস এবং Spring MVC এর জন্য @Controller ব্যবহার করা প্রয়োজন। Spring Boot প্রকল্পের জন্য DispatcherServlet সেটআপটি ইতিমধ্যে অন্তর্ভুক্ত থাকে।
Spring Boot Main Application Class:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
- @SpringBootApplication: এটি Spring Boot অ্যাপ্লিকেশন কনফিগারেশন ক্লাস যা @Configuration, @EnableAutoConfiguration, এবং @ComponentScan অ্যানোটেশনগুলির সংমিশ্রণ।
Controller Class Example:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HomeController {
@RequestMapping("/home")
public String home() {
return "home"; // Returns a view name (home.jsp or home.html)
}
}
Application Properties (Optional):
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
Spring Boot স্বয়ংক্রিয়ভাবে DispatcherServlet কনফিগার করবে, তবে আপনি ভিউ রেজোলভার বা অন্য কাস্টম কনফিগারেশন করতে চাইলে এটি application.properties অথবা application.yml ফাইলে কনফিগার করতে পারেন।
3. DispatcherServlet কনফিগারেশনে কাস্টমাইজেশন
DispatcherServlet Customization in Spring Boot
Spring Boot-এ আপনি DispatcherServlet কাস্টমাইজ করতে পারেন। উদাহরণস্বরূপ, আপনি DispatcherServlet এর initialization parameters কনফিগার করতে বা DispatcherServlet কে কাস্টম URL মেপিং এপ্লাই করতে পারেন।
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.DispatcherServlet;
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean<DispatcherServlet> dispatcherServlet() {
DispatcherServlet dispatcherServlet = new DispatcherServlet();
ServletRegistrationBean<DispatcherServlet> registrationBean =
new ServletRegistrationBean<>(dispatcherServlet, "/mvc/*");
registrationBean.setLoadOnStartup(1);
return registrationBean;
}
}
- ServletRegistrationBean: DispatcherServlet এর কনফিগারেশন এবং URL মেপিং কাস্টমাইজ করতে এটি ব্যবহৃত হয়।
"/mvc/*": DispatcherServlet-এর URL মেপিং কাস্টমাইজ করা হচ্ছে।
4. Conclusion
Spring MVC অ্যাপ্লিকেশন কনফিগার করার জন্য আপনি web.xml অথবা Spring Boot ব্যবহার করতে পারেন। web.xml কনফিগারেশন মেথডে DispatcherServlet এবং অন্যান্য কনফিগারেশন সেটআপ করতে হয়, যেখানে Spring Boot স্বয়ংক্রিয়ভাবে DispatcherServlet কনফিগার করে এবং সহজে অ্যাপ্লিকেশন সেটআপ করতে সাহায্য করে। Spring Boot এর মাধ্যমে DispatcherServlet কনফিগার করা অনেক সহজ, যেখানে কম কনফিগারেশন এবং ঝামেলা থাকে।
DispatcherServlet স্প্রিং এমভিসি ফ্রেমওয়ার্কের প্রধান কম্পোনেন্ট এবং এটি "ফ্রন্ট কন্ট্রোলার" হিসেবে কাজ করে। এটি সমস্ত HTTP রিকোয়েস্ট গ্রহণ করে এবং সেগুলিকে সঠিক কন্ট্রোলার, ভিউ রেজলভার, বা অন্যান্য উপাদানে রিডিরেক্ট বা ফওরওয়ার্ড করে। স্প্রিং এমভিসি অ্যাপ্লিকেশনগুলোতে, DispatcherServlet মূলত রিকোয়েস্ট এবং রেসপন্সের মধ্যে একটি ব্রিজ হিসেবে কাজ করে এবং এটি সমস্ত প্রক্রিয়াকরণে সহায়তা করে।
DispatcherServlet এর কাজ:
- রিকোয়েস্ট গ্রহণ: সব HTTP রিকোয়েস্ট প্রথমে DispatcherServlet দ্বারা গ্রহণ করা হয়।
- রিকোয়েস্টের জন্য কন্ট্রোলার চয়ন: DispatcherServlet কনফিগার করা HandlerMapping এর মাধ্যমে সঠিক কন্ট্রোলার এবং মেথড নির্বাচন করে।
- কন্ট্রোলারের সাথে রিকোয়েস্ট পাঠানো: DispatcherServlet সঠিক কন্ট্রোলার মেথডে রিকোয়েস্ট পাঠিয়ে, সেখান থেকে মডেল ডাটা বা ভিউ রিটার্ন করিয়ে নেয়।
- View Resolver নির্বাচন: DispatcherServlet কনফিগার করা ViewResolver এর মাধ্যমে সঠিক ভিউ নির্বাচন করে এবং মডেল ডাটা ভিউতে পাঠায়।
- HTTP রেসপন্স ফেরত: DispatcherServlet ভিউ থেকে তৈরি হওয়া রেসপন্স ক্লায়েন্টের কাছে ফেরত পাঠায়।
DispatcherServlet কনফিগারেশন এবং কাজের উদাহরণ
স্প্রিং এমভিসি ফ্রেমওয়ার্কে DispatcherServlet ব্যবহারের প্রক্রিয়া বুঝতে, আমরা একটি ছোট অ্যাপ্লিকেশন উদাহরণ দেখব।
১. web.xml Configuration:
প্রথমে DispatcherServlet কে web.xml ফাইলে কনফিগার করা হয়।
<web-app>
<!-- 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> <!-- This means DispatcherServlet handles all incoming requests -->
</servlet-mapping>
</web-app>
এখানে DispatcherServlet এর মডিউলটি web.xml ফাইলে কনফিগার করা হয়েছে। এটি সমস্ত রিকোয়েস্ট (যেমন /home, /login, /user/{id}) গ্রহণ করবে এবং সঠিক কন্ট্রোলার বা ভিউ প্রক্রিয়া করবে।
২. Spring MVC Configuration (WebConfig):
স্প্রিং এমভিসি কনফিগারেশন ক্লাসে DispatcherServlet এর জন্য বিভিন্ন কনফিগারেশন সেট করা হয়, যেমন ভিউ রেজলভার, হ্যান্ডলার মেপিং ইত্যাদি।
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.example.controller")
public class WebConfig implements WebMvcConfigurer {
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
// ViewResolver to resolve JSP files under /WEB-INF/views/
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
registry.viewResolver(resolver);
}
}
এখানে @EnableWebMvc অ্যানোটেশন স্প্রিং এমভিসি ফিচার সক্রিয় করে এবং InternalResourceViewResolver ভিউ রেজলভারের মাধ্যমে JSP ফাইল রেন্ডারিং কনফিগার করা হয়।
৩. Controller:
এটি একটি সাধারণ কন্ট্রোলার ক্লাস যা HTTP রিকোয়েস্টের জন্য সঠিক রেসপন্স প্রদান করবে। DispatcherServlet এই কন্ট্রোলারের মেথডগুলো কল করবে।
@Controller
public class HomeController {
@RequestMapping("/home")
public String homePage(Model model) {
model.addAttribute("message", "Welcome to Spring MVC!");
return "home"; // "home" will be resolved to /WEB-INF/views/home.jsp
}
}
এখানে @Controller অ্যানোটেশন ক্লাসটিকে কন্ট্রোলার হিসেবে চিহ্নিত করে এবং @RequestMapping("/home") URL রিকোয়েস্টটি এই মেথডে মেপ করে।
৪. View (JSP):
এখন, কন্ট্রোলার থেকে পাঠানো মডেল ডাটাটি ভিউতে রেন্ডার হবে। এখানে একটি JSP ভিউ আছে যা মডেল ডাটাকে ডিসপ্লে করবে।
home.jsp (JSP উদাহরণ):
<html>
<body>
<h1>${message}</h1> <!-- Displaying the message from the Model -->
</body>
</html>
এখানে ${message} মডেল থেকে পাঠানো ডাটা দেখাচ্ছে, যা "Welcome to Spring MVC!"।
৫. DispatcherServlet Flow:
- ইউজার
/homeURL রিকোয়েস্ট করলে, এটি প্রথমে DispatcherServlet দ্বারা গ্রহণ করা হবে। - DispatcherServlet HandlerMapping এর মাধ্যমে সঠিক কন্ট্রোলার মেথড (যেমন
HomeController.homePage()) চয়ন করবে। - কন্ট্রোলার মেথডে, মডেল ডাটা (যেমন
message) তৈরি হবে এবং ভিউ নাম (যেমন"home") রিটার্ন হবে। - DispatcherServlet ViewResolver ব্যবহার করে ভিউ (যেমন
home.jsp) রেজলভ করবে। - DispatcherServlet রেসপন্স ক্লায়েন্টকে ফেরত পাঠাবে, এবং ইউজারকে "Welcome to Spring MVC!" বার্তা দেখানো হবে।
DispatcherServlet এর অতিরিক্ত কাজ:
- Security: DispatcherServlet বিভিন্ন ধরনের ফিল্টার এবং সিকিউরিটি চেক পরিচালনা করতে সক্ষম। যেমন, Authentication এবং Authorization ফিল্টারিং।
- Exception Handling: DispatcherServlet সিস্টেমে ঘটে যাওয়া এক্সসেপশন গুলি প্রক্রিয়া করতে পারে এবং কাস্টম এক্সসেপশন হ্যান্ডলারস ব্যবহার করতে পারে।
- Request Interception: DispatcherServlet ইন্টারসেপ্টর ব্যবহার করতে পারে, যেমন লগিং, প্রিফিক্স/স্যাফিক্স অ্যাড করা, এবং সাধারণ ফাংশনালিটি পরিবর্ধন করা।
উপসংহার:
DispatcherServlet স্প্রিং এমভিসি ফ্রেমওয়ার্কের অন্যতম প্রধান উপাদান এবং এটি "ফ্রন্ট কন্ট্রোলার" হিসেবে কাজ করে। এটি সমস্ত HTTP রিকোয়েস্ট গ্রহণ করে, সঠিক কন্ট্রোলার মেথড নির্বাচন করে, এবং রিকোয়েস্টের জন্য সঠিক রেসপন্স (ভিউ) প্রদান করে। DispatcherServlet এর মাধ্যমে স্প্রিং এমভিসি অ্যাপ্লিকেশনের কোড মডুলার এবং রিইউজেবল হয়, এবং এটি অ্যাপ্লিকেশনটি সহজভাবে কনফিগার ও মেইনটেইন করতে সাহায্য করে।
Read more