Struts 2 এর Results এবং Result Types

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

417

Struts 2 ফ্রেমওয়ার্কে, Results এবং Result Types গুরুত্বপূর্ণ ভূমিকা পালন করে। যখন একটি Action ক্লাস এক্সিকিউট হয়, তখন এটি একটি Result প্রদান করে, যা কীভাবে রেসপন্স প্রদর্শিত হবে তা নির্ধারণ করে। Result Types Struts 2 এ বিভিন্ন ধরনের রেসপন্স প্রদর্শন করতে ব্যবহৃত হয়, যেমন JSP, redirect, freemarker, velocity ইত্যাদি।

1. Results এবং Result Types কী?

  • Results: Struts 2-এ, একটি Result হল অ্যাকশনের শেষে ফিরে আসা মান। এটি একটি স্ট্রিং (যেমন "success", "failure", "error") বা আরও কিছু নির্দিষ্ট ডেটা হতে পারে যা কন্ট্রোলারকে জানায় যে অ্যাকশন সফলভাবে সম্পন্ন হয়েছে অথবা ব্যর্থ হয়েছে।
  • Result Types: Struts 2 এ অনেক ধরনের Result Types রয়েছে, যার মাধ্যমে আপনি অ্যাকশন শেষে যে ধরনের রেসপন্স প্রদর্শন করতে চান তা কনফিগার করতে পারেন। যেমন:
    • JSP: একটি JSP পৃষ্ঠায় রিডিরেক্ট করা।
    • Redirect: অন্য URL এ রিডিরেক্ট করা।
    • JSON: JSON আউটপুট ফেরত করা।
    • XML: XML আউটপুট ফেরত করা।
    • Chain: অন্য অ্যাকশনে চলে যাওয়া।
    • FreeMarker এবং Velocity: HTML বা টেমপ্লেট-ভিত্তিক রেসপন্স তৈরি করা।

2. Action Class এবং Result Types এর মধ্যে সম্পর্ক

Struts 2-এ, অ্যাকশন ক্লাসের মধ্যে Result গুলি কনফিগার করা হয়। struts.xml কনফিগারেশন ফাইলের মাধ্যমে, আপনি একটি অ্যাকশন ক্লাসের জন্য বিভিন্ন Result Types নির্ধারণ করতে পারেন।


3. Result Types উদাহরণ:

1. JSP Result Type

JSP রেজাল্ট টাইপ ব্যবহার করলে, অ্যাকশন ক্লাসের রেসপন্সটি একটি JSP পৃষ্ঠায় রিডিরেক্ট করা হয়।

HelloWorldAction.java:

