Struts 2 এর Interceptors

স্ট্রাটস (Struts 2) - Java Technologies

338

Struts 2 একটি শক্তিশালী ফ্রেমওয়ার্ক যা MVC আর্কিটেকচার অনুসরণ করে এবং এটি বিভিন্ন ধরনের Interceptors এর মাধ্যমে বিভিন্ন রকম কার্যক্রম পরিচালনা করে। Interceptor গুলি ক্লায়েন্টের অনুরোধের সাথে সংযুক্ত হয় এবং অ্যাকশন রিকোয়েস্ট প্রসেস করার আগে বা পরে কিছু নির্দিষ্ট কাজ সম্পাদন করতে সহায়তা করে। Struts 2 এ ইন্টারসেপ্টরগুলি সাধারণত ক্রস-কাটিং কনসার্ন যেমন লগিং, সেশন ম্যানেজমেন্ট, অথবা ট্রানজেকশন ম্যানেজমেন্ট পরিচালনা করতে ব্যবহৃত হয়।


Interceptors কী?

Interceptor হল একটি বিশেষ ধরনের ক্লাস যা Struts 2 এর ভিতরে Action রিকোয়েস্টের পূর্বে বা পরে কাজ করার জন্য ব্যবহৃত হয়। ইন্টারসেপ্টর গুলি Action প্রক্রিয়া পরিচালনা করার আগে বা পরে বিভিন্ন ধরনের কার্যকলাপ যেমন সেশন চেকিং, লোগিং, ট্রানজেকশন ম্যানেজমেন্ট ইত্যাদি করতে সক্ষম। এগুলি মূলত ব্যবহারকারীর রিকোয়েস্টের সাথে বিভিন্ন ক্রস-কাটিং কনসার্ন পরিচালনা করতে সহায়ক।

Interceptor এর কাজ:

  1. Request Pre-processing: ইন্টারসেপ্টরগুলি অ্যাকশন ক্লাসে যাওয়ার আগে রিকোয়েস্ট প্রক্রিয়া করতে পারে।
  2. Request Post-processing: অ্যাকশন ক্লাস থেকে রেসপন্স ফেরানোর পরে ইন্টারসেপ্টরগুলি প্রক্রিয়া করতে পারে।
  3. Cross-cutting Concerns: লগিং, সেশন ভ্যালিডেশন, ট্রানজেকশন ম্যানেজমেন্ট, এবং অ্যাপ্লিকেশনের অন্যান্য ক্রস-কাটিং কনসার্নগুলি ইন্টারসেপ্টর দিয়ে পরিচালনা করা যায়।

Struts 2 এর Built-in Interceptors

Struts 2 এ অনেক বিল্ট-ইন ইন্টারসেপ্টর আছে, যা সাধারণত বিভিন্ন ধরনের কাজ সম্পাদন করে:

  1. LoggingInterceptor: এই ইন্টারসেপ্টরটি রিকোয়েস্ট এবং রেসপন্সের লগিং করে।
  2. ValidationInterceptor: ব্যবহারকারীর ইনপুট যাচাই (validation) করতে ব্যবহৃত হয়।
  3. ExceptionInterceptor: অ্যাকশনে কোনো এক্সেপশন ঘটলে, তা হ্যান্ডেল করে।
  4. AliasInterceptor: এই ইন্টারসেপ্টরটি পাঠানো ডেটা বা মানগুলোর অ্যালিয়াস (alias) তৈরি করে।
  5. ConversionErrorInterceptor: ডেটা টাইপ কনভার্সন সংক্রান্ত ত্রুটি হ্যান্ডলিং করে।
  6. TransactionInterceptor: টানজেকশন ম্যানেজমেন্টের জন্য ব্যবহৃত হয়।

Struts 2 এ Custom Interceptor তৈরি করা

Struts 2 এ আপনি কাস্টম ইন্টারসেপ্টর তৈরি করতে পারেন, যা আপনার নির্দিষ্ট প্রয়োজনে কাজ করবে। কাস্টম ইন্টারসেপ্টর তৈরির জন্য আপনাকে একটি ক্লাস তৈরি করতে হবে যা Interceptor ইন্টারফেস ইমপ্লিমেন্ট করবে এবং intercept() মেথডটি ওভাররাইড করতে হবে।

