اولین هاستینگ جاوا در ایران



در ادامه بحث بخش ششم (Servlet - Jsp) داریم : 

 

مفهوم Container در وب سرور 

شامل فیلتر ها , کتابخانه ها, کلاس ها و ابزار های مختلفی جهت میزبانی اپلیکیشن تحت وب می باشند. گونه های زیادی از وب سرور ها برای میزبانی اپلیکیشن ها طراحی شدند که رایج ترین آن ها عبارتند از : Tomcat , Glassfish, Payara, Wildfly, Weblogic

جهت استفاده از هر کدام, ابتدا باید فایل مربوطه را دانلود و از طریق terminal نصب نمود. همچنین در صورت تنظیم نبودن JDK, باید با واردکردن دستور vim ~/.bashrc در terminal, نسبت به تنظیم آن اقدام شود.

Servlet ها

کلاس های طراحی شده به زبان جاوا هستند که از کلاس Servlet جهت مدیریت هر Request و Response مشتق (extends) شده و متد های Get و Post آن کلاس را بازنویسی (Override) می کنند. همچنین با استفاده از برخی فیلترهای Servlet که یکی از مهم ترین آنها می باشد , می توان مشخص کرد که هر Servlet تعریف شده مسئول پاسخ گویی به کدام URL است تا به عنوان مثال کاربر به آن آدرس هدایت شود.

ایجاد یک Servlet

 ابتدا کلاس جاوای سرولت نوشته می شود که طی آن ابتدا کلاس مورد نظر باید از کلاس servlet ارث بری کند سپس متد های dopost و doget آن پیاده سازی مجدد override شده و سایر تعاریف به همراه مقداردهی ها انجام گرفته و ذخیره می شود. در مرحله بعد سرولت ایجاد شده درون فایل web.xml پروژه بوسیله تگ های مخصوص تعریف می گردند.

ادامه مطلب

دو مدل ارتباطی در زبان برنامه نویسی جاوا وجود دارد که شامل Client (مشتری یا سرویس گیرنده) و Server (میزبان یا سرویس دهنده) می باشند که هر دو آدرس و شماره Port یکسانی برای ایجاد ارتباط دارند. Port, کانال ارتباطی بین Client و server هست که توسط سرور میزبان جهت مدیریت محتوای ارسالی به سرویس گیرنده که مشتری است, بکار می رود. درخواست مشتری (Request) در قالب یک Packet یا بسته به وب سرور میزبان ارسال شده و پس از انجام عمل مربوطه, نتیجه بصورت پاسخی (Response) از طرف سرور به مشتری ارسال می شود. پورت های دارای اهمیت در این مبحث شامل دو پروتکل لایه نرم افزاری Tcp-ip می باشند که عبارتند از : Http با پورت پیشفرض 80 و Https با پورت پیشفرض 443. همچنین امکان تغییر پورت در هر دو پروتکل توسط میزبان وجود دارد بشرطی که مشتری یا سرویس گیرنده را از پورت جدید مطلع سازد.

نحوه دسترسی مشتری به اپلیکیشن تحت وب در وب سرور, با ارائه یکی از دو پروتکل مذکور به همراه آدرس قرارگیری اپلیکیشن توسط سرویس دهنده و واردکردن آن در نوار آدرس مرورگر توسط مشتری امکان پذیر است. این آدرس که بعد از ذکر پروتکل قرار می گیرد, ابتدا شامل آدرس Ip یک فضای میزبانی در ماشین مجازی Virtual Machine Host و یا آدرس دامنه ای که بر روی فضای میزبان اینترنتی خریداری شده می باشد. در ادامه پس از ذکر موارد یاد شده, مسیری که وب اپلیکیشن توسط سرویس دهنده در وب سرور قرار گرفته آورده می شود. نمونه کامل یک آدرس بصورت زیر می باشد :

Http://javahosting.ir/webapps/exmpleapp

 

محتوای هر پروژه وب اپلیکیشن

 

هر پروژه اپلیکیشن تحت وب شامل موارد زیر می باشد :

- فایل های تنظیمات اعم از Xml ها و Properties

- کلاس ها که همان فایل های جاوای کامپایل شده می باشند

- کتابخانه ها که مهم ترین آنها عبارتند از : Jar و Jvm

- منابع کمکی یا Assest ها که محل قرارگیری تصاویر ,لوگو ها, فایل های Html,Css و از این قبیل می باشند


