Interceptors স্ট্রাটস 2 ফ্রেমওয়ার্কের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অ্যাকশন ক্লাসের প্রক্রিয়া সম্পাদন করার পূর্বে এবং পরে নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। Interceptors মূলত অ্যাকশনের লাইফ সাইকেল পরিচালনা করে এবং pre-processing এবং post-processing কার্যক্রম পরিচালনা করতে সাহায্য করে। স্ট্রাটস 2 একটি শক্তিশালী এবং নমনীয় interceptor সিস্টেম প্রদান করে, যা বিভিন্ন কাজ যেমন লগিং, সিকিউরিটি চেক, ডেটা ভ্যালিডেশন, ইত্যাদি সহজে করা সম্ভব করে।
Default Interceptors in Struts 2
স্ট্রাটস 2 বেশ কিছু default interceptors প্রদান করে, যেগুলি সাধারণত অ্যাকশনের প্রক্রিয়া সম্পাদনের পূর্বে এবং পরে ব্যবহৃত হয়। কিছু সাধারণ default interceptors:
- params: এটি HTTP রিকোয়েস্ট থেকে প্যারামিটার সংগ্রহ করে এবং সেটি অ্যাকশনের প্রপার্টির সাথে সেট করে।
- validation: এই interceptor অ্যাকশন ক্লাসের ডেটা ভ্যালিডেশন পরিচালনা করে।
- workflow: এটি অ্যাকশন ক্লাসের মধ্যে নেভিগেশন স্টেটস এবং ফলাফল পরিচালনা করে।
- logging: এই interceptor অ্যাকশনের কার্যকলাপ লগ করে।
- i18n: এই interceptor ইন্টারন্যাশনালাইজেশন (i18n) সাপোর্ট প্রদান করে, যার মাধ্যমে অ্যাকশন ক্লাসের স্ট্রিংগুলি বিভিন্ন ভাষায় কনভার্ট করা যায়।
Default Interceptors Configuration
স্ট্রাটস 2 এ default interceptors সাধারণত struts.xml ফাইলে কনফিগার করা থাকে এবং এগুলি global interceptor stack তে থাকে। উদাহরণস্বরূপ:
<struts>
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="com.example.MyInterceptor" />
<interceptor-stack name="defaultStack">
<interceptor-ref name="params" />
<interceptor-ref name="workflow" />
<interceptor-ref name="validation" />
<interceptor-ref name="logging" />
<interceptor-ref name="i18n" />
</interceptor-stack>
</interceptors>
<action name="hello" class="com.example.HelloAction">
<interceptor-ref name="defaultStack" />
<result>/WEB-INF/content/hello.jsp</result>
</action>
</package>
</struts>
Custom Interceptor তৈরি
আপনি যদি স্ট্রাটস 2 অ্যাপ্লিকেশনে একটি custom interceptor তৈরি করতে চান, তাহলে আপনাকে একটি নতুন ক্লাস তৈরি করতে হবে যা Interceptor ইন্টারফেস অথবা AbstractInterceptor ক্লাসকে ইমপ্লিমেন্ট করবে। এরপর আপনাকে সেই interceptor-কে struts.xml ফাইলে কনফিগার করতে হবে।
Custom Interceptor এর উদাহরণ
1. Custom Interceptor Class তৈরি করা
package com.example;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
public class MyCustomInterceptor implements Interceptor {
@Override
public void destroy() {
// Clean up resources if needed
System.out.println("Interceptor destroyed");
}
@Override
public void init() {
// Initialize resources if needed
System.out.println("Interceptor initialized");
}
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// Pre-processing before the action executes
System.out.println("Before action execution");
// Continue the action invocation
String result = invocation.invoke();
// Post-processing after the action executes
System.out.println("After action execution");
return result;
}
}
এই MyCustomInterceptor ক্লাসটি একটি কাস্টম interceptor যা Interceptor ইন্টারফেস ইমপ্লিমেন্ট করেছে। এটি pre-processing এবং post-processing পরিচালনা করে।
init()মেথডে, আপনি কাস্টম রিসোর্স বা কার্যকলাপ প্রক্রিয়াকরণ শুরু করতে পারেন।destroy()মেথডে, আপনি রিসোর্স ক্লিনআপ করতে পারেন।intercept()মেথডে, আপনি অ্যাকশনের আগে এবং পরে কাস্টম কার্যকলাপ বাস্তবায়ন করতে পারেন।
2. Custom Interceptor কে struts.xml এ কনফিগার করা
struts.xml ফাইলে কাস্টম interceptor কনফিগার করা হয়:
<struts>
<package name="default" extends="struts-default">
<!-- Custom Interceptor -->
<interceptors>
<interceptor name="myCustomInterceptor" class="com.example.MyCustomInterceptor" />
</interceptors>
<action name="hello" class="com.example.HelloAction">
<interceptor-ref name="myCustomInterceptor" />
<result>/WEB-INF/content/hello.jsp</result>
</action>
</package>
</struts>
এখানে, myCustomInterceptor নামক কাস্টম interceptor-কে অ্যাকশনটির সাথে যুক্ত করা হয়েছে।
Custom Interceptor এর উন্নত বৈশিষ্ট্য
- Pre-Processing:
- অ্যাকশন ক্লাসের আগে কোনো বিশেষ কার্যক্রম (যেমন লোগিং, সিকিউরিটি চেক, ডেটা প্রিপ্রসেসিং) সম্পাদন করা যায়।
- Post-Processing:
- অ্যাকশন ক্লাসের পরে কোনো কার্যক্রম (যেমন রেজাল্ট সেট করা, রেসপন্স মডিফাই করা) সম্পাদন করা যায়।
- Error Handling:
- আপনি কাস্টম interceptor ব্যবহার করে ইরর হ্যান্ডলিং বা এক্সপশান ম্যানেজমেন্ট করতে পারেন।
- Cross-Cutting Concerns:
- Interceptors cross-cutting concerns (যেমন লগিং, অথেনটিকেশন, সিকিউরিটি, ট্রানজেকশন ম্যানেজমেন্ট) হ্যান্ডল করতে ব্যবহৃত হয়, যা একাধিক অ্যাকশনে প্রযোজ্য হতে পারে।
Summary
- Default Interceptors Struts 2 এর built-in interceptors যা অ্যাকশন ক্লাসের প্রক্রিয়া আগে এবং পরে কাজ করে, যেমন প্যারামিটার হ্যান্ডলিং, ভ্যালিডেশন, লগিং ইত্যাদি।
- Custom Interceptors আপনাকে প্রয়োজনীয় লজিক যুক্ত করার জন্য স্ট্রাটস 2-এ কাস্টম interceptors তৈরি করতে দেয়। এগুলি বিশেষ কার্যক্রম যেমন লগিং, সিকিউরিটি, অথবা বিভিন্ন প্রি এবং পোস্ট প্রসেসিং কার্যক্রমে ব্যবহৃত হয়।
- Interceptor System স্ট্রাটস 2 অ্যাপ্লিকেশনকে আরো শক্তিশালী এবং ফ্লেক্সিবল করে তোলে, কারণ এটি পুনঃব্যবহারযোগ্য এবং কার্যকরী লজিক তৈরি করতে সাহায্য করে যা অ্যাপ্লিকেশনটির বিভিন্ন অংশে একযোগভাবে কাজ করে।
Read more