package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
    private String name;

    public String execute() {
        if (name == null || name.isEmpty()) {
            name = "World";
        }
        return SUCCESS;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

struts.xml:

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

hello.jsp:

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
    <title>Hello Struts 2</title>
</head>
<body>
    <h2>Hello, <s:property value="name" /></h2>
</body>
</html>
  • Explanation: এই উদাহরণে, hello অ্যাকশনটি HelloWorldAction ক্লাসের সাথে সম্পর্কিত এবং রেজাল্ট হিসেবে hello.jsp পৃষ্ঠায় রিডিরেক্ট করা হয়।

2. Redirect Result Type

Redirect Result Type ব্যবহারের মাধ্যমে, আপনি অন্য একটি URL তে রিডিরেক্ট করতে পারেন। এটি সাধারণত পোস্ট-অ্যাকশন রিডিরেক্টে ব্যবহৃত হয়।

struts.xml:

<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="com.example.HelloWorldAction">
            <result type="redirect">/home.jsp</result>
        </action>
    </package>
</struts>
  • Explanation: এখানে, redirect রেজাল্ট টাইপ ব্যবহার করে, অ্যাকশন ক্লাস সফলভাবে এক্সিকিউট হলে /home.jsp তে রিডিরেক্ট করা হবে।

3. Chain Result Type

Chain Result Type ব্যবহার করলে, আপনি এক অ্যাকশন থেকে অন্য অ্যাকশনে রিডিরেক্ট করতে পারেন। এটি এক অ্যাকশনের পরবর্তী অ্যাকশন চালাতে সাহায্য করে।

struts.xml:

<struts>
    <package name="default" extends="struts-default">
        <action name="hello" class="com.example.HelloWorldAction">
            <result type="chain">goodbye</result>
        </action>
        <action name="goodbye" class="com.example.GoodbyeAction">
            <result>/goodbye.jsp</result>
        </action>
    </package>
</struts>
  • Explanation: chain রেজাল্ট টাইপ ব্যবহার করে, hello অ্যাকশন সফলভাবে সম্পন্ন হলে, এটি goodbye অ্যাকশনকে কল করবে এবং শেষমেশ goodbye.jsp পৃষ্ঠায় রিডিরেক্ট হবে।

4. JSON Result Type

JSON রেজাল্ট টাইপ ব্যবহার করলে, অ্যাকশন JSON আউটপুট রিটার্ন করবে, যা AJAX বা অন্যান্য ক্লায়েন্ট সাইড অ্যাপ্লিকেশন দ্বারা ব্যবহার করা যেতে পারে।

struts.xml:

<struts>
    <package name="default" extends="struts-default">
        <action name="getData" class="com.example.DataAction">
            <result type="json"/>
        </action>
    </package>
</struts>

DataAction.java:

package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class DataAction extends ActionSupport {
    private String name;

    public String execute() {
        name = "Struts 2";
        return SUCCESS;
    }

    public String getName() {
        return name;
    }
}
  • Explanation: json রেজাল্ট টাইপ ব্যবহার করে, DataAction ক্লাস JSON ফরম্যাটে রেসপন্স প্রদান করবে।

4. Result Types এর অন্যান্য উদাহরণ

  1. Freemarker: HTML টেমপ্লেট ব্যবহার করার জন্য।

    <result type="freemarker">/WEB-INF/templates/hello.ftl</result>
    
  2. Velocity: Velocity টেমপ্লেট ইঞ্জিন ব্যবহার করার জন্য।

    <result type="velocity">/WEB-INF/templates/hello.vm</result>
    
  3. XML: XML রেসপন্স প্রদান করার জন্য।

    <result type="xml">/WEB-INF/views/hello.xml</result>
    

সারাংশ

Struts 2 এর Results এবং Result Types হল একটি অ্যাকশন ক্লাসের কাজের পরবর্তী রেসপন্স এবং তার আউটপুটের ধরন। Result Types এর মাধ্যমে আপনি JSP, redirect, JSON, XML, Freemarker, Velocity ইত্যাদি রেসপন্স প্রদর্শন করতে পারেন। Struts 2 এর কনফিগারেশন ফাইলের মাধ্যমে আপনি প্রতিটি অ্যাকশনের জন্য পৃথক রেজাল্ট টাইপ নির্ধারণ করতে পারেন, যা অ্যাপ্লিকেশনটির কার্যকারিতা এবং ইউজার ইন্টারফেস কাস্টমাইজেশন উন্নত করে।

Content added By

Struts 2 একটি মডুলার এবং কনফিগারেবল ওয়েব ফ্রেমওয়ার্ক যা MVC (Model-View-Controller) আর্কিটেকচার অনুসরণ করে। Result এবং Result Types এই ফ্রেমওয়ার্কে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে, কারণ এগুলি রিকোয়েস্টের প্রক্রিয়া সম্পন্ন করার পর কোন ভিউ বা পৃষ্ঠায় ইউজারকে রিডিরেক্ট করতে সাহায্য করে।

Result এবং Result Types Struts 2 অ্যাপ্লিকেশনের ফলস্বরূপ প্রদর্শন বা ইউজারের ইনপুট প্রসেসিং এর পর যে পৃষ্ঠা রিডিরেক্ট হবে তা নির্ধারণ করতে ব্যবহৃত হয়।

১. Result (ফলস্বরূপ)

Struts 2-এ Result হল একটি নির্দিষ্ট ফলস্বরূপ বা আউটপুট, যা অ্যাকশন ক্লাসের কার্যক্রম সফল বা ব্যর্থ হলে JSP বা অন্য কোনো ভিউ (View) পৃষ্ঠায় রিডিরেক্ট করে। Result কে আমরা অ্যাকশন ক্লাসে নির্ধারণ করি এবং এটি ব্যবহারকারীকে একটি নির্দিষ্ট পৃষ্ঠায় রিডিরেক্ট করতে সাহায্য করে, যেমন login.jsp, welcome.jsp, ইত্যাদি।

কেন প্রয়োজন?

  • Result ব্যবহারকারীকে ইউজার ইন্টারফেসের জন্য নির্দিষ্ট পৃষ্ঠা বা রিসাল্টে রিডিরেক্ট করতে সহায়তা করে।
  • এটি Action class এর ভিউ বা ফলস্বরূপ কনফিগারেশনের মাধ্যমে ব্যবহৃত হয়, যা JSP, HTML, অথবা অন্যান্য পৃষ্ঠায় আউটপুট প্রদান করে।

Result উদাহরণ:

<action name="login" class="com.example.LoginAction" method="execute">
    <result name="success">/welcome.jsp</result>
    <result name="input">/login.jsp</result>
</action>

ব্যাখ্যা:

  • success রিটার্ন হলে ব্যবহারকারীকে welcome.jsp পৃষ্ঠায় রিডিরেক্ট করা হবে।
  • input রিটার্ন হলে ব্যবহারকারীকে login.jsp পৃষ্ঠায় রিডিরেক্ট করা হবে।

২. Result Types (ফলস্বরূপ টাইপ)

Struts 2-এ Result Types হল একাধিক ধরনের ফলস্বরূপ, যার মাধ্যমে আমরা নির্দিষ্ট কাজ করতে পারি, যেমন রিডিরেক্ট, ফরওয়ার্ড, ফাইল ডাউনলোড, অথবা অন্য কোনো ভিউ রেন্ডার করা। বিভিন্ন Result Types ব্যবহারের মাধ্যমে অ্যাকশন ফলস্বরূপের প্রকার নির্ধারণ করা হয়।

Struts 2 বিভিন্ন Result Types সরবরাহ করে, যা আপনার অ্যাপ্লিকেশনটির কার্যকারিতা বাড়াতে সাহায্য করে। কিছু জনপ্রিয় Result Types হল:

  1. dispatcher (ডিফল্ট): এটি একটি সাধারণ ফরওয়ার্ড রেজাল্ট টাইপ, যা অ্যাকশন মেথডের পর ভিউ পৃষ্ঠায় রিডিরেক্ট করে।
  2. redirect: এটি একটি HTTP রিডিরেক্ট রেজাল্ট টাইপ, যা ইউজারকে নতুন URL তে রিডিরেক্ট করে।
  3. chain: এটি একটি অ্যাকশন চেইন রেজাল্ট টাইপ, যা একটি অ্যাকশন থেকে অন্য অ্যাকশনে রিডিরেক্ট করে।
  4. stream: এটি একটি ফাইল স্ট্রিম রেজাল্ট টাইপ, যা ইউজারকে একটি ফাইল ডাউনলোডের জন্য প্রদান করে।
  5. tiles: এটি Apache Tiles ব্যবহার করে টেমপ্লেট ভিত্তিক রেন্ডারিং করে।

কেন প্রয়োজন?

  • Result Types ব্যবহার করে আমরা অ্যাকশন ফলস্বরূপের আচরণ নির্ধারণ করতে পারি।
  • এটি ভিউ পৃষ্ঠার ধরনের উপর নির্ভর করে ইন্টারঅ্যাকশন পরিচালনা করে, যেমন ফর্ম সাবমিশন, রিডিরেকশন, বা ডাউনলোড।
  • বিভিন্ন অ্যাপ্লিকেশন পরিস্থিতির জন্য উপযুক্ত ফলস্বরূপ নির্বাচন করার মাধ্যমে অ্যাপ্লিকেশনটি আরো কার্যকরী হয়ে ওঠে।

Result Types এর উদাহরণ:

<action name="login" class="com.example.LoginAction" method="execute">
    <result name="success" type="dispatcher">/welcome.jsp</result>
    <result name="loginError" type="redirect">/login.jsp</result>
    <result name="download" type="stream">/files/sample.pdf</result>
</action>

ব্যাখ্যা:

  • dispatcher: যদি success রিটার্ন হয়, তখন welcome.jsp পৃষ্ঠায় ফরওয়ার্ড হবে।
  • redirect: যদি loginError রিটার্ন হয়, তখন login.jsp পৃষ্ঠায় HTTP রিডিরেক্ট হবে।
  • stream: যদি download রিটার্ন হয়, তখন ব্যবহারকারীকে sample.pdf ফাইল ডাউনলোড করার জন্য প্রদান করা হবে।

Struts 2-এ Common Result Types:

  1. dispatcher (ডিফল্ট):
    • Description: এটি সবচেয়ে সাধারণ ফলস্বরূপ, যা ভিউ পৃষ্ঠার মধ্যে এক অ্যাকশন থেকে অন্য অ্যাকশনে ফরওয়ার্ড করতে ব্যবহৃত হয়।
    • Example:

      <result name="success" type="dispatcher">/success.jsp</result>
      
  2. redirect:
    • Description: এটি HTTP রিডিরেক্ট ফলস্বরূপ টাইপ, যা নতুন পৃষ্ঠায় রিডিরেক্ট করে।
    • Example:

      <result name="success" type="redirect">/home.jsp</result>
      
  3. chain:
    • Description: এটি এক অ্যাকশন থেকে অন্য অ্যাকশন চেইন করতে ব্যবহৃত হয়। অর্থাৎ, একটি অ্যাকশন থেকে আরেকটি অ্যাকশন কল হবে।
    • Example:

      <result name="nextAction" type="chain">nextAction</result>
      
  4. stream:
    • Description: এটি ফাইল স্ট্রিমের মাধ্যমে একটি ফাইল ইউজারের কাছে পাঠানোর জন্য ব্যবহৃত হয়, যেমন ডাউনলোড ফাইল।
    • Example:

      <result name="download" type="stream">/path/to/file.pdf</result>
      
  5. tiles:
    • Description: এটি Apache Tiles টেমপ্লেট ইঞ্জিন ব্যবহার করে পেজ টেমপ্লেট রেন্ডার করে।
    • Example:

      <result name="success" type="tiles">welcomePage</result>
      

সারাংশ

Result এবং Result Types Struts 2 এর একটি গুরুত্বপূর্ণ অংশ, যা অ্যাকশন ক্লাস থেকে ইউজারের রিকোয়েস্ট অনুযায়ী উপযুক্ত ভিউ বা ফলস্বরূপ নির্ধারণ করতে সহায়ক। Result হল ফলস্বরূপ পেজ বা ভিউ, যেখানে Result Types তা কিভাবে প্রক্রিয়া হবে (ফরওয়ার্ড, রিডিরেক্ট, ফাইল ডাউনলোড ইত্যাদি) তা নির্ধারণ করে। Struts 2-এর dispatcher, redirect, chain, stream, এবং tiles এর মতো Result Types অ্যাপ্লিকেশনটির কার্যকারিতা এবং ভিউ পরিবর্তন করার জন্য ব্যবহার করা হয়।

Content added By

Action থেকে Result Return করার প্রক্রিয়া

Struts 2-এ Action ক্লাস থেকে একটি Result রিটার্ন করার প্রক্রিয়া বেশ গুরুত্বপূর্ণ এবং এটি অ্যাপ্লিকেশনের কাঠামো এবং ফ্লো নির্ধারণ করে। যখন ব্যবহারকারী কোনো অ্যাকশন ট্রিগার করে (যেমন একটি ফর্ম সাবমিট করা), তখন Action ক্লাসটি সেই রিকোয়েস্ট প্রসেস করে এবং একটি ফলাফল (Result) রিটার্ন করে। এই ফলাফলটি সাধারণত struts.xml কনফিগারেশন ফাইলের মাধ্যমে মেপিং করা হয়, এবং এর মাধ্যমে অ্যাকশনটি কোন ভিউ পৃষ্ঠায় (JSP) রিডিরেক্ট করবে তা নির্ধারণ করা হয়।

Action থেকে Result কীভাবে Return করা হয়?

Struts 2-এ, Action ক্লাসের মধ্যে একটি মেথড থাকে (সাধারণত execute()), যা কাজ সম্পন্ন করার পরে একটি String রিটার্ন করে। এই String মানটি struts.xml কনফিগারেশন ফাইলে সংজ্ঞায়িত ফলাফলের সাথে মিলিত হয়।

  • SUCCESS: সাধারণত সফল রিকোয়েস্টের জন্য ব্যবহৃত হয়।
  • ERROR: কোনো সমস্যা বা ত্রুটি ঘটলে ব্যবহৃত হয়।
  • INPUT: ইনপুটের জন্য ব্যবহৃত হয়, যেমন যখন ফর্ম ভ্যালিডেশন ব্যর্থ হয়।
  • অন্যান্য কাস্টম ফলাফল (যেমন, login, logout ইত্যাদি)।

উদাহরণ: Action থেকে Result Return করা

১. Action ক্লাস তৈরি করা

প্রথমে, একটি Action ক্লাস তৈরি করা হয় যা ফর্ম ডেটা প্রক্রিয়া করবে এবং ফলস্বরূপ একটি স্ট্রিং রিটার্ন করবে, যেমন SUCCESS অথবা ERROR

package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {

    private String username;
    private String password;

    // Getter and Setter methods for username and password
    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    // Action method to process the form data and return a result
    public String execute() {
        // Simple validation for demonstration purposes
        if ("admin".equals(username) && "password123".equals(password)) {
            return SUCCESS;  // Return SUCCESS if credentials are correct
        } else {
            return ERROR;  // Return ERROR if credentials are incorrect
        }
    }
}

ব্যাখ্যা:

  • LoginAction ক্লাসে username এবং password দুটি প্রপার্টি আছে এবং তাদের জন্য getter এবং setter মেথড রয়েছে।
  • execute() মেথডটি ফর্মের ডেটা প্রক্রিয়া করে এবং SUCCESS বা ERROR রিটার্ন করে, যার মাধ্যমে পরবর্তী ফলাফল নির্ধারিত হয়।
  • SUCCESS রিটার্ন হলে ব্যবহারকারীকে লগইন সফল হওয়ার পর রিডিরেক্ট করা হবে এবং ERROR রিটার্ন হলে ত্রুটি বার্তা প্রদর্শিত হবে।

২. struts.xml কনফিগারেশন ফাইল

struts.xml ফাইলটি অ্যাকশন এবং ফলাফল নির্ধারণ করার জন্য ব্যবহৃত হয়। এখানে LoginAction ক্লাসের জন্য Action মেপিং এবং এর ফলাফল কনফিগার করা হবে।

<struts>
    <package name="default" extends="struts-default">
        <action name="login" class="com.example.LoginAction">
            <result name="success">/welcome.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

ব্যাখ্যা:

  • action name="login": অ্যাকশনটি LoginAction ক্লাসের সাথে যুক্ত।
  • result: অ্যাকশনটি দুটি ফলাফল নির্ধারণ করেছে:
    • SUCCESS: যদি ইউজারনেম এবং পাসওয়ার্ড সঠিক হয়, তাহলে ব্যবহারকারী /welcome.jsp পৃষ্ঠায় রিডিরেক্ট হবে।
    • ERROR: যদি ইউজারনেম বা পাসওয়ার্ড ভুল হয়, তাহলে /error.jsp পৃষ্ঠায় রিডিরেক্ট হবে।

৩. JSP পৃষ্ঠা (ফর্ম তৈরি করা)

এখন, একটি ফর্ম তৈরি করা হবে যেখানে ব্যবহারকারী নাম এবং পাসওয়ার্ড প্রদান করবে।

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head><title>Login</title></head>
<body>
    <h2>Login Form</h2>

    <s:form action="login" method="post">
        <s:textfield name="username" label="Username" required="true" />
        <s:password name="password" label="Password" required="true" />
        <s:submit value="Login" />
    </s:form>
</body>
</html>

ব্যাখ্যা:

  • s:form: Struts 2 এর ফর্ম ট্যাগ ব্যবহার করে ফর্ম তৈরি করা হয়েছে।
  • action="login": এটি login অ্যাকশনটি ট্রিগার করবে, যা LoginAction ক্লাসে যাবে।
  • s:textfield এবং s:password: ফিল্ডগুলো ব্যবহারকারী ইনপুটের জন্য তৈরি করা হয়েছে।
  • s:submit: ফর্ম সাবমিট করার জন্য একটি বাটন।

৪. Result View (Welcome Page)

ফর্ম সফলভাবে সাবমিট হলে, ব্যবহারকারীকে একটি স্বাগত পৃষ্ঠায় রিডিরেক্ট করা হবে।

<html>
<head><title>Welcome</title></head>
<body>
    <h2>Welcome, ${username}!</h2>
</body>
</html>

ব্যাখ্যা:

  • ${username}: এটি Action ক্লাস থেকে প্রাপ্ত username প্রপার্টি জেএসপিতে প্রদর্শন করবে।

৫. Error Page

ফর্ম সাবমিটের সময় ত্রুটি হলে, ব্যবহারকারীকে একটি ত্রুটি পৃষ্ঠায় রিডিরেক্ট করা হবে।

<html>
<head><title>Error</title></head>
<body>
    <h2>Invalid credentials. Please try again!</h2>
</body>
</html>

ব্যাখ্যা:

  • যদি ব্যবহারকারী ভুল ব্যবহারকারীর নাম বা পাসওয়ার্ড প্রদান করে, তাহলে ERROR রেজাল্ট রিটার্ন হবে এবং ত্রুটি পৃষ্ঠা প্রদর্শিত হবে।

Struts 2 তে Action থেকে Result Return করার উপকারিতা

  1. ফ্লেক্সিবিলিটি: Action ক্লাস থেকে ডায়নামিকভাবে বিভিন্ন রেজাল্ট (SUCCESS, ERROR, INPUT) রিটার্ন করা যায়, যা কাস্টম রিডিরেকশন বা ফলাফল ম্যানেজমেন্ট সহজ করে।
  2. মডুলার কোড: Action ক্লাসগুলোতে ফর্ম ডেটা প্রসেসিং এবং লজিক রাখা হয়, যা কোডকে মডুলার এবং পরিষ্কার করে।
  3. ডেটা ভ্যালিডেশন: Action ক্লাসে ডেটা ভ্যালিডেশন করা যেতে পারে, যা অ্যাপ্লিকেশনের সিকিউরিটি ও কর্মক্ষমতা উন্নত করে।

সারাংশ

Struts 2 তে Action ক্লাস থেকে Result রিটার্ন করার প্রক্রিয়া অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি অ্যাকশন ক্লাস থেকে ডেটা প্রসেস করার পরে পরবর্তী ফলাফল (যেমন JSP পৃষ্ঠা) নির্ধারণ করে। Action থেকে SUCCESS, ERROR, বা কাস্টম ফলাফল রিটার্ন করে Struts 2 ফ্রেমওয়ার্ক অ্যাপ্লিকেশনের ফ্লো কন্ট্রোল করতে সাহায্য করে। Struts 2-এর struts.xml কনফিগারেশন ফাইলের মাধ্যমে অ্যাকশন এবং ফলাফলগুলো মেপিং করা হয়, যা অ্যাপ্লিকেশনটিকে খুবই নমনীয় এবং কাস্টমাইজযোগ্য করে তোলে।


Content added By

Struts 2 ফ্রেমওয়ার্কে, রিডাইরেকশন এবং স্ট্রিম রেজাল্ট টাইপগুলি অ্যাপ্লিকেশনটির ব্যবহারকারী অভিজ্ঞতা এবং কাজের প্রবাহ উন্নত করতে ব্যবহৃত হয়। যখন আপনি একটি অ্যাকশন সম্পন্ন করেন এবং নতুন একটি পেজ বা URL তে রিডাইরেক্ট করতে চান, বা কোনো ফাইল বা ডেটা স্ট্রিম করতে চান, তখন এই ফিচারগুলো খুবই কার্যকর।

এই অধ্যায়ে আমরা Redirect, RedirectAction, এবং Stream Result Types এর ব্যবহার ব্যাখ্যা করব।


১. Redirect

Redirect হল একটি HTTP রিডাইরেক্ট প্রক্রিয়া, যা ক্লায়েন্টকে অন্য একটি URL তে নিয়ে যায়। Struts 2 তে, আপনি অ্যাকশন থেকে একটি রিডাইরেক্ট রেজাল্ট রিটার্ন করতে পারেন, যা ব্যবহারকারীকে একটি নতুন URL তে রিডাইরেক্ট করবে। রিডাইরেক্ট সাধারণত একটি অ্যাকশন সম্পূর্ণ করার পর নতুন পেজ বা রিসোর্সে গাইড করতে ব্যবহৃত হয়।

উদাহরণ: Redirect ব্যবহার করা

package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class RedirectAction extends ActionSupport {
    
    @Override
    public String execute() {
        // রিডাইরেক্ট রিটার্ন করা
        return REDIRECT + "successPage.jsp";
    }
}

কোড ব্যাখ্যা:

  • REDIRECT স্ট্রিংটি Struts 2 এ ব্যবহৃত একটি কনস্ট্যান্ট যা রিডাইরেক্ট রেজাল্ট নির্দেশ করে।
  • "successPage.jsp" পেজের দিকে রিডাইরেক্ট করার জন্য রিটার্ন করা হয়েছে।

struts.xml কনফিগারেশন

<struts>
    <package name="default" extends="struts-default">
        <action name="redirect" class="com.example.RedirectAction">
            <result name="redirect">redirect:successPage.jsp</result>
        </action>
    </package>
</struts>

এখানে, redirect অ্যাকশনটি successPage.jsp পেজে রিডাইরেক্ট করবে।


২. RedirectAction

RedirectAction Struts 2-এর একটি ফিচার যা একটি অ্যাকশন ক্লাসে নির্দেশিকা দেয় যাতে অ্যাকশন সম্পন্ন হলে এটি ক্লায়েন্টকে অন্য URL তে রিডাইরেক্ট করতে পারে। এটি struts.xml ফাইলের মধ্যে নির্দিষ্ট করা হয়, যা কনফিগারেশন সহজ করে দেয়।

RedirectAction ব্যবহার করলে অ্যাকশন প্রসেস সম্পন্ন হওয়ার পর একটি URL তে সরাসরি রিডাইরেক্ট করা হয়। এটি খুবই সুবিধাজনক যখন আপনি ইন্টারনাল অ্যাকশনের পরিবর্তে এক্সটার্নাল URL তে রিডাইরেক্ট করতে চান।

উদাহরণ: RedirectAction ব্যবহার করা

<struts>
    <package name="default" extends="struts-default">
        <action name="submitForm" class="com.example.FormAction">
            <result type="redirect">/successPage.jsp</result>
        </action>
    </package>
</struts>

এখানে, redirect টাইপের ব্যবহার করা হয়েছে যাতে অ্যাকশন successPage.jsp পেজে রিডাইরেক্ট করতে পারে।

Action ক্লাস উদাহরণ

package com.example;

import com.opensymphony.xwork2.ActionSupport;

public class FormAction extends ActionSupport {
    private String userName;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    @Override
    public String execute() {
        // Form processing logic
        if (userName != null && !userName.isEmpty()) {
            return SUCCESS;
        }
        return INPUT;
    }
}

এখানে, FormAction ক্লাসে userName ইনপুট ফিল্ডের জন্য ডেটা প্রক্রিয়া করা হয়েছে এবং SUCCESS রিটার্ন হলে ক্লায়েন্ট successPage.jsp পেজে রিডাইরেক্ট হবে।


৩. Stream Result Types

Stream Result Types Struts 2 এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ফাইল বা ডেটা স্ট্রিম করতে সহায়তা করে, যেমন ডাউনলোডযোগ্য ফাইল বা ডেটা সঞ্চালন। সাধারণত stream রেজাল্ট ব্যবহার করা হয় যখন আপনাকে একটি ফাইল বা ডেটা রিটার্ন করতে হয় এবং এটি HTTP রেসপন্স হিসেবে ক্লায়েন্টে পাঠাতে হয়।

Struts 2 এ Stream Result সাধারণত ব্যবহার করা হয় ফাইল ডাউনলোডের জন্য, যেমন PDF, Excel, বা CSV ফাইল ডাউনলোড করার জন্য।

উদাহরণ: Stream Result ব্যবহার করা

package com.example;

import com.opensymphony.xwork2.ActionSupport;
import java.io.FileInputStream;
import java.io.InputStream;

public class DownloadAction extends ActionSupport {
    private String fileName;
    private InputStream fileInputStream;

    public InputStream getFileInputStream() {
        return fileInputStream;
    }

    public String getFileName() {
        return fileName;
    }

    @Override
    public String execute() {
        fileName = "example.pdf";
        try {
            // ফাইলের ইনপুট স্ট্রিম সেট করা
            fileInputStream = new FileInputStream("path/to/example.pdf");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return SUCCESS;
    }
}

কোড ব্যাখ্যা:

  • fileInputStream-এ ডাউনলোডের জন্য একটি ফাইলের ইনপুট স্ট্রিম রাখা হয়েছে।
  • getFileInputStream() মেথডটি স্ট্রিম রিটার্ন করে যা stream রেজাল্টের মাধ্যমে ক্লায়েন্টে পাঠানো হয়।

struts.xml কনফিগারেশন

<struts>
    <package name="default" extends="struts-default">
        <action name="downloadFile" class="com.example.DownloadAction">
            <result name="success" type="stream">
                <param name="contentType">application/pdf</param>
                <param name="inputName">fileInputStream</param>
                <param name="contentDisposition">attachment;filename=${fileName}</param>
            </result>
        </action>
    </package>
</struts>

কোড ব্যাখ্যা:

  • type="stream": এটি নির্দেশ করে যে stream result টাইপ ব্যবহার করা হচ্ছে।
  • contentType: ক্লায়েন্টকে পাঠানো ফাইলের MIME টাইপ।
  • inputName: স্ট্রিম অবজেক্টের নাম।
  • contentDisposition: ফাইল ডাউনলোডের জন্য একটি ফাইল নাম সেট করা হয়েছে।

উপসংহার

Redirect, RedirectAction, এবং Stream Result Types Struts 2 ফ্রেমওয়ার্কে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি আপনাকে অ্যাকশন প্রসেসিংয়ের পর পেজ রিডাইরেকশন বা ফাইল ডাউনলোড সহ নানা কাজ করতে সহায়তা করে। Redirect এবং RedirectAction ব্যবহারের মাধ্যমে আপনি URL রিডাইরেক্ট করতে পারেন, এবং Stream Result Types ব্যবহার করে আপনি ফাইল বা ডেটা ক্লায়েন্টে স্ট্রিম করতে পারেন। Struts 2-এ এই বৈশিষ্ট্যগুলো ব্যবহার করে আপনি আরো কার্যকরী এবং ডাইনামিক অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By

Struts 2 একটি MVC (Model-View-Controller) ফ্রেমওয়ার্ক যা বিভিন্ন Result Types সরবরাহ করে। Result হল অ্যাকশন ক্লাসের output যা JSP, Velocity, Freemarker, বা XML ফাইলের মধ্যে ব্যবহারকারীর প্রাসঙ্গিক তথ্য দেখায়। Result Type-এর মাধ্যমে আমরা জানাতে পারি যে, অ্যাকশন ক্লাসটি কোন ধরনের ভিউ (UI) পৃষ্ঠায় রেসপন্স করবে।

Struts 2 বেশ কিছু ভিন্ন Result Type সমর্থন করে, যেমন:

  • JSP (/WEB-INF/jsp/filename.jsp)
  • Redirect (redirect://url)
  • Freemarker (/WEB-INF/freemarker/filename.ftl)
  • Velocity (/WEB-INF/velocity/filename.vm)
  • Dispatcher (যে কোনো অন্য URL)
  • JSON (JSON Response)

এখানে, আমরা Struts 2 এর বিভিন্ন Result Type কনফিগারেশন সহ উদাহরণ দেখব।


১. JSP Result Type

JSP Result Type একটি সাধারণ এবং জনপ্রিয় Result Type যা JSP ফাইলের মাধ্যমে ভিউ বা UI তৈরি করতে ব্যবহৃত হয়। এটি সবচেয়ে বেশি ব্যবহৃত হয় যখন আপনি JSP ব্যবহার করে একটি HTML পৃষ্ঠায় ডেটা রেন্ডার করতে চান।

উদাহরণ: JSP Result Type

  1. Action Class:
import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {
    private String message;

    public String execute() {
        message = "Hello, Struts 2!";
        return SUCCESS;
    }

    public String getMessage() {
        return message;
    }
}
  1. struts.xml Configuration:
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="hello" class="com.example.HelloWorldAction">
            <result>/WEB-INF/jsp/hello.jsp</result>
        </action>
    </package>
</struts>
  1. JSP Page (hello.jsp):
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
    <h2>Message: <s:property value="message" /></h2>
</body>
</html>

ব্যাখ্যা:

  • Action Class: HelloWorldAction ক্লাসে একটি message ফিল্ড সেট করা হয়েছে এবং SUCCESS রিটার্ন করা হয়েছে।
  • struts.xml: hello.jsp ফাইলটি রিটার্ন করার জন্য কনফিগার করা হয়েছে।
  • hello.jsp: এটি ব্যবহারকারীর কাছে বার্তা প্রদর্শন করবে, যেখানে message প্রপার্টি প্রদর্শিত হবে।

২. Redirect Result Type

Redirect Result Type ব্যবহারকারীকে একটি নতুন URL বা পৃষ্ঠায় রিডিরেক্ট করতে ব্যবহৃত হয়। এটি HTTP Redirect ব্যবহার করে এবং সাধারণত POST-Redirect-GET (PRG) প্যাটার্নে ব্যবহৃত হয়।

উদাহরণ: Redirect Result Type

  1. Action Class:
import com.opensymphony.xwork2.ActionSupport;

public class RedirectAction extends ActionSupport {
    private String name;

    public String execute() {
        name = "John Doe";
        return REDIRECT; // Redirect to another action or URL
    }

    public String getName() {
        return name;
    }
}
  1. struts.xml Configuration:
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="redirectAction" class="com.example.RedirectAction">
            <result name="redirect">redirect:/redirectedPage.jsp</result>
        </action>
    </package>
</struts>

ব্যাখ্যা:

  • Action Class: RedirectAction ক্লাসটি রিডিরেক্ট কনফিগার করে। REDIRECT রিটার্ন করলে সেটি struts.xml কনফিগারেশনে নির্দেশিত URL বা পৃষ্ঠায় রিডিরেক্ট করবে।

৩. JSON Result Type

Struts 2 JSON রেসপন্সের মাধ্যমে ক্লায়েন্টকে ডেটা পাঠানোর জন্য JSON রেজাল্ট টাইপ সমর্থন করে। এটি বিশেষভাবে API বা অ্যাজাক্স কলের জন্য উপকারী।

উদাহরণ: JSON Result Type

  1. Action Class:
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class JsonAction extends ActionSupport {
    private String username;

    public String execute() {
        return SUCCESS;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}
  1. struts.xml Configuration:
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="jsonAction" class="com.example.JsonAction">
            <result type="json">
                <param name="root">username</param>
            </result>
        </action>
    </package>
</struts>

ব্যাখ্যা:

  • Action Class: JsonAction ক্লাসে username প্রপার্টি ডিফাইন করা হয়েছে।
  • struts.xml: JSON রেজাল্ট টাইপ কনফিগার করা হয়েছে, যা username রিটার্ন করবে।

৪. Freemarker Result Type

Struts 2 Freemarker টেমপ্লেট ইঞ্জিন ব্যবহার করে ডাইনামিক কনটেন্ট রেন্ডার করতে সহায়ক। এটি টেমপ্লেট ফাইল থেকে ডেটা প্রদর্শন করতে ব্যবহৃত হয়।

উদাহরণ: Freemarker Result Type

  1. Action Class:
import com.opensymphony.xwork2.ActionSupport;

public class FreemarkerAction extends ActionSupport {
    private String username;

    public String execute() {
        username = "John Doe";
        return SUCCESS;
    }

    public String getUsername() {
        return username;
    }
}
  1. struts.xml Configuration:
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="freemarkerAction" class="com.example.FreemarkerAction">
            <result type="freemarker">/WEB-INF/freemarker/welcome.ftl</result>
        </action>
    </package>
</struts>
  1. Freemarker Template (welcome.ftl):
<html>
<body>
    <h2>Welcome, ${username}!</h2>
</body>
</html>

ব্যাখ্যা:

  • Action Class: FreemarkerAction ক্লাসে username সেট করা হয়েছে।
  • struts.xml: freemarker রেজাল্ট টাইপ দিয়ে Freemarker টেমপ্লেট রেন্ডার করা হয়েছে।
  • welcome.ftl: এটি Freemarker টেমপ্লেট, যা username দেখায়।

৫. Velocity Result Type

Struts 2 Velocity টেমপ্লেট ইঞ্জিন ব্যবহার করে ডাইনামিক কনটেন্ট তৈরি করতে সমর্থন করে।

উদাহরণ: Velocity Result Type

  1. Action Class:
import com.opensymphony.xwork2.ActionSupport;

public class VelocityAction extends ActionSupport {
    private String username;

    public String execute() {
        username = "John Doe";
        return SUCCESS;
    }

    public String getUsername() {
        return username;
    }
}
  1. struts.xml Configuration:
<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="velocityAction" class="com.example.VelocityAction">
            <result type="velocity">/WEB-INF/velocity/welcome.vm</result>
        </action>
    </package>
</struts>
  1. Velocity Template (welcome.vm):
<html>
<body>
    <h2>Welcome, $username!</h2>
</body>
</html>

ব্যাখ্যা:

  • Action Class: VelocityAction ক্লাসে username প্রপার্টি সেট করা হয়েছে।
  • struts.xml: velocity রেজাল্ট টাইপ কনফিগার করা হয়েছে।
  • welcome.vm: এটি Velocity টেমপ্লেট যা username দেখায়।

সারাংশ

Struts 2 একটি খুব শক্তিশালী ফ্রেমওয়ার্ক এবং এতে বিভিন্ন Result Types সমর্থিত যা ডেভেলপারদের জন্য বিভিন্ন ভিউ (UI) টেমপ্লেটের মাধ্যমে ডেটা রেন্ডার করার ক্ষমতা প্রদান করে। JSP, Redirect, JSON, Freemarker, এবং Velocity Result Types Struts 2 অ্যাপ্লিকেশনে অনেক কার্যকরী ভিউ তৈরির জন্য ব্যবহৃত হয়। আপনাকে যা প্রয়োজন, সেক্ষেত্রে উপযুক্ত Result Type কনফিগার করার মাধ্যমে আপনি একটি কার্যকরী ও স্কেলেবল অ্যাপ্লিকেশন তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...