উদাহরণ: Custom Interceptor তৈরি করা

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class MyCustomInterceptor implements Interceptor {

    @Override
    public void destroy() {
        // Cleanup code if needed
    }

    @Override
    public void init() {
        // Initialization code if needed
    }

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // Pre-processing: Before Action Execution
        System.out.println("Interceptor: Request received!");

        // Proceed to the action
        String result = invocation.invoke();

        // Post-processing: After Action Execution
        System.out.println("Interceptor: Action executed, returning result!");

        return result;
    }
}

এখানে MyCustomInterceptor একটি কাস্টম ইন্টারসেপ্টর যা Action এক্সিকিউট হওয়ার আগে এবং পরে কিছু কাজ করবে।

2. struts.xml ফাইলে ইন্টারসেপ্টর কনফিগারেশন

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="helloWorld" class="com.example.HelloWorldAction">
            <interceptor-ref name="myCustomInterceptor"/> <!-- Custom Interceptor -->
            <result name="success">/WEB-INF/content/success.jsp</result>
            <result name="error">/WEB-INF/content/error.jsp</result>
        </action>
    </package>

    <interceptors>
        <interceptor name="myCustomInterceptor" class="com.example.MyCustomInterceptor"/>
    </interceptors>
</struts>

এখানে, struts.xml ফাইলে কাস্টম ইন্টারসেপ্টর কনফিগার করা হয়েছে এবং অ্যাকশনটি এই ইন্টারসেপ্টর ব্যবহার করবে।


Struts 2 এ Interceptor Chain

Struts 2 এ Interceptor Chain ব্যবহৃত হয়, যার মাধ্যমে একাধিক ইন্টারসেপ্টর একসাথে কাজ করতে পারে। যখন একটি অ্যাকশন রিকোয়েস্ট হয়, তখন ইন্টারসেপ্টর চেইন একে একে সব ইন্টারসেপ্টর চালায়, প্রথমে Pre-processing এবং তারপর Post-processing

Interceptor Chain এ সমস্ত ইন্টারসেপ্টর নির্দিষ্ট অর্ডারে একসাথে চলে। আপনি interceptor-ref ট্যাগ ব্যবহার করে ইন্টারসেপ্টরগুলি সাজাতে পারেন।

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="myAction" class="com.example.MyAction">
            <interceptor-ref name="loggingInterceptor"/>
            <interceptor-ref name="validationInterceptor"/>
            <result name="success">/success.jsp</result>
        </action>
    </package>
</struts>

এখানে, loggingInterceptor এবং validationInterceptor দুটি ইন্টারসেপ্টর একসাথে কাজ করবে, প্রথমে লগিং হবে এবং তারপর ভ্যালিডেশন চেক হবে।


Struts 2 Interceptors এর সুবিধা

  1. Cross-cutting Concerns: ইন্টারসেপ্টর ব্যবহার করে সাধারণ কাজগুলো যেমন লগিং, ভ্যালিডেশন, সেশন ম্যানেজমেন্ট, ট্রানজেকশন ম্যানেজমেন্ট এক জায়গায় কনফিগার করা যায়।
  2. Modularization: কোডের পুনঃব্যবহারযোগ্যতা বাড়ায় এবং অ্যাপ্লিকেশনের বিভিন্ন অংশ আলাদা থাকে।
  3. Flexible Configuration: ইন্টারসেপ্টর গুলি struts.xml ফাইলের মাধ্যমে কনফিগার করা যায়, যা খুবই নমনীয় এবং কাস্টমাইজযোগ্য।

উপসংহার

Struts 2 Interceptors হল একটি গুরুত্বপূর্ণ ফিচার যা অ্যাপ্লিকেশন ডেভেলপমেন্টে বিভিন্ন ধরনের ক্রস-কাটিং কনসার্ন সমাধান করতে সাহায্য করে। ইন্টারসেপ্টর ব্যবহারের মাধ্যমে আপনি অ্যাকশন প্রসেসিংয়ের পূর্বে বা পরে নানা কার্যকলাপ করতে পারবেন যেমন লগিং, সেশন ম্যানেজমেন্ট, ভ্যালিডেশন, এবং আরও অনেক কিছু। Struts 2 এর ইন্টারসেপ্টর সিস্টেম অত্যন্ত নমনীয় এবং কাস্টমাইজযোগ্য, যা জাভা ডেভেলপারদের আরও কার্যকরী ওয়েব অ্যাপ্লিকেশন তৈরি করতে সহায়তা করে।