شمارش (Enum  : (Enum ها نوعی از داده هستند برای وقتی که ما چند مقدار محدود ثابت داریم مانند چند کتاب از یک کتابخانه.در صورت خالی تعریف کردن یک شمارش می توان با ایجاد نمونه ای از آن و بدون new کردن آن را مستقیما مقداردهی کرد. شمارش ها مانند کلاس ها می توانند دارای انواع متد مانند constructor و همچنین متغیرها باشد. هر enum بطور پیشفرض از نوع final,static و public می باشد. برای تعریف آن هم اول enum ذکر شده سپس نام آن قید شود. تفاوت آن با کلاس در این می باشد که نمی توان از آن مستقیما آبجکت new کرد. با استفاده از متد ()values وحلقه foreach می توان مقادیر هر لیست شمارشی را پیمایش نمود که مقادیر را بصورت لیست آرایه ای بر می گرداند. با متد ()valuesof نیز می توان مستقیما به یکی از عناصر لیست شمارش که نام آنرا بصورت String بعنوان پارامتر متد می دهیم, دسترسی پیدا کرد.

نمونه یک enum :

enum Restaurants{

mcDonald,KFC,Pizzahot,Sandwich}

public static void main(String arg[]){

Restaurants r;

System.out.println(All Restaurants are :”);

Restaurants rArray= Restaurants.values();

for(Restaurants a:rArray){

System.out.println(a);}

r= Restaurants.valueOf(KFC”);

System.out.println(It s+r);}

 

اعضای static کلاس

 اگر بخواهیم متغیر یا متدی را برای کل کلاس مشترک کنیم تا امکان استفاده از آن در خارج از کلاس براحتی وجود داشته باشد باید کلمه کلیدی static را بعد از ذکر سطح دسترسی آن بیاوریم. براحتی در خارج از کلاس مربوطه می توان با دستور زیر به مولفه ای درون آن کلاس دست پیدا کنیم :                       نام متغیر یا متد . نام کلاس مربوطه          


وظایف JDBC به ترتیب شامل موارد مقابل می شود : ارتباط با پورت(Port) – کانکت شدن به دیتابیس- ایجاد دستورات(Query) و بستن پورت (Port) بعد از پایان کار با دیتابیس می باشد. برای کار با JDBC ابتدا باید فایل با پسوند jar آنرا دانلود سپس در پوشه اصلی مربوط به هر پروژه اضافه کنیم و در مرحله بعد, از نصب mysql در سیستم عامل اطمینان حاصل شود که بعنوان مثال در سیستم عامل لینوکس و بخش Terminal آن دستور زیر مربوط به اتصال به دیتابیس را وارد کرده تا وجود mysql بررسی گردد.

Mysql -u root -p

چنانچه پیام عدم نصب mysql در ترمینال مشاهده شد, با وارد کردن دستورات زیر, سیستم عامل اقدام به دانلود و نصب خودکار آن می کند.

Sudo su

yum install mariadb mysql-server

JDBC-URL : برای پیکربندی(Config) JDBC جهت اتصال به دیتابیس بوده که مشخصاتی از قبیل آدرس دیتابیس و دیگر پارامترهای مهم مانند نام کاربری, رمز عبور, استاندارد زبان (مثل UTF8),اجازه یا عدم اجازه استفاده از برخیQuery ها یا Function ها و غیره را شامل می شود.

JDBC:mysql=//localhost:3306/book ? Username : ‘ali9808’ Password : ‘ade248t9’

در URL بالا منظور از localhost:3306 , استفاده از کامپیوتر فعلی برای ارتباط با دیتابیس است که در این صورت JDBC و mysql در این سیستم نصب می باشند. ولی اگر ماشین مجازی برای ارتباط با پایگاه داده بکار رود باید آدرس ip آنرا با وارد کردن دستور ip a در ترمینال لینوکس یافته سپس جایگزین localhost:3306 در آدرس URL شود. در مواقعی که از فضای اینترنتی(Host) جهت برقراری ارتباط با دیتابیس استفاده شود باید آدرس دامنه(Domain) در بخش آدرس URL قرار گیرد.

ادامه مطلب

Exception ها

Exception ها یا استثناهایی برای مدیریت خطاها در یک برنامه هستند. انواع گوناگونی از استثناها وجود دارد که رایج ترین آنها عبارتند از :

 

DivideByZeroWithExceptionHandling که هنگام تقسیم بر صفر رخ می دهد و زیر مجموعه استثنای ArithmeticException می باشد که موقع وقوع خطای ریاضی اتفاق می افتد.

ArrayIndexOutOfBoundsException در صورتی که اندیس خارج از خانه های آرایه باشد رخ می دهد.

ArrayStoreException زمانی که نوع داده ای که در خانه آرایه ریخته می شود با خود نوع آرایه متفاوت باشد این exception رخ خواهد داد.

IllegalArgumentException وقتی که از آرگومان های ورودی نامعتبر برای فراخوانی یک متد استفاده شود این exception رخ می دهد.

NullPointerException این استثنا زمانی رخ می دهد که از اشیائی استفاده کنیم که مقداردهی نشده و null هستند.

FileNotFoundException وقتی فایل مورد نظر در آدرس وجود نداشته باشد این استثنا رخ می دهد.

InputMismatchException استثنای ورود مقادیر اشتباه توسط کاربر است.

InstantiationException زمانی که بخواهیم از یک کلاس abstract و یا اینترفیس یک شئ بسازیم این استثنا رخ خواهد داد.

UnsupportedOperationException این exception زمانی رخ می دهد که از عملیاتی استفاده شود که زبان جاوا از آن پشتیبانی نکند.

ادامه مطلب

کلاس های انتزاعی Abstract Class

 

از انواع مهم کلاس ها می باشد که می توان از آنها بعنوان کلاس پایه برای سایر کلاس ها استفاده نمود. امکان تعریف متدهای انتزاعی یا غیر انتزاعی در این نوع کلاس وجود دارد. نمی توان مستقیما از این کلاس ها آجکتی new کرد بلکه ابتدا باید از کلاسی که از آن ارث بری می کند برای ایجاد نمونه استفاده شود.  ;A a=new B  در اینجا برای نمونه کلاس  ‌‌A انتزاعی و کلاس B همان کلاسی است که از آن ارث بری نموده است.  در صورت ارث بری کلاسی غیر انتزاعی از کلاسی انتزاعی, آن کلاس حتما باید متد های درون Abstract Class را پیاده سازی مجدد یا Override کند که در غیر این صورت با خطا مواجه می شویم. ولی در صورت ارث بری کلاسی انتزاعی از کلاس انتزاعی دیگر, پیاده سازی همه متد های آن اجیاری نمی باشد. همچنین امکان ایجاد آبجکت از آن بصورت مستقیم وجود نداشته و برای حل این مشکل باید از مفهومی تحت عنوان Polymorphism (چندریختی) استفاده کرد.

public abstract class Animal{}  نمونه تعریف یک کلاس انتزاعی

چند ریختی Polymorphism

 

یکی از مفاهیم مهم زبان برنامه نویسی جاوا, چند ریختی است که از قابلیت اشیاء است. طی این فرآیند شی از کلاس فرزند تعریف شده اما با کلاس پدر new می شود. (یک شی از کلاس فرزند که از جنس کلاس پدر ایجاد شده) که با این کار کلاس فرزند به مولفه های کلاس پدر دسترسی پیدا کرده و و می تواند عملیات مدنظر را انجام دهد. مثالی که در بحث کلاس های انتزاعی مطرح شد نمونه ای از polymorphism می باشد.


شی Object
 
برای دسترسی و مقداردهی خصوصیات و بطور کلی هر مولفه ای که در کلاس تعریف شده , باید یک شی یا اشیایی از آن کلاس new کنیم. با اجرای برنامه , object متد سازنده کلاس را فراخوانی کرده سپس عملیات مقداردهی به مولفه های کلاس انجام می شود. در صورت عدم ایجاد سازنده , کامپایلر یک سازنده پیشفرض می سازد.

 

Interface (رابط)
 
مفهومی شبیه به کلاس ها می باشند که می توانند مولفه های مختلف از جمله متد, متغیر و . داشته باشند با این تفاوت که بدون بدنه تعریف می شوند.  باید توجه داشت که متغیر های تعریف شده در رابط حتما باید از نوع Final (ثابت) تعریف شوند. چنانچه کلاسی بخواهد از مولفه های آن استفاده کند باید از کلمه کلیدی implements بجای extends استفاده  و سپس نام رابط قید شود. در مرحله بعد باید متدهای رابط درون کلاس, بازنویسی (override) شوند. همچنین امکان implements یک کلاس از چند interface و interface ها از یکدیگر ممکن می باشد. رابط متد سازنده ندارد به همین دلیل نمی توان از آن آبجکتی new کرد. در مواقعی که کلاسی از رابط ارث بری می کند,  باید ابتدا از آن کلاس آبجکتی ایجاد سپس بعد از new, با قید نام رابط می توان  کرد به مولفه های آن دسترسی پیدا کرد. باید به این نکته توجه داشت که سطح دسترسی همه مولفه ها در interface باید public باشد تا دسترسی در هر جای برنامه به آن مقدور باشد.


​نوع داده جنریک Generic

جنریکها نوع داده عمومی هستند. قبل از این هرگاه برنامه نویس قصد طراحی متدی که چند نوع پارامتر را ارسال می کند داشت باید از سربارگذاری متدoverload کردن استفاده می کرد که طی آن متد چند بار ایجاد و باعث بالارفتن تعداد خطوط برنامه می شد که با استفاده از نوع داده جنریک, متد فقط یکبار با داده جنریک تعریف شده و نیاز به سربازگذاری نمی شود. علاوه بر متدهای جنریک, امکان تعریف کلاس های جنریک هم وجود دارد. نمونه ای از متد و کلاس جنریک :

متد با نوع داده جنریکPublic Static <T,E> void show(T key,E value){ } T

کلاس با پارامتر جنریک که متدی از آن استفاده نموده است  }<Public class Number <T
       {{ }  (public void addtocollection(T value
   

 همچنین امکان ارث بری نیز وجود دارد{ }<Public class users extends employee<Integer

}(Public <T extends Comparable<T>(T a,T b
 {;( a.Compare(b

}<Class test<T
   ایجاد آرایه ای با استفاده از نوع جنریک       ; [T[] data=new T[5  
}

;()test <double> t1=new test

 در اینجا نمونه ای ایجاد شده که از نوع داده خام است چون نوع <double> در طرف دیگر ذکر نشده که آن نمونه unsafe می باشد و برنامه به خطای زمان اجرا برخورد می کند. در هر طرف باید نوع جنریک ذکر شده باشد که این مورد قبل از اجرا باید چک شود



کلکسیون ها Collections دارای Interface ها و زیر مجموعه های مهمی هستند که شامل موارد زیر می شوند :

 

صف Queue : صف دارای ساختاری ترتیبی می باشد که جهت ذخیره داده های Fifo (داده ای که اول وارد شده اول استخراج می شود که حافظه پشته عکس آن می باشد) هستند. نمونه تعریف یک صف :

 صف معمولی      ; () <Queue<String>q1=new Queue<String
 صف با ارزش      ; () <PriorityQueue<String>q2=new PriorityQueue<String

همچنین صف ها دارای متدهای کلیدی برای درج در صف , نمایش داده , نمایش سپس حذف داده , پاک کردن کل صف و نمایش تعداد خانه هستند که به ترتیب عبارتند از :

()Offer(),pool(),Peek(),Clear(),Size

 

لیست List : برای ذخیره داده های غیر خاص ولی ترتیبی کاربرد دارد. لیست ها دارای دو پیاده سازی هستند که شامل Arraylist و linklist می باشد که برای ایجاد نمونه ای از لیست بکار می روند. نمونه تعریف یک لیست :

;()< List <string> list=new Arraylist<string

ادامه مطلب

کپسوله سازی Encapsolation

 

بهتر است برای ارتقای امنیت و مخفی ماندن مقداردهی به متغیرهای کلاس ابتدا آنها را از نوع  private تعریف شود که با ایجاد متدهای  set مولفه ها مقداردهی می شوند. در مرحله بعد با ایجاد متد get مقادیر اختصاص داده شده برگردانده می شود. البته در جاوا کتابخانه ای بنام lombook وحود دارد که بصورت خودکار برای هر متغیر تعریف شده در کلاس این دو متد را ایجاد می کند. مشکلی در استفاده از این کتابخانه وجود دارد و آن ساده بودن متدهای پیاده سازی شده توسط lombook می باشد. برای نمونه اگر بخواهیم در متد های set یا  get شرطی قرار دهیم یا عملیات دیگری انجام دهیم, ناچارا باید آنها را دستی تعریف نماییم.

}public class users

{;private int id

}()public int getId

{;return id

}(public void setId(int id

{;this.id=id

وراثت 

 

در برنامه نویسی شی گرا با قرار دادن کلمه کلیدی extends  بعد از نام کلاس سپس قید نام کلاس پدر یا والد مقابل آن انجام می گیرد. وقتی کلاسی از کلاس دیگر ارث بری می کند در واقع می تواند به مولفه های تعریف شده درون آن دسترسی پیدا کند البته بشرطی که سطح دسترسی مولفه ها خصوصی یا  private نباشد. معمولا در ارث بری کلاس ها از هم قانونی بنام is a وجود دارد. بعنوان مثال کلاس سگ از کلاس حیوان ارث بری می کند پس سگ یک حیوان است. همچنین در حالت عادی امکان ارث بری چند گانه کلاس ها از یکدیگر در زبان برنامه نوبسی جاوا ممکن نیست اما در interface این مورد امکان دارد.برای ارث بری یک کلاس از رابط  (interface) امکان استفاده از کلمه کلیدی extends وجود ندارد و بجای آن باید از کلمه کلیدی implements استفاده نمود.

{}public class Dog extend Animal

{} public Interface Dog implements Animal

 


تبلیغات

آخرین ارسال ها

آخرین جستجو ها

تصویر دل دانلود جدیدترین آهنگ روز A girl who is addicted to writing سنگ قلوه علیرضا معتمد فیش برداری پردیس مارک غافر دبیرستان شهید چمران (پسرانه) وبلاگ شهروند