Struts 2 এ Interceptor Stack একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা অ্যাকশন ক্লাসের আগে এবং পরে বিভিন্ন প্রক্রিয়া পরিচালনা করতে ব্যবহৃত হয়। Interceptor Stack ব্যবহার করে আপনি যেমন authentication, logging, validation, এবং authorization প্রক্রিয়া কাস্টমাইজ করতে পারেন, তেমনি Action ক্লাসে প্রেরিত ডেটা প্রক্রিয়া এবং রিটার্ন ভ্যালু কনফিগার করতে পারেন।
Struts 2 এর Interceptor Stack ব্যবহারের মাধ্যমে আপনি একাধিক ইন্টারসেপ্টর একসাথে প্রয়োগ করতে পারেন, যেগুলি একটি স্ট্যাক আকারে কাজ করে। ইন্টারসেপ্টর গুলি অনুরোধ (request) প্রক্রিয়া করার আগে বা পরে প্রয়োগ করা হয়।
Struts 2 Interceptor Stack এর বৈশিষ্ট্য
১. Interceptor Stack কনফিগারেশন:
Struts 2 এ ইন্টারসেপ্টর স্ট্যাকের কনফিগারেশন সাধারণত struts.xml ফাইলে করা হয়। এখানে আপনি একটি স্ট্যাক সংজ্ঞায়িত করেন, এবং ইন্টারসেপ্টরগুলির তালিকা প্রদান করেন যা স্ট্যাকের অংশ হবে। একাধিক ইন্টারসেপ্টর একে অপরের পরে চালিত হবে।
২. ইন্টারসেপ্টর স্ট্যাকের ব্যবহারের সুবিধা:
- Code Reusability: একাধিক ইন্টারসেপ্টর কোড রিইউজ করার সুবিধা দেয়।
- Pre-processing and Post-processing: আপনি request গ্রহণের আগে এবং response ফেরানোর পরে কাজ করতে পারেন।
- Modularization: আলাদা আলাদা ইন্টারসেপ্টর ব্যবহার করে কোড মডুলার করা যায়, যেমন লগিং, অথেনটিকেশন, ভ্যালিডেশন ইত্যাদি।
৩. Default Interceptor Stack:
Struts 2 একটি default interceptor stack প্রদান করে, যেটি সাধারণত ব্যবহার করা হয়, এবং এর মধ্যে বেশ কিছু সাধারণ ইন্টারসেপ্টর থাকে, যেমন:
- parameterInterceptor: ইনপুট প্যারামিটার প্রসেসিং।
- conversionErrorInterceptor: কনভার্সন এরর হ্যান্ডলিং।
- validationInterceptor: ইনপুট ভ্যালিডেশন।
- workflowInterceptor: অ্যাকশন প্রক্রিয়া।
- exceptionInterceptor: এক্সসেপশন হ্যান্ডলিং।
এই স্ট্যাকটি ব্যবহার করে Struts 2 আপনাকে একটি মৌলিক ইন্টারসেপ্টর স্ট্যাক দেয়, যেটি প্রায় সব সাধারণ কাজের জন্য উপযুক্ত।
৪. Custom Interceptor Stack
আপনি কাস্টম ইন্টারসেপ্টর স্ট্যাক তৈরি করে আপনার প্রয়োজনীয় কাজ করতে পারেন। এতে আপনি আপনার ইন্টারসেপ্টর গুলি নির্দিষ্ট স্ট্যাকের মধ্যে যুক্ত করতে পারেন।
উদাহরণ: Struts 2 Interceptor Stack কনফিগারেশন
এখানে একটি উদাহরণ দেওয়া হলো যেখানে কাস্টম ইন্টারসেপ্টর স্ট্যাক কনফিগার করা হয়েছে।
struts.xml কনফিগারেশন:
<struts>
<package name="default" namespace="/" extends="struts-default">
<!-- Custom Interceptor Stack -->
<interceptor-stack name="myStack">
<interceptor-ref name="loggingInterceptor"/>
<interceptor-ref name="validationInterceptor"/>
<interceptor-ref name="myCustomInterceptor"/>
<interceptor-ref name="exceptionInterceptor"/>
</interceptor-stack>
<!-- Action Configuration -->
<action name="login" class="com.example.LoginAction">
<interceptor-ref name="myStack"/>
<result name="success">/welcome.jsp</result>
<result name="error">/error.jsp</result>
</action>
</package>
</struts>
কোড বিশ্লেষণ:
- Interceptor Stack Definition: এখানে একটি কাস্টম ইন্টারসেপ্টর স্ট্যাক
myStackতৈরি করা হয়েছে, যেখানে চারটি ইন্টারসেপ্টর রয়েছে:- loggingInterceptor: লগিং করার জন্য।
- validationInterceptor: ইনপুট ভ্যালিডেশন করার জন্য।
- myCustomInterceptor: একটি কাস্টম ইন্টারসেপ্টর।
- exceptionInterceptor: এক্সসেপশন হ্যান্ডলিং।
- Action Configuration: এই স্ট্যাকটি
loginঅ্যাকশনের জন্য প্রযোজ্য। এখানে, myStack নামক ইন্টারসেপ্টর স্ট্যাকটিloginঅ্যাকশনের জন্য প্রয়োগ করা হয়েছে।
৫. Custom Interceptor তৈরি করা
এখন, একটি কাস্টম ইন্টারসেপ্টর তৈরি করি যা ব্যবহারকারীর লগইন যাচাই করবে।
MyCustomInterceptor.java:
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class MyCustomInterceptor extends AbstractInterceptor {
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// Custom logic (e.g., check if the user is logged in)
System.out.println("Checking user authentication...");
// If not authenticated, return error
if (/* condition to check if user is not authenticated */) {
return "error"; // Return the error result
}
// Continue to the next interceptor or action
return invocation.invoke();
}
}
কোড বিশ্লেষণ:
- AbstractInterceptor ক্লাস থেকে extends করা হয়েছে, যা Struts 2 এর Interceptor ইন্টারফেস বাস্তবায়িত করে।
- intercept() মেথডে কাস্টম লজিক যুক্ত করা হয়েছে, যা ইউজারের অথেনটিকেশন চেক করবে। যদি ইউজার লগইন না করে থাকে, তবে এটি error রিটার্ন করবে, অন্যথায় অ্যাকশন প্রক্রিয়া চালানো হবে।
৬. Interceptor Stack এর মধ্যে Order
Struts 2 তে, ইন্টারসেপ্টর স্ট্যাকের মধ্যে ইন্টারসেপ্টরগুলির অর্ডার গুরুত্বপূর্ণ। ইন্টারসেপ্টর স্ট্যাকের মধ্যে একটি ইন্টারসেপ্টর পূর্ববর্তী ইন্টারসেপ্টর দ্বারা প্রক্রিয়া শুরু হওয়া পর্যন্ত অপেক্ষা করবে। উদাহরণস্বরূপ, validationInterceptor সাধারণত loggingInterceptor এর পরে চালানো উচিত।
সারাংশ
Struts 2 Interceptor Stack একটি শক্তিশালী ফিচার যা বিভিন্ন ধরনের প্রক্রিয়া যেমন logging, validation, authentication, এবং authorization করতে সহায়তা করে। এটি ইন্টারসেপ্টরগুলির একটি সিরিজ হিসেবে কাজ করে, যা অনুরোধ প্রক্রিয়া করার আগে বা পরে বিভিন্ন কার্যকলাপ পরিচালনা করে। Struts 2 এর interceptors স্ট্যাক কনফিগারেশন খুবই নমনীয় এবং কাস্টম ইন্টারসেপ্টর তৈরি করে সহজেই অ্যাপ্লিকেশনের বিভিন্ন অংশে পুনরায় ব্যবহারযোগ্য কোড প্রয়োগ করা যায়।
Read more