Content added By

Interceptor হল Struts 2 এর একটি শক্তিশালী বৈশিষ্ট্য যা অ্যাকশন ক্লাসের প্রক্রিয়া এবং এর রিকোয়েস্ট এবং রেসপন্সের উপর প্রি-প্রসেসিং এবং পোস্ট-প্রসেসিং করতে ব্যবহৃত হয়। এটি মূলত একটি ফিল্টার বা মধ্যবর্তী স্তরের (middleware) মতো কাজ করে যা অ্যাকশন লজিকের আগে বা পরে একাধিক কাজ পরিচালনা করতে পারে।

Interceptor কি?

Struts 2 এ Interceptor হল এমন একটি প্রক্রিয়া যা রিকোয়েস্টের আগেই বা পরেই কার্যকর হয় এবং এর মাধ্যমে আমরা বিভিন্ন ধরনের ক্রস-কাটিং কনসার্ন (যেমন লগিং, অথেন্টিকেশন, অথরাইজেশন, ভ্যালিডেশন) পরিচালনা করতে পারি। ইন্টারসেপ্টরগুলি Action ক্লাসের মধ্যে বা অ্যাকশন ক্লাসের চলার আগে অথবা পরে সঞ্চালিত হতে পারে।

কাজের প্রক্রিয়া:

  1. Pre-processing: এটি ইনপুট প্রক্রিয়াকরণের আগে অ্যাকশন ক্লাসে কার্যকর হয়। উদাহরণস্বরূপ, সেশন যাচাই, অথেন্টিকেশন বা লগিং এর কাজ।
  2. Post-processing: এটি অ্যাকশন ক্লাসের কাজ শেষ হওয়ার পরে কার্যকর হয়। উদাহরণস্বরূপ, আউটপুট পরিবর্তন করা বা রেসপন্স চেক করা।

Struts 2 এ Interceptor কিভাবে কাজ করে?

Struts 2 ফ্রেমওয়ার্কে, যখন একটি রিকোয়েস্ট অ্যাকশন ক্লাসের মাধ্যমে প্রসেস করা হয়, তখন সেই রিকোয়েস্টটি বিভিন্ন Interceptor Stack এর মাধ্যমে চলে। যখনই একটি রিকোয়েস্ট অ্যাকশনের জন্য প্রক্রিয়া শুরু হয়, প্রথমে Struts 2 ইন্টারসেপ্টর স্ট্যাকের মাধ্যমে যাচাই করে।

এটি যে কোনও রিকোয়েস্ট এবং রেসপন্স হ্যান্ডলিং ফিচারের জন্য অত্যন্ত কার্যকরী, যেমন:

  • Security Checks (অথেন্টিকেশন বা অথরাইজেশন)
  • Logging (লগিং)
  • Validation (ভ্যালিডেশন)
  • Session Management (সেশন পরিচালনা)

Interceptor এর কাঠামো

Struts 2 Interceptor সাধারণত দুটি মেথডের মধ্যে কাজ করে:

  1. intercept(): এটি ইন্টারসেপ্টরের মূল মেথড যা কাস্টম কাজ বা প্রক্রিয়া সম্পাদন করে।
  2. stack: এটি পরবর্তী ইন্টারসেপ্টর অথবা অ্যাকশন প্রসেসিংকে কল করে। আপনার প্রক্রিয়া সম্পন্ন হওয়ার পর আপনি stack.invoke() কল করে পরবর্তী প্রক্রিয়া শুরু করতে পারেন।

Interceptor এর প্রয়োজনীয়তা

Struts 2 এ Interceptor ব্যবহার করার প্রয়োজনীয়তা অনেক কারণে রয়েছে, যেমন:

  1. ক্রস-কাটিং কনসার্ন (Cross-cutting Concerns): Interceptors ব্যবহার করে আপনি ক্রস-কাটিং কনসার্ন যেমন লগিং, অথেন্টিকেশন, ভ্যালিডেশন ইত্যাদি কেন্দ্রীভূতভাবে পরিচালনা করতে পারেন। এতে কোডের পুনঃব্যবহারযোগ্যতা এবং কাস্টমাইজেশন সুবিধা পাওয়া যায়।
  2. কোডের পরিষ্কার এবং এক্সটেনসিবিলিটি: ইন্টারসেপ্টর ব্যবহার করলে কোড আরো পরিষ্কার হয় এবং মূল অ্যাকশন ক্লাসটি শুধুমাত্র তার নির্দিষ্ট কাজ করে, অন্য কোনো এক্সট্রা কাজের জন্য আলাদা ইন্টারসেপ্টর ব্যবহার করা হয়। এটি অ্যাপ্লিকেশনটির এক্সটেনসিবিলিটি বাড়ায়।
  3. রিকোয়েস্ট প্রক্রিয়াকরণকে কেন্দ্রীভূতভাবে নিয়ন্ত্রণ করা: ইন্টারসেপ্টরের মাধ্যমে আপনি একটি জায়গা থেকেই সমস্ত রিকোয়েস্ট প্রক্রিয়াকরণ কন্ট্রোল করতে পারেন, যেমন লগিং, অথেন্টিকেশন চেক, বা ভ্যালিডেশন ইত্যাদি কাজগুলি কাস্টম কনফিগারেশন বা স্ট্যাকের মাধ্যমে করা যায়।
  4. পুনঃব্যবহারযোগ্যতা (Reusability): একাধিক অ্যাকশন ক্লাসে একই ইন্টারসেপ্টর ব্যবহার করা সম্ভব। একবার ইন্টারসেপ্টর তৈরি করলে, তা বিভিন্ন অ্যাকশনে পুনঃব্যবহার করা যায়।
  5. সেশন ম্যানেজমেন্ট এবং অথেন্টিকেশন: ইন্টারসেপ্টর ব্যবহার করে আপনি সেশন যাচাই, অথেন্টিকেশন এবং অথরাইজেশন পরিচালনা করতে পারেন। এটি নিরাপত্তার দিক থেকে অত্যন্ত গুরুত্বপূর্ণ।
  6. ডিবাগিং এবং লগিং: ইন্টারসেপ্টর ব্যবহার করে আপনি ডিবাগিং, লগিং এবং অন্যান্য সাধারণ কার্যকলাপ সহজেই করতে পারেন। এটি ট্রান্সপারেন্সি বাড়ায় এবং ত্রুটির সমাধানে সহায়তা করে।

Struts 2 Interceptor উদাহরণ

ধরা যাক, একটি সিম্পল লগিং ইন্টারসেপ্টর তৈরি করা হচ্ছে, যা প্রতিটি রিকোয়েস্টের জন্য লগ তৈরি করবে।

1. LoggingInterceptor.java

package com.example;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class LoggingInterceptor implements Interceptor {

    @Override
    public void destroy() {
        // Clean-up code, if needed
    }

    @Override
    public void init() {
        // Initialization code, if needed
    }

    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // Logging logic before action execution
        System.out.println("Before Action Execution: " + invocation.getAction().getClass().getName());
        
        // Proceed to the next interceptor or action
        String result = invocation.invoke();

        // Logging logic after action execution
        System.out.println("After Action Execution: " + invocation.getAction().getClass().getName());

        return result;
    }
}

2. struts.xml (Interceptor Configuration)

<struts>
    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor name="loggingInterceptor" class="com.example.LoggingInterceptor" />
            <interceptor-stack name="defaultStack">
                <interceptor-ref name="loggingInterceptor"/>
                <interceptor-ref name="exceptionInterceptor"/>
                <interceptor-ref name="validationInterceptor"/>
                <interceptor-ref name="workflowInterceptor"/>
            </interceptor-stack>
        </interceptors>

        <action name="hello" class="com.example.HelloWorldAction">
            <result>/hello.jsp</result>
        </action>
    </package>
</struts>

এখানে, LoggingInterceptor ইন্টারসেপ্টরটি কনফিগার করা হয়েছে এবং এটি defaultStack ইন্টারসেপ্টর স্ট্যাকে যোগ করা হয়েছে। এর মাধ্যমে প্রতিটি রিকোয়েস্টের জন্য লগিং কার্যকর হবে।


সারাংশ

