Struts 2 ফ্রেমওয়ার্কের দুটি গুরুত্বপূর্ণ ধারণা হলো Value Stack এবং OGNL (Object-Graph Navigation Language)। এই দুটি কম্পোনেন্ট Struts 2-এ ডেটা পরিচালনা এবং ভিউতে ডেটা পাঠানোর জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে।
১. Value Stack
Value Stack হলো Struts 2 ফ্রেমওয়ার্কের একটি মৌলিক অংশ, যা অ্যাকশন ক্লাসের ডেটাকে ভিউতে (JSP) পাঠানোর জন্য ব্যবহৃত হয়। এটি Struts 2-এর একটি ডেটা স্টোরেজ, যেখানে অ্যাকশন ক্লাসের সমস্ত ডেটা রাখা হয় এবং তা ভিউ কম্পোনেন্টে (যেমন JSP পৃষ্ঠা) প্রেরণ করা হয়। Value Stack এর মাধ্যমে অ্যাকশন ক্লাসের প্রপার্টিগুলি সহজেই ভিউতে অ্যাক্সেস করা যায়, যা OGNL ব্যবহার করে করা হয়।
Value Stack এর কাজ:
- অ্যাকশন ক্লাসে সংরক্ষিত সমস্ত প্রপার্টি Value Stack এ সংরক্ষিত থাকে।
- Value Stack ইউজারের ইনপুট বা অ্যাকশন এক্সিকিউশন শেষে প্রক্রিয়াকৃত ডেটা ভিউতে প্রেরণ করতে ব্যবহৃত হয়।
- OGNL (Object-Graph Navigation Language) এর মাধ্যমে ভিউ থেকে Value Stack এর ডেটা অ্যাক্সেস করা যায়।
Value Stack এর উদাহরণ: ধরা যাক, একটি অ্যাকশন ক্লাসে name এবং age নামক দুটি প্রপার্টি রয়েছে, যেগুলি Value Stack এ যোগ করা হয়েছে। এই প্রপার্টি গুলি JSP পৃষ্ঠায় দেখতে হলে OGNL ব্যবহার করে সেগুলি অ্যাক্সেস করা যাবে।
public class GreetingAction extends ActionSupport {
private String name;
private int age;
public String execute() {
name = "জন";
age = 25;
return SUCCESS;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
এই অ্যাকশন ক্লাসে name এবং age প্রপার্টি Value Stack এ সংরক্ষিত হবে এবং Struts 2 ভিউ (JSP) এ সেগুলি প্রদর্শন করতে সক্ষম হবে।
২. OGNL (Object-Graph Navigation Language)
OGNL হল একটি এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Struts 2 ফ্রেমওয়ার্কের মাধ্যমে Value Stack এর ডেটা অ্যাক্সেস করতে ব্যবহৃত হয়। OGNL এর মাধ্যমে আপনি অ্যাকশন ক্লাসের প্রপার্টি এবং মেথডকে খুব সহজে ভিউতে রিড বা সেট করতে পারেন।
OGNL ব্যবহার করে আপনি Value Stack এর মধ্যে থাকা ডেটাকে ইঙ্গিত করতে এবং প্রদর্শন করতে পারেন। যেমনঃ অ্যাকশন ক্লাসে ডেটা পাওয়া যায় এবং তা OGNL দিয়ে JSP তে প্রেরণ করা হয়।
OGNL এর কাজ:
- OGNL এর মাধ্যমে আপনি Value Stack এর ডেটা অ্যাক্সেস করতে পারেন।
- OGNL একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা জটিল ডেটা কাঠামোও সহজেই নেভিগেট করতে পারে।
- OGNL এর সাহায্যে অ্যাকশন ক্লাসের প্রপার্টি বা মেথডের মান কাস্টমাইজ এবং ম্যানিপুলেট করা যায়।
OGNL এর উদাহরণ
১. Action Class (GreetingAction.java)
public class GreetingAction extends ActionSupport {
private String name;
private int age;
public String execute() {
name = "জন";
age = 25;
return SUCCESS;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
২. Struts Configuration (struts.xml)
<struts>
<package name="default" extends="struts-default">
<action name="greetUser" class="com.example.GreetingAction" method="execute">
<result>/greeting.jsp</result>
</action>
</package>
</struts>
৩. JSP File (greeting.jsp)
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<h2>স্বাগতম, <s:property value="name"/>!</h2>
<p>আপনার বয়স: <s:property value="age"/></p>
</body>
</html>
ব্যাখ্যা:
- এখানে
s:propertyট্যাগ ব্যবহার করা হয়েছে, যা OGNL এর মাধ্যমে Value Stack থেকেnameএবংageপ্রপার্টি অ্যাক্সেস করবে। value="name"এবংvalue="age"OGNL এক্সপ্রেশন হিসেবে কাজ করছে, যাGreetingActionক্লাসের প্রপার্টি থেকে ডেটা নিয়ে আসবে এবং সেগুলি JSP তে দেখাবে।
Value Stack এবং OGNL এর সুবিধা
- ডেটা হ্যান্ডলিং সহজ: Value Stack এবং OGNL এর মাধ্যমে অ্যাকশন ক্লাস থেকে ডেটা সংগ্রহ করা এবং তা ভিউতে পাঠানো অনেক সহজ।
- ডাইনামিক ডেটা: OGNL ব্যবহার করে আপনি ডাইনামিকভাবে ডেটা পরিবর্তন বা আপডেট করতে পারেন।
- আনুষ্ঠানিকতা কমানো: অ্যাকশন ক্লাস থেকে ডেটা ভিউতে পাঠানোর জন্য কোন অতিরিক্ত কোড লিখতে হয় না, যা ডেভেলপমেন্টে দ্রুততা আনায়।
- ভিন্ন ভিন্ন ডেটা টাইপ সমর্থন: OGNL সঠিকভাবে সমস্ত ধরনের ডেটা (অবজেক্ট, তালিকা, ম্যাপ ইত্যাদি) অ্যাক্সেস করতে সহায়ক।
সারাংশ
Value Stack এবং OGNL হল Struts 2 এর গুরুত্বপূর্ণ দুটি কম্পোনেন্ট, যা অ্যাকশন ক্লাস থেকে ডেটা সংগ্রহ এবং ভিউতে পাঠানোর প্রক্রিয়া সহজ করে। Value Stack অ্যাকশন ক্লাসের ডেটাকে ভিউতে পাঠানোর জন্য একটি ডেটা স্টোরেজ হিসাবে কাজ করে এবং OGNL ব্যবহার করে সেই ডেটা ভিউতে অ্যাক্সেস করা হয়। এই দুটি কম্পোনেন্টের মাধ্যমে Struts 2 অ্যাপ্লিকেশনগুলিতে ডেটার প্রবাহ এবং ব্যবস্থাপনা সহজ এবং দ্রুত হয়।
Value Stack Struts 2-এর একটি গুরুত্বপূর্ণ অংশ, যা MVC (Model-View-Controller) আর্কিটেকচারের মধ্যে ডাটা পরিচালনা করে। এটি Struts 2 অ্যাপ্লিকেশনের মধ্যে ডাটার অস্থায়ী স্টোরেজ হিসেবে কাজ করে এবং Action, JSP, এবং Interceptors এর মধ্যে ডাটা শেয়ার করার জন্য ব্যবহৃত হয়। সহজভাবে বলতে গেলে, Value Stack হল এক ধরনের Contextual Data Holder যা অ্যাপ্লিকেশন চলাকালীন সময়ে ব্যবহৃত ডাটাগুলিকে ধারণ করে।
Struts 2 অ্যাপ্লিকেশনে Value Stack ব্যবহারের মাধ্যমে আপনি ডাটা যেমন Action class, JSP page, এবং Interceptors এর মধ্যে শেয়ার করতে পারেন, যা MVC আর্কিটেকচারের অংশ হিসেবে একসাথে কাজ করে।
Value Stack এর মূল কাজ
- Model Data Store: Value Stack মূলত মডেল ডাটা ধারণ করে, যা ইউজারের রিকোয়েস্ট অনুযায়ী Action class থেকে JSP page-এ পাস করা হয়।
- Temporary Data Store: এটি অ্যাকশন ক্লাসের মধ্যে থাকা ডাটা এবং ইউজারের রিকোয়েস্টের ভিত্তিতে তৈরি হওয়া ডাটাকে সংরক্ষণ করে রাখে। এরপর সেই ডাটা টেমপোরারি ভ্যালু হিসেবে ব্যবহার হয়।
- Data Sharing between Action and View: Value Stack Action ক্লাস থেকে ডাটা JSP পেজে প্রেরণ করে, যার মাধ্যমে ডাটা ভিউ-তে ডিসপ্লে করা হয়।
Value Stack এর কার্যপ্রণালী
১. Action Class এবং Value Stack
Action ক্লাসের মধ্যে থাকা ডাটাকে Value Stack এর মধ্যে রাখা হয়। যখন রিকোয়েস্ট প্রোসেসিং সম্পন্ন হয়, Action class থেকে ডাটা Value Stack এর মধ্যে রাখা হয় এবং JSP page এ তা রেন্ডার করা হয়।
২. Value Stack থেকে ডাটা অ্যাক্সেস
Struts 2 এর OGNL (Object-Graph Navigation Language) ব্যবহার করে Value Stack থেকে ডাটা অ্যাক্সেস করা হয়। OGNL হল একটি এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Struts 2-এর মধ্যে ডাটা ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
৩. JSP-এ Value Stack থেকে ডাটা অ্যাক্সেস করা
JSP পেজে Value Stack থেকে ডাটা অ্যাক্সেস করতে Struts 2 এর ট্যাগ লাইব্রেরি ব্যবহার করা হয়। উদাহরণস্বরূপ, আপনি <s:property> ট্যাগ ব্যবহার করে Value Stack থেকে প্রপার্টি ডিসপ্লে করতে পারেন।
Value Stack এর উদাহরণ
ধরা যাক, আপনার একটি অ্যাকশন ক্লাস রয়েছে যার মধ্যে ব্যবহারকারীর নাম রয়েছে এবং আপনি সেই নামকে JSP পেজে দেখাতে চান।
১. Action Class তৈরি করা
package com.example;
import com.opensymphony.xwork2.ActionSupport;
public class HelloAction extends ActionSupport {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String execute() throws Exception {
// Set name in the value stack
name = "John Doe";
return SUCCESS;
}
}
এখানে name ভ্যারিয়েবল Value Stack এ রাখা হবে এবং JSP পেজে তা ব্যবহার করা হবে।
২. Struts 2 Configuration (struts.xml)
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hello" class="com.example.HelloAction" method="execute">
<result>/WEB-INF/content/hello.jsp</result>
</action>
</package>
</struts>
৩. JSP পেজ তৈরি করা
<!-- hello.jsp -->
<html>
<body>
<h2>Hello, <s:property value="name" /></h2>
</body>
</html>
এখানে, <s:property value="name"/> ট্যাগ ব্যবহার করে Value Stack থেকে name ভ্যারিয়েবলটির মান JSP পেজে প্রদর্শন করা হয়েছে।
Value Stack এর মধ্যে থাকা অবজেক্ট
Struts 2-এর Value Stack সাধারণত বিভিন্ন ধরণের অবজেক্ট ধারণ করতে পারে:
- Action class properties: অ্যাকশন ক্লাসের প্রপার্টিগুলি।
- OGNL Expressions: OGNL এক্সপ্রেশন থেকে প্রাপ্ত ডাটা।
- Parameters: রিকোয়েস্ট প্যারামিটারগুলিও Value Stack এর মধ্যে থাকতে পারে।
- Application Context Objects: ইন্টারসেপ্টর এবং অন্যান্য কম্পোনেন্টের মাধ্যমে অ্যাপ্লিকেশন কনটেক্সটের অবজেক্ট।
Value Stack এবং OGNL
OGNL (Object-Graph Navigation Language) হল একটি এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Struts 2-এর Value Stack থেকে ডাটা এক্সেস করার জন্য ব্যবহৃত হয়। OGNL এর মাধ্যমে আপনি Value Stack এর মধ্যে থাকা অবজেক্টগুলির মানকে অ্যাক্সেস করতে পারেন।
উদাহরণ: OGNL Expressions ব্যবহার
<s:property value="user.name" />
এখানে user.name OGNL এক্সপ্রেশন ব্যবহার করা হয়েছে, যেখানে user Value Stack এ থাকা অবজেক্ট এবং name তার প্রপার্টি।
Value Stack এর গুরুত্বপূর্ণ বৈশিষ্ট্য
- Dynamic Data Access: OGNL ব্যবহার করে Value Stack থেকে ডাটা সহজে অ্যাক্সেস করা যায়।
- Data Shifting: Value Stack ব্যবহারকারী অ্যাকশন ক্লাস এবং JSP পেজের মধ্যে ডাটা শিফট করতে সাহায্য করে।
- Automatic Population: যখন ActionForm বা Action ক্লাসের প্যারামিটারগুলো JSP পেজে পাওয়ার জন্য অ্যাক্সেস করা হয়, তখন Value Stack স্বয়ংক্রিয়ভাবে তা পরিচালনা করে।
- Data Types Flexibility: Value Stack ডাটা টাইপের জন্য কোন সিমিততা রাখে না এবং বিভিন্ন ডাটা টাইপের জন্য কাজ করতে সক্ষম।
Value Stack এবং Interceptors
Interceptors Struts 2-এ একটি শক্তিশালী কনসেপ্ট, যা রিকোয়েস্ট এবং রেসপন্স প্রোসেসিংয়ের মধ্যে কাজ করে। Interceptors-এ Value Stack থেকে ডাটা শেয়ার এবং ম্যানিপুলেট করা সম্ভব। উদাহরণস্বরূপ, validation বা session checking ইন্টারসেপ্টরগুলোর মধ্যে আপনি Value Stack এর অবজেক্ট ব্যবহার করতে পারেন।
সারাংশ
- Value Stack Struts 2 এর একটি গুরুত্বপূর্ণ কনসেপ্ট যা Action ক্লাস থেকে JSP পেজে ডাটা শেয়ার করার জন্য ব্যবহৃত হয়।
- OGNL ব্যবহার করে আপনি Value Stack থেকে ডাটা এক্সেস এবং ম্যানিপুলেশন করতে পারেন।
- Value Stack অ্যাপ্লিকেশনের মধ্যে ডাটা ট্রান্সফার এবং শেয়ার করার প্রক্রিয়াকে সহজ করে দেয়।
- Value Stack এবং Interceptors এর মাধ্যমে অ্যাকশনের মধ্যে ডাটা শেয়ার করা এবং বিভিন্ন লজিক প্রয়োগ করা সম্ভব।
Value Stack Struts 2-এ Model-View-Controller (MVC) আর্কিটেকচারের মধ্যে ডাটা শেয়ারিং এবং প্রোসেসিংয়ের জন্য একটি শক্তিশালী ও নমনীয় পদ্ধতি।
OGNL (Object-Graph Navigation Language) হল একটি শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Struts 2 এ ব্যবহৃত হয়। OGNL ব্যবহারকারীদেরকে Java অবজেক্টের প্রপার্টি এবং ডেটা এক্সপ্রেস করতে এবং পরিবর্তন করতে সক্ষম করে, এটি মূলত Model-View-Controller (MVC) আর্কিটেকচারে ডেটা ম্যানিপুলেশনের জন্য ব্যবহৃত হয়। Struts 2 ফ্রেমওয়ার্কের মধ্যে OGNL ডেটার প্রবাহ নিয়ন্ত্রণ এবং অ্যাকশন ক্লাসের প্রপার্টির সাথে ইন্টারঅ্যাক্ট করতে ব্যবহৃত হয়।
OGNL এর মূল সুবিধা
- ডাইনামিক এক্সপ্রেশন: OGNL স্ট্রিং ফর্ম্যাটে এক্সপ্রেশন ব্যবহার করে, যেগুলি রানটাইমে ডেটা রিট্রিভাল, পরিবর্তন এবং কম্প্লেক্স এক্সপ্রেশন রেজাল্ট বের করতে সক্ষম।
- কোডের শুদ্ধতা বৃদ্ধি: OGNL স্ট্রিং এক্সপ্রেশন ব্যবহার করার মাধ্যমে কোডের শুদ্ধতা বৃদ্ধি পায় এবং সহজে কোড রিফ্যাক্টরিং করা যায়।
- অ্যাবস্ট্রাকশন: OGNL অ্যাকশন ক্লাসের প্রপার্টির সাথে সরাসরি ইন্টারঅ্যাক্ট না করেও ডেটা রিট্রিভাল এবং ম্যানিপুলেশন করতে দেয়।
Struts 2-এ OGNL এর কাজ
Struts 2 ফ্রেমওয়ার্কে OGNL ব্যবহার করা হয়:
- Action Class Properties: OGNL ব্যবহার করে অ্যাকশন ক্লাসের প্রপার্টি ভ্যালু এক্সপ্রেস এবং রিটার্ন করা হয়।
- Data Binding: ইনপুট ফর্মের ডেটা অ্যাকশন ক্লাসের প্রপার্টিতে ম্যাপিং করার জন্য OGNL ব্যবহৃত হয়।
- Dynamic Expressions: ডাইনামিক এক্সপ্রেশন ব্যবহার করে একাধিক অ্যাকশন প্রপার্টি পরিচালনা করা যায়।
OGNL স্ট্রিং এক্সপ্রেশন সাধারণত JSP (JavaServer Pages) বা Struts 2 এ কাজ করার সময় (যেমন struts.xml কনফিগারেশন ফাইল) ব্যবহৃত হয়।
OGNL এর মূল এক্সপ্রেশন
OGNL এর মাধ্যমে কিছু গুরুত্বপূর্ণ এক্সপ্রেশন করা যায় যেমন:
- প্রপার্টি এক্সপ্রেশন:
user.name:userঅবজেক্টেরnameপ্রপার্টি রিট্রিভ করে।
- ফাংশন কল:
#user.getName():userঅবজেক্টেরgetName()মেথড কল করে।
- লজিক্যাল এক্সপ্রেশন:
#user.age > 18:userঅবজেক্টেরageপ্রপার্টি যদি ১৮ এর বেশি হয়, তবে ফলাফল সত্য হবে।
- লুপিং:
#list.size() > 0: একটি তালিকা যদি শূন্য না হয় তবে লজিক্যাল ফলাফল দেবে।
- অ্যারেতে এক্সপ্রেশন:
#array[0]: একটি অ্যারেতে প্রথম উপাদান রিটার্ন করে।
Struts 2-এ OGNL উদাহরণ
Struts 2 এ OGNL ব্যবহার করা হয় Action Class থেকে View (JSP) বা অন্য উপাদানে ডেটা পাঠানোর জন্য এবং রিটার্ন ভ্যালু গ্রহণের জন্য। নিচে একটি সাধারণ উদাহরণ দেওয়া হল:
1. Action Class উদাহরণ
package com.example.action;
import com.opensymphony.xwork2.ActionSupport;
public class UserAction extends ActionSupport {
private String username;
private String password;
// Getter and Setter methods
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;
}
// Execute method that processes the data
public String execute() {
if ("admin".equals(username) && "admin123".equals(password)) {
return SUCCESS;
} else {
return ERROR;
}
}
}
এখানে, UserAction ক্লাসে username এবং password প্রপার্টি রয়েছে, যেগুলি ইনপুট ফর্ম থেকে প্রাপ্ত হবে। execute() মেথডটি ইউজারের ইনপুট যাচাই করে এবং তার উপর ভিত্তি করে SUCCESS বা ERROR রিটার্ন করে।
2. struts.xml কনফিগারেশন ফাইল
<struts>
<package name="default" extends="struts-default">
<action name="login" class="com.example.action.UserAction">
<result name="success">/welcome.jsp</result>
<result name="error">/login.jsp</result>
</action>
</package>
</struts>
এখানে, login অ্যাকশনটি UserAction ক্লাসের execute() মেথডে ম্যাপ করা হয়েছে। সফল হলে welcome.jsp এবং ত্রুটির ক্ষেত্রে login.jsp ফাইলটি রিটার্ন করবে।
3. login.jsp ফাইল (View)
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Login Page</title>
</head>
<body>
<h2>Login Form</h2>
<s:form action="login" method="post">
<s:textfield name="username" label="Username" />
<s:password name="password" label="Password" />
<s:submit value="Login" />
</s:form>
</body>
</html>
এখানে, s:form ট্যাগটি OGNL ব্যবহার করে username এবং password ফিল্ডের ডেটা UserAction ক্লাসে পাঠাবে।
4. welcome.jsp ফাইল (View)
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Welcome</title>
</head>
<body>
<h2>Welcome, <s:property value="username" /></h2>
</body>
</html>
এখানে, s:property OGNL ব্যবহার করে UserAction ক্লাসের username প্রপার্টির মান রিটার্ন করে এবং welcome.jsp ফাইলে প্রদর্শন করা হয়।
OGNL এর আরও কিছু ব্যবহার
- ইনপুট ভ্যালিডেশন:
- OGNL ব্যবহার করে ফর্ম ডেটা সোজা Action প্রপার্টিতে পাঠানো হয়। আপনি একাধিক ফর্ম ফিল্ডের উপর কাস্টম ভ্যালিডেশনও প্রয়োগ করতে পারেন।
- ডেটা বাইন্ডিং:
- OGNL ব্যবহার করে Action ক্লাসে ইনপুট ফিল্ড থেকে ডেটা বাইন্ড করা হয়। যেমন,
s:textfield,s:textareaইত্যাদি ট্যাগ ব্যবহার করে ব্যবহারকারীর ইনপুট Action প্রপার্টিতে বাইন্ড করা হয়।
- OGNL ব্যবহার করে Action ক্লাসে ইনপুট ফিল্ড থেকে ডেটা বাইন্ড করা হয়। যেমন,
- অ্যারে, লিস্ট এবং ম্যাপ হ্যান্ডলিং:
- OGNL ব্যবহার করে অ্যারে, লিস্ট এবং ম্যাপের মধ্যে ডেটা রিট্রিভাল এবং এক্সপ্রেশন তৈরি করা যেতে পারে। যেমন, একটি অ্যারেতে কোনও নির্দিষ্ট মান চেক করতে OGNL এক্সপ্রেশন ব্যবহার করা।
সারাংশ
Struts 2-এ OGNL (Object-Graph Navigation Language) একটি অত্যন্ত শক্তিশালী এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Action ক্লাসের প্রপার্টি থেকে ডেটা রিট্রিভাল এবং এক্সপ্রেশন তৈরি করতে ব্যবহৃত হয়। OGNL এর মাধ্যমে আপনি অ্যাকশন প্রপার্টির মান রিটার্ন, ইনপুট ফর্মে ডেটা বাইন্ডিং এবং ডাইনামিক এক্সপ্রেশন করতে পারেন। এটি MVC আর্কিটেকচারে ডেটা প্রবাহের মধ্যে একটি গুরুত্বপূর্ণ ভূমিকা পালন করে এবং কোডের শুদ্ধতা এবং রিডেবিলিটি বৃদ্ধি করে।
Struts 2 একটি শক্তিশালী MVC ফ্রেমওয়ার্ক যা Web applications তৈরি করতে ব্যবহৃত হয়। এটি ডেটা অ্যাক্সেস এবং ডেটা ম্যানিপুলেশন করার জন্য অনেক ধরনের টুল এবং প্রযুক্তি সমর্থন করে। Struts 2 তে ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন সাধারণত DAO (Data Access Object) প্যাটার্ন এবং Hibernate, JDBC, বা JPA এর মাধ্যমে করা হয়।
Struts 2 তে Data Access এবং Data Manipulation এর পদ্ধতি
Struts 2 তে ডেটা অ্যাক্সেস এবং ডেটা ম্যানিপুলেশন করার জন্য অনেক রকম পদ্ধতি আছে। এটি সাধারণত Service Layer, DAO Layer, এবং Action Class ব্যবহার করে করা হয়।
1. DAO (Data Access Object) Pattern
DAO Pattern ব্যবহার করা হয় ডেটাবেসের সাথে যোগাযোগ করার জন্য। DAO প্যাটার্নটি ডেটা অ্যাক্সেস কোডকে অ্যাপ্লিকেশনের ব্যবসায়িক লজিক থেকে আলাদা করে। এটি ডেটাবেস অপারেশনগুলি (যেমন ইনসার্ট, আপডেট, ডিলিট, এবং সিলেক্ট) আলাদা ক্লাসে রেখে অ্যাপ্লিকেশনের রক্ষণাবেক্ষণ সহজ করে তোলে।
DAO ক্লাস উদাহরণ:
public class UserDAO {
private SessionFactory sessionFactory;
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public void saveUser(User user) {
Session session = sessionFactory.getCurrentSession();
session.save(user);
}
public User getUserById(int id) {
Session session = sessionFactory.getCurrentSession();
return session.get(User.class, id);
}
public void deleteUser(int id) {
Session session = sessionFactory.getCurrentSession();
User user = session.get(User.class, id);
if (user != null) {
session.delete(user);
}
}
// Additional methods for update, select, etc.
}
ব্যাখ্যা:
- UserDAO ক্লাস ডেটাবেসে ব্যবহারকারীর তথ্য Hibernate এর মাধ্যমে অ্যাক্সেস এবং ম্যানিপুলেশন করতে ব্যবহৃত হয়।
- saveUser(), getUserById(), এবং deleteUser() মেথডগুলি ডেটাবেস অপারেশনগুলোর জন্য ব্যবহৃত হয়।
2. Service Layer
Service Layer হল একটি লেয়ার যেখানে ব্যাবসায়িক লজিক বা ডেটা প্রক্রিয়াকরণ হয়। এটি DAO-র সাথে যোগাযোগ করে ডেটা প্রক্রিয়া করে এবং Struts 2 অ্যাকশনে ডেটা প্রেরণ করে।
Service Layer উদাহরণ:
public class UserService {
private UserDAO userDAO;
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public void addUser(User user) {
userDAO.saveUser(user);
}
public User getUser(int id) {
return userDAO.getUserById(id);
}
public void removeUser(int id) {
userDAO.deleteUser(id);
}
}
ব্যাখ্যা:
- UserService ক্লাস UserDAO এর মাধ্যমে ডেটাবেসের সাথে যোগাযোগ করে এবং Action Class এ প্রয়োজনীয় ডেটা সরবরাহ করে।
3. Struts 2 Action Class
Struts 2 Action Class ব্যবহারকারী থেকে ইনপুট নেয় এবং Service Layer ব্যবহার করে ডেটাবেসের সাথে যোগাযোগ করে। Action Class সাধারণত Model হিসেবে কাজ করে এবং তার আউটপুট View (JSP) এ দেখানো হয়।
Action Class উদাহরণ:
public class UserAction extends ActionSupport {
private UserService userService;
private User user;
private int id;
public String execute() {
user = userService.getUser(id);
return SUCCESS;
}
public String saveUser() {
userService.addUser(user);
return SUCCESS;
}
public String deleteUser() {
userService.removeUser(id);
return SUCCESS;
}
// Getter and Setter methods for user and id
}
ব্যাখ্যা:
- UserAction ক্লাসে userService এর মাধ্যমে ডেটাবেসে save, select, এবং delete অপারেশন করা হচ্ছে।
- execute() মেথড ডেটা রিট্রিভ করার জন্য ব্যবহৃত, এবং saveUser() ও deleteUser() মেথডগুলো ডেটা ম্যানিপুলেশন (ইনসার্ট, ডিলিট) করার জন্য।
4. JSP (View Layer)
Struts 2 তে JSP (Java Server Pages) View Layer হিসেবে কাজ করে যেখানে ডেটা উপস্থাপন করা হয়। Struts 2 ট্যাগ লাইব্রেরি ব্যবহারের মাধ্যমে আপনি ফর্ম এবং অন্যান্য ডেটা উপস্থাপন করতে পারেন।
JSP উদাহরণ:
<s:form action="saveUser">
<s:textfield name="user.name" label="User Name"/>
<s:textfield name="user.email" label="User Email"/>
<s:submit value="Save"/>
</s:form>
<s:form action="deleteUser">
<s:textfield name="id" label="User ID"/>
<s:submit value="Delete"/>
</s:form>
ব্যাখ্যা:
- এখানে Struts 2 ট্যাগ ব্যবহার করে form তৈরি করা হয়েছে, যা Action Class এ ইনপুট পাঠায়।
- s:form ট্যাগের মাধ্যমে ডেটা ইনপুট ফর্মে পাঠানো হয় এবং Action Class সেই ডেটার উপর প্রয়োজনীয় অপারেশন (Save বা Delete) করে।
5. Hibernate Integration for Data Access
Struts 2 এবং Hibernate একসাথে ব্যবহার করে ডেটা অ্যাক্সেস করা যেতে পারে। Hibernate ORM (Object Relational Mapping) ব্যবহারের মাধ্যমে ডেটাবেসের সঙ্গে অবজেক্ট মডেল ম্যাপিং করে ডেটা অ্যাক্সেস করা সহজ হয়।
Hibernate Configuration উদাহরণ:
hibernate.cfg.xml ফাইল:
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">password</property>
<property name="hibernate.show_sql">true</property>
</session-factory>
</hibernate-configuration>
সারাংশ
Struts 2 অ্যাপ্লিকেশন তৈরি করার সময় Data Access এবং Data Manipulation অত্যন্ত গুরুত্বপূর্ণ ভূমিকা পালন করে। Struts 2 তে সাধারণত DAO Pattern, Service Layer, Action Class, এবং Hibernate/JDBC ব্যবহার করে ডেটা অ্যাক্সেস এবং ম্যানিপুলেশন করা হয়। এর মাধ্যমে আপনি আপনার অ্যাপ্লিকেশনকে স্কেলেবল এবং রক্ষণাবেক্ষণযোগ্য রাখতে পারবেন।
Struts 2 ফ্রেমওয়ার্কে Value Stack এবং OGNL (Object-Graph Navigation Language) খুবই গুরুত্বপূর্ণ বৈশিষ্ট্য। Value Stack হল Struts 2 এর একটি মেকানিজম যা অ্যাকশন ক্লাসের ডাটা এবং অন্যান্য তথ্য মডেল (Model) থেকে ভিউ (View) এর কাছে প্রেরণ করে। OGNL হল একটি এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Value Stack থেকে ডেটা অ্যাক্সেস এবং পরিবর্তন করতে ব্যবহৃত হয়। OGNL ব্যবহার করে আপনি JSP ফাইলের মধ্যে ডাটা প্রদর্শন করতে পারেন।
১. Value Stack কী?
Value Stack হল Struts 2 এর একটি ডাটা স্ট্যাক যেখানে অ্যাকশন ক্লাসের প্রপার্টি, কনফিগারেশন, সেশন, অ্যাপ্লিকেশন স্কোপের ডেটা থাকে। এটি সাধারণত Action ক্লাসের প্রপার্টি এবং তাদের মান সংরক্ষণ করে রাখে এবং সেগুলি JSP পৃষ্ঠায় প্রদর্শন করতে ব্যবহৃত হয়। Value Stack এ Action ক্লাসের সব প্রপার্টি এবং অন্যান্য ডেটা থাকতে পারে, যা OGNL এক্সপ্রেশন ব্যবহার করে অ্যাক্সেস করা যায়।
২. OGNL কী?
OGNL হল একটি এক্সপ্রেশন ল্যাঙ্গুয়েজ যা Value Stack থেকে ডাটা অ্যাক্সেস করতে ব্যবহৃত হয়। OGNL এর মাধ্যমে আপনি Action ক্লাসের প্রপার্টি, collection, maps, এবং অন্যান্য অবজেক্টের মান পেতে পারেন এবং তা JSP তে ব্যবহার করতে পারেন।
উদাহরণ: Value Stack এবং OGNL এর ব্যবহার
এখানে একটি উদাহরণ দেওয়া হচ্ছে যেখানে আমরা Struts 2 ব্যবহার করে Value Stack এবং OGNL এর মাধ্যমে ডাটা পরিচালনা করব।
১. Action Class (HelloWorldAction.java)
package com.example;
import com.opensymphony.xwork2.ActionSupport;
public class HelloWorldAction extends ActionSupport {
private String name;
private String message;
// Getter and Setter for 'name'
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
// Getter and Setter for 'message'
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
// Execute method, where business logic is implemented
@Override
public String execute() {
if (name == null || name.isEmpty()) {
name = "Struts 2";
}
message = "Hello, " + name + "!";
return SUCCESS;
}
}
- Action Class: এখানে, name এবং message দুটি প্রপার্টি রয়েছে।
execute()মেথডে, name এর মান চেক করা হয় এবং message তৈরি করা হয়, যাতে JSP এ দেখানো যায়।
২. Struts 2 কনফিগারেশন (struts.xml)
<?xml version="1.0" encoding="UTF-8"?>
<struts>
<package name="default" extends="struts-default">
<!-- Action configuration -->
<action name="hello" class="com.example.HelloWorldAction">
<result>/hello.jsp</result>
</action>
</package>
</struts>
- struts.xml: এখানে,
helloনামক অ্যাকশনটি HelloWorldAction ক্লাসের সাথে সম্পর্কিত।helloঅ্যাকশন সফল হলে এটি hello.jsp পৃষ্ঠাতে রিডিরেক্ট করবে।
৩. JSP পৃষ্ঠা (hello.jsp)
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
<title>Hello Struts 2</title>
</head>
<body>
<h2><s:property value="message" /></h2>
<form action="hello" method="post">
<s:textfield name="name" label="Enter your name" />
<s:submit value="Say Hello" />
</form>
</body>
</html>
- JSP File: এখানে, আমরা Struts 2 tag library ব্যবহার করেছি:
<s:property value="message" />OGNL এক্সপ্রেশন ব্যবহার করে message প্রপার্টির মান HelloWorldAction ক্লাস থেকে অ্যাক্সেস করা হয়।<s:textfield name="name" label="Enter your name" />ব্যবহারকারী থেকে নাম ইনপুট নেয়।<s:submit value="Say Hello" />বাটন ক্লিক করলে ইউজারের ইনপুট Action ক্লাসে প্রেরণ করা হয়।
Value Stack এবং OGNL এর ব্যবহার:
- Value Stack: Action ক্লাসে name এবং message প্রপার্টিগুলি Value Stack এ রাখা হয় এবং JSP ফাইল থেকে OGNL এক্সপ্রেশন ব্যবহার করে অ্যাক্সেস করা হয়।
- OGNL: s:property value="message" ট্যাগ ব্যবহার করে message প্রপার্টির মান Value Stack থেকে নেওয়া হয়েছে।
৪. Web.xml কনফিগারেশন
Struts 2 DispatcherServlet কনফিগার করতে web.xml ফাইল ব্যবহার করা হয়।
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">
<!-- Struts 2 Dispatcher Servlet -->
<servlet>
<servlet-name>struts2</servlet-name>
<servlet-class>org.apache.struts2.dispatcher.FilterDispatcher</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>struts2</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- DispatcherServlet: এটি Struts 2 এর প্রধান সেরভলেট যা সমস্ত HTTP রিকুয়েস্ট গ্রহণ এবং প্রক্রিয়া করে।
৫. অ্যাপ্লিকেশন রান করা
Maven কমান্ড ব্যবহার করে প্রোজেক্টটি কম্পাইল করুন:
mvn clean install- WAR ফাইল তৈরি হলে, এটি Tomcat বা আপনার পছন্দের সের্ভারে ডিপ্লয় করুন।
ব্রাউজারে অ্যাপ্লিকেশনটি চালান:
http://localhost:8080/struts2-hello-world/hello.action
এটি আপনাকে একটি Hello, Struts 2 বার্তা প্রদর্শন করবে এবং ব্যবহারকারী ইনপুট দিলে সেই নামের সাথে "Hello" প্রদর্শিত হবে।
সারাংশ
এই উদাহরণে, আমরা দেখলাম কীভাবে Struts 2-এ Value Stack এবং OGNL ব্যবহার করে ডাটা পরিচালনা করা যায়। Value Stack অ্যাকশন ক্লাসের প্রপার্টিগুলি সংরক্ষণ করে এবং OGNL এক্সপ্রেশন ব্যবহার করে সেগুলি JSP তে প্রদর্শন করা হয়। Struts 2 ফ্রেমওয়ার্কের মাধ্যমে সহজে MVC আর্কিটেকচার অনুসরণ করে একটি ওয়েব অ্যাপ্লিকেশন তৈরি করা যায়।
Read more