Interceptor হল Struts 2 এর একটি গুরুত্বপূর্ণ এবং শক্তিশালী বৈশিষ্ট্য যা আপনাকে অ্যাকশন ক্লাসের আগে বা পরে প্রি-প্রসেসিং এবং পোস্ট-প্রসেসিং কাজ করতে সাহায্য করে। এটি ক্রস-কাটিং কনসার্ন (যেমন লগিং, অথেন্টিকেশন, সেশন চেকিং, ভ্যালিডেশন) পরিচালনার জন্য অত্যন্ত কার্যকরী। Struts 2 এর মাধ্যমে Interceptor ব্যবহার করে আপনি অ্যাকশনের কোডকে পরিষ্কার রাখতে পারেন এবং একাধিক অ্যাকশন ক্লাসে একই ফিচার সহজভাবে পুনঃব্যবহার করতে পারেন।

Content added By

Pre-processing এবং Post-processing কি?

Pre-processing এবং Post-processing দুটি গুরুত্বপূর্ণ ধারণা যা Struts 2 ফ্রেমওয়ার্কে ব্যবহৃত হয়, বিশেষ করে Interceptor ফিচার ব্যবহার করার সময়। এগুলি Action প্রোসেসিংয়ের আগে এবং পরে নির্দিষ্ট কার্যক্রম বা টাস্ক সম্পাদন করতে সাহায্য করে।

1. Pre-processing:

Pre-processing হলো সেই প্রক্রিয়া যা Action ক্লাসের কার্যক্রম শুরু হওয়ার আগে সম্পাদিত হয়। এটি সাধারণত রিকোয়েস্ট হ্যান্ডলিং বা ডেটা ভ্যালিডেশন, লগিং, সিকিউরিটি চেক, এবং অন্যান্য প্রাথমিক কার্যক্রম করতে ব্যবহৃত হয়।

2. Post-processing:

Post-processing হলো সেই প্রক্রিয়া যা Action ক্লাসের কার্যক্রম শেষ হওয়ার পরে সম্পাদিত হয়। এটি সাধারণত অ্যাকশন এক্সিকিউট হওয়ার পরে রেসপন্স তৈরি করার সময়, যেমন রেসপন্স মডিফাই করা, লগিং, সেশন ক্লিয়ারিং ইত্যাদি কাজ করার জন্য ব্যবহৃত হয়।

এই দুটি প্রক্রিয়া Struts 2-এর Interceptor ব্যবস্থায় একত্রিত হয়, যা Action-এ ব্যবহৃত হয় এবং কার্যকরীভাবে এগুলি ট্রিগার করে।


Struts 2-এ Pre-processing এবং Post-processing

Struts 2 ফ্রেমওয়ার্কে Interceptor ব্যবহার করে Pre-processing এবং Post-processing কার্যক্রম সম্পাদন করা হয়। Interceptors মূলত Action ক্লাসের আগে এবং পরে টাস্কগুলি সম্পাদন করতে ব্যবহৃত হয়। Interceptor এর মাধ্যমে আমরা Action প্রোসেসিং-এ গতি এবং কার্যকারিতা বাড়াতে পারি এবং সাধারণ কার্যক্রম যেমন লগিং, সিকিউরিটি, ট্রানজেকশন ম্যানেজমেন্ট ইত্যাদি সহজে নিয়ন্ত্রণ করতে পারি।

1. Pre-processing with Interceptors

Pre-processing এর জন্য Action মেথডে কোনো কাজ শুরু হওয়ার আগে Interceptor এক্সিকিউট হয়। এর মাধ্যমে Action-এ আসা রিকোয়েস্টের উপর ভিত্তি করে কার্যক্রম শুরু করা যায়, যেমন:

  • লগিং: রিকোয়েস্টের আগে লগ ইনফর্মেশন রেকর্ড করা।
  • ভ্যালিডেশন: Action মেথডের আগে ইনপুট ভ্যালিডেশন চেক করা।
  • অথেনটিকেশন: রিকোয়েস্টের জন্য ইউজার অথেনটিকেশন এবং অথরাইজেশন চেক করা।

Pre-processing উদাহরণ:

public class AuthenticationInterceptor implements Interceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // Pre-processing: Checking user authentication before executing the action
        if (userIsNotAuthenticated()) {
            return "login";
        }
        return invocation.invoke();  // Proceed with the action
    }
}

এখানে, AuthenticationInterceptor Interceptor রিকোয়েস্ট আসার আগে ইউজারের অথেনটিকেশন চেক করছে। যদি ইউজার অথেনটিকেট না থাকে, তাহলে অ্যাকশন এক্সিকিউট হওয়ার আগেই লগইন পেজে রিডাইরেক্ট করা হবে।

2. Post-processing with Interceptors

Post-processing এর মাধ্যমে Action এক্সিকিউট করার পর যে কার্যক্রমগুলো সম্পাদিত হয় তা করা হয়। এর মধ্যে রয়েছে:

  • রেসপন্স হ্যান্ডলিং: অ্যাকশন এক্সিকিউট হওয়ার পর রেসপন্স কাস্টমাইজ করা।
  • লগিং: অ্যাকশন এক্সিকিউট করার পর লগ ইনফর্মেশন রেকর্ড করা।
  • সেশন ক্লিয়ারিং: অ্যাকশন কমপ্লিট হওয়ার পর সেশন ক্লিয়ার করা।

Post-processing উদাহরণ:

public class LoggingInterceptor implements Interceptor {
    @Override
    public String intercept(ActionInvocation invocation) throws Exception {
        // Proceed with action execution
        String result = invocation.invoke();
        
        // Post-processing: Logging after action execution
        System.out.println("Action executed: " + invocation.getAction().getClass().getName());
        return result;
    }
}

এখানে, LoggingInterceptor অ্যাকশন এক্সিকিউট করার পরে লগ ইনফর্মেশন প্রিন্ট করছে। এটি Post-processing হিসেবে কাজ করছে, যেখানে অ্যাকশন সম্পন্ন হওয়ার পরে লগিং করা হচ্ছে।


Struts 2-এ Interceptor Configuration

Struts 2-এ Interceptor গুলি সাধারণত struts.xml কনফিগারেশন ফাইলে নির্ধারণ করা হয়। এখানে আপনি Action ক্লাসের সাথে কোন Interceptor যুক্ত করবেন এবং কিভাবে Pre-processing এবং Post-processing কার্যক্রম সঠিকভাবে পরিচালিত হবে তা কনফিগার করা হয়।

Interceptor কনফিগারেশন উদাহরণ:

<struts>
    <package name="default" extends="struts-default">
        <interceptors>
            <interceptor name="authInterceptor" class="com.example.AuthenticationInterceptor"/>
            <interceptor name="loggingInterceptor" class="com.example.LoggingInterceptor"/>
        </interceptors>
        
        <action name="login" class="com.example.LoginAction">
            <interceptor-ref name="authInterceptor"/>
            <interceptor-ref name="loggingInterceptor"/>
            <result>/login.jsp</result>
        </action>
    </package>
</struts>

এখানে, authInterceptor এবং loggingInterceptor দুটি Interceptor নির্দিষ্ট অ্যাকশনের সাথে যুক্ত করা হয়েছে। এটি login অ্যাকশনের জন্য Pre-processing এবং Post-processing কার্যক্রম সম্পাদন করবে।


সারাংশ

Pre-processing এবং Post-processing Struts 2-এ Interceptor ব্যবহারের মাধ্যমে রিকোয়েস্ট এবং রেসপন্স প্রোসেসিংয়ের আগে এবং পরে কার্যক্রম পরিচালনা করা যায়। Pre-processing সাধারণত রিকোয়েস্ট প্রোসেসিং এবং ডেটা ভ্যালিডেশন করার জন্য ব্যবহৃত হয়, এবং Post-processing রেসপন্স হ্যান্ডলিং এবং লগিং করার জন্য ব্যবহৃত হয়। এই দুটি প্রক্রিয়া Struts 2 ফ্রেমওয়ার্কের কার্যক্রমকে আরও মডুলার এবং কাস্টমাইজেবল করে তোলে, যেখানে কোড পুনঃব্যবহারযোগ্যতা এবং কার্যকরী ফ্লো কন্ট্রোল পাওয়া যায়।

Content added By

Interceptors স্ট্রাটস 2 ফ্রেমওয়ার্কের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা অ্যাকশন ক্লাসের প্রক্রিয়া সম্পাদন করার পূর্বে এবং পরে নির্দিষ্ট কার্যক্রম সম্পাদন করতে ব্যবহৃত হয়। Interceptors মূলত অ্যাকশনের লাইফ সাইকেল পরিচালনা করে এবং pre-processing এবং post-processing কার্যক্রম পরিচালনা করতে সাহায্য করে। স্ট্রাটস 2 একটি শক্তিশালী এবং নমনীয় interceptor সিস্টেম প্রদান করে, যা বিভিন্ন কাজ যেমন লগিং, সিকিউরিটি চেক, ডেটা ভ্যালিডেশন, ইত্যাদি সহজে করা সম্ভব করে।

Default Interceptors in Struts 2

স্ট্রাটস 2 বেশ কিছু default interceptors প্রদান করে, যেগুলি সাধারণত অ্যাকশনের প্রক্রিয়া সম্পাদনের পূর্বে এবং পরে ব্যবহৃত হয়। কিছু সাধারণ default interceptors:

  1. params: এটি HTTP রিকোয়েস্ট থেকে প্যারামিটার সংগ্রহ করে এবং সেটি অ্যাকশনের প্রপার্টির সাথে সেট করে।
  2. validation: এই interceptor অ্যাকশন ক্লাসের ডেটা ভ্যালিডেশন পরিচালনা করে।
  3. workflow: এটি অ্যাকশন ক্লাসের মধ্যে নেভিগেশন স্টেটস এবং ফলাফল পরিচালনা করে।
  4. logging: এই interceptor অ্যাকশনের কার্যকলাপ লগ করে।
  5. 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 এর উন্নত বৈশিষ্ট্য

  1. Pre-Processing:
    • অ্যাকশন ক্লাসের আগে কোনো বিশেষ কার্যক্রম (যেমন লোগিং, সিকিউরিটি চেক, ডেটা প্রিপ্রসেসিং) সম্পাদন করা যায়।
  2. Post-Processing:
    • অ্যাকশন ক্লাসের পরে কোনো কার্যক্রম (যেমন রেজাল্ট সেট করা, রেসপন্স মডিফাই করা) সম্পাদন করা যায়।
  3. Error Handling:
    • আপনি কাস্টম interceptor ব্যবহার করে ইরর হ্যান্ডলিং বা এক্সপশান ম্যানেজমেন্ট করতে পারেন।
  4. Cross-Cutting Concerns:
    • Interceptors cross-cutting concerns (যেমন লগিং, অথেনটিকেশন, সিকিউরিটি, ট্রানজেকশন ম্যানেজমেন্ট) হ্যান্ডল করতে ব্যবহৃত হয়, যা একাধিক অ্যাকশনে প্রযোজ্য হতে পারে।

Summary

  • Default Interceptors Struts 2 এর built-in interceptors যা অ্যাকশন ক্লাসের প্রক্রিয়া আগে এবং পরে কাজ করে, যেমন প্যারামিটার হ্যান্ডলিং, ভ্যালিডেশন, লগিং ইত্যাদি।
  • Custom Interceptors আপনাকে প্রয়োজনীয় লজিক যুক্ত করার জন্য স্ট্রাটস 2-এ কাস্টম interceptors তৈরি করতে দেয়। এগুলি বিশেষ কার্যক্রম যেমন লগিং, সিকিউরিটি, অথবা বিভিন্ন প্রি এবং পোস্ট প্রসেসিং কার্যক্রমে ব্যবহৃত হয়।
  • Interceptor System স্ট্রাটস 2 অ্যাপ্লিকেশনকে আরো শক্তিশালী এবং ফ্লেক্সিবল করে তোলে, কারণ এটি পুনঃব্যবহারযোগ্য এবং কার্যকরী লজিক তৈরি করতে সাহায্য করে যা অ্যাপ্লিকেশনটির বিভিন্ন অংশে একযোগভাবে কাজ করে।
Content added By

Struts 2Interceptor 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>

কোড বিশ্লেষণ:

  1. Interceptor Stack Definition: এখানে একটি কাস্টম ইন্টারসেপ্টর স্ট্যাক myStack তৈরি করা হয়েছে, যেখানে চারটি ইন্টারসেপ্টর রয়েছে:
    • loggingInterceptor: লগিং করার জন্য।
    • validationInterceptor: ইনপুট ভ্যালিডেশন করার জন্য।
    • myCustomInterceptor: একটি কাস্টম ইন্টারসেপ্টর।
    • exceptionInterceptor: এক্সসেপশন হ্যান্ডলিং।
  2. 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 স্ট্যাক কনফিগারেশন খুবই নমনীয় এবং কাস্টম ইন্টারসেপ্টর তৈরি করে সহজেই অ্যাপ্লিকেশনের বিভিন্ন অংশে পুনরায় ব্যবহারযোগ্য কোড প্রয়োগ করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...