PDA

View Full Version : مقایسه web server و application server



nargesi
جمعه 15 اردیبهشت 1385, 04:50 صبح
سلام دوستان
می شه تفاوت web server و application server توضیح دهید
مثلا وقتی ما apache tomcat را روی کامپیوتر نصب می کنیم فقط یک application server داریم؟ این چه کار برای ما می کند؟ دراین حالت web server هم یعنی داریم روی سیستم؟ web server چه کار می کند؟
آیا اسم های دبگر
application server: ejb container servlet container j2ee container jsp container است ؟

nargesi
سه شنبه 19 اردیبهشت 1385, 20:22 عصر
اساتید کسی چیزی نمی دونه؟

persianshadow
چهارشنبه 20 اردیبهشت 1385, 05:55 صبح
خب اینجا ابتدا باید بریم سر یک بحث تاریخی !

ببینید در اوایل زمانی که وب به وجود آمد ما تنها با صفحات غیر پویا سر و کار داشتیم.

بله ، صفحات HTML ، این صفحات که بر مبنای ابر پیوندها بوجود آمده بودند وظیفه

ارائه محتوا (Content) را به کاربران داشتند. اما چگونه ؟

کاربران با استفاده از یک مرورگر وب یک تقاضا را ارسال می کردند. این تقاضا بر اساس

یک فرمت (پروتکل) استاندارد که همانا HTTP (Hyper Text Transfer Protocol) باشد

انجام می شد و صفحه مورد نظر فراخوانی می گردید. خب این وسط یک Web Server نیاز

هست تا صفحه مورد نظر کاربر پیدا شده و به کاربر ارسال گردد.

اما حالا نوبت به Application Server می رسد :

خب بعدا وب توسعه پیدا کرد و صفحات از حالت ایستا (Static) به حالت پویا (Dynamic)

تغییر وضعیت دادن. اینجا بود که برنامه نویسی سمت سرور پدید آمد که یک صفحه وب

قادر بود به منابع سمت سرور نظیر دیتابیس ها دسترسی پیدا کند. منظور از این

برنامه نویسی سمت سرور ، برنامه های CGI (Common Gateway Interface) هست.

یعنی زبان های نظیر : perl ، PHP ، ASP ، Asp.net ، JSP

خب حالا فرضا همان کاربر ( عجب آدم بیکاریه ! ) بوسیله مرورگر خود یک صفحه

پویا را درخواست نماید. به فرض مثال :

http://www.bikar.com/ card.jsp

وقتی این صفحه ارسال می گردد.وب سرور (Web Server ) متوجه می شود که محتویات فایل شامل

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

بدل گردند. برای همین اینجاست که نیاز می شود تا یک Application Server صفحه مورد نظر
را کامپایل کرده ، یعنی این که کدهای درون فایل را اجرا کند . و بر اساس آن یک صفحه HTML

تولید کرده و به وب سرور ارسال کند تا وب سرور هم آن را به کاربر ارسال نماید.

TomCat هم یک Application Server هست. که کار ترجمه فایل های JSP را انجام می دهد.

اما کانتینر ها (Container) :

اصلا ربطی به موضوع ندارن ! همانطور که در دنیایی واقعی کانتینر ها موظف به حمل یکسری مواد

هستند.کانتینتر ها در جاوا هم یک چنین نقشی را دارند .

به فرض مثال اپلت ها و فریم ها کانتینرهای هستند که ما بقی آیتم ها را در بر می گیرند. و حمل کننده

آن ها هستند.

خب دیگه دستم خسته شد از بس که تایپ کردم !

hps
چهارشنبه 20 اردیبهشت 1385, 09:49 صبح
با تشکر از PersianShadow لازمه توضیحاتی در مورد توضیحاتش داده بشه؛

1. Container؛
همون طور که از اسمش برمیاد (و PS هم بهش اشاره‌ای کرده) یک ظرف برای یک مظروفه. مثلا یک Web Browser (مثل IE) یک Container برای Applet‌ها محسوب می‌شه و اونها رو در یک محیط کنترل شده (که بهش اصطلاحا Sandbox یا جعبه ماسه میگن) اجرا می‌کنه. ولی خیلی هم در این موضوع نامربوط نیستند و من فکر می‌کنم که توضیح در مورد اونها یه بحث بنیادیه.

Containerها تقریبا وظایف مشابهی دارند و البته بعضی از ویژگی‌هاشون هم متمایزه. اما می‌شه گفت که اغلبشون کارهائی از قبیل مدیریت چرخه عمر برنامه (Lifecycle Management) و دسترسی به منابع (چه تسهیل دسترسی و چه ایجاد محدودیت برای اون و اعمال سیاست‌های امنیتی) رو انجام می‌دن.
تمام Containerها یک API Specification به شما معرفی می‌کنن که در اون توضیحاتی در مورد شیوه نوشتن برنامه، منابعی که در اختیار شما قرار می‌گیره و نحوه قرار دادن (Deployment) برنامه در Container درج شده. این API Specification هم مورد استفاده استفاده‌کنندگان قرار می‌گیره و هم مورد استفاده تولیدکنندگان اون.
برای مثال برای نوشتن یک Applet و قرار دادن اون در Container (یک Web Browser) باید کلاس مورد نظرتون از java.applet.Applet بسط بدید و توابع مورد نیاز رو (مثل init یا start) بازنویسی کنید. بعد هم باید یک صفحه HTML تهیه کنید و Tagها و Attributeهای مورد نیاز در اون بنویسید.
در بحث Servlet یا JSP هم همین طوره. شما باید Servletتون رو از کلاس javax.servlet.http.HttpServlet بسط بدید و توابع مشخصی (مثل doGet یا doPost) رو مطابق نیازتون بازنویسی کنید و در مورد JSP باید متن برنامه مطابق با الگوی خاصی تهیه کنید. در نهایت برای نصب روی Container (که بهشون Servlet Container یا JSP Container می‌گن) از روال خاصی پیروی می‌کنید (برای مثال باید یه شاخه WEB-INF درست کنید و web.xml رو که مطابق یه Schema از پیش تعیین شده ساخته شده رو در اون قرار بدید). این Containerها کار رو برای شما خیلی ساده کردن. اونها ارتباط با کاربر دور (Remote User) رو برقرار می‌کنن، درخواست‌های اون رو دریافت و تفسیر می‌کنن، برنامه شما را رو در صورت لزوم اجرا می‌کنن و جواب رو به شکلی که برای کاربر دور قابل فهم باشه ارسال می‌کنن. اگه می‌خوای بدونی که یه چیزی مثل Servlet Container یا JSP Container چه کاری برای تو انجام میدن کافی تصور کنی که می‌خوای همین برنامه رو با استفاده کلاس‌های پایه جاوا (JFC) مثل java.net.*، java.io.* یا java.util.* بنویسی.

خوب فکر می‌کنم که بحث در مورد Container طولانی شد. چون الآن وقت ندارم بقیه‌اش باشه برای بعد. برای اختتام اینو باید بگم که Apache Tomcat یه Web Serverه که Servlet Container و JSP Container به اضافه مجموعه‌ای از امکانات جانبی (مثل Naming Service و Object Pool) رو در اختیار شما قرار می‌ده.
Application Server وظیفه‌اش کمی فرق می‌کنه (البته با EJB 3.0 وضعیت یه ذره تغییر کرده!)

nargesi
جمعه 22 اردیبهشت 1385, 22:15 عصر
چرا برا اجرای فایل های jsp از web server مثل appache استفاده نمی کنیم و از application sever مثل tomcat استفاده می کنیم ؟

persianshadow
شنبه 23 اردیبهشت 1385, 04:56 صبح
خوب چونکه Web server ها کامپایلر و یا مفسر ویژه اجرای کدها رو ندارن و تنها می تونن ب

ه درخواست های HTTP پاسخ بدن . پس باید اون صفحات به صفحات HTML ترجمه بشن .

که این کار توسط Application Server صورت می گیره.

hps
دوشنبه 25 اردیبهشت 1385, 19:16 عصر
در مورد Apache Web Server کاملا طبیعیه که به صورت پیش‌فرض نمی‌تونه برنامه‌های جاوائی مثل Servlet یا JSP اجرا کنه. همون طور که قبلا بحث شد برای اجرای اونها به Container متناظرشون احتیاجه که Apache Web Server فاقد چنین امکانیه. اگه PHP کار کرده باشی و سعی کرده باشی از Apache Web Server استفاده کنی، حتماً دیدی که باید Module مرتبط با PHP رو به Apache اضافه کنی (البته با WAMP و XAMPP و امثال اینها کار نصب راحت‌تر شده). در مورد Servlet & JSP Container هم باید به همین شیوه عمل کنی. یعنی می‌تونی از Apache Tomcat به عنوان Module در Apache Web Server استفاده کنی. به این ترتیب درخواست‌های ارسال شده برای Apache Web Server که به یک Context جاوائی مربوط هستن پشت پرده توسط Apache Tomcat پردازش شده و نتیجه از طریق Apache Web Server در اختیار کاربر قرار داده میشه. برای انجام این کار می‌تونی به مستندات mod_jk
مراجعه کنی.

اما در مورد Application Server مطلبی باقی مونده بود که توضیح میدم:
مفهوم ASها در نرم‌افزارهای چندلایه (Multi-Tier) معنی پیدا می‌کنه.
در نرم‌افزارهای تحت وب، سمت Server به طور عمده یه Web Server و یه Database Server وجود داره. Client درخواستش رو برای Web Server می‌فرسته و اون هم یک برنامه رو اجرا می‌کنه (مثلا یه JSP رو). این برنامه هم در پیچیده‌ترین حالت ممکن به Database Server وصل شده، اطلاعاتی رو می‌خونه یا می‌نویسه و جواب نهائی برای Client از طریق Web Server ارسال می‌شه. این یه نرم‌افزار دو لایه است.
حالا اگر بین Web Server (که بهش Presentation Tier یا لایه ارائه می‌گیم) و Database Server (که بهش Provision Tier می‌گیم) یک لایه دیگه قرار داشته باشه که وظیفش اجرای فرآیندهای کسب و کار برنامه یا در واقع منطق کاری برنامه باشه یه لایه دیگه به برنامه قبلی اضافه شده (که بهش Business Tier می‌گیم) و یه برنامه سه لایه داریم. Presentation Tier لایه نمایشیه. این لایه فقط درخواست‌ها رو دریافت می‌کنه و خروجی‌ها رو تهیه می‌کنه و در اختیار کاربر قرار میده. این لایه دیگه به طور مستقیم با Information Tier در ارتباط نیست. بلکه از طریق Business Tier درخواست‌ها ارائه شده را اجرا می‌کنه و این لایه است که بر اساس درخواست ارائه شده و اطلاعات موجود در Information Tier نتیجه عملیات رو در اختیار Presentation Tier قرار میده و اون هم به طور مقتضی به کاربر نمایش میده. ممکنه بپرسی این معماری به چه دردی می‌خوره؟ توضیحش به این مطلب ربطی نداره و فرصت دیگه‌ای رو می‌طلبه.
خوب حالا که مفهوم برنامه چند لایه رو متوجه باید جای AS رو حدس زده باشی. AS جائیه که منطق کاری برنامه روی اون قرار می‌گیره یعنی لایه دوم توی این مثال. جاوا برای پیاده‌سازی منطق کاری EJB رو معرفی کرده و طبیعیه که مثل داستان قبلی هر EJB یه EJB Container می‌خواد به اضافه یه سری خدمات مرتبط. ASها حداقل یه EJB Container و Naming Service (برای دسترسی به Objectها از طریق شبکه با استفاده از اسمشون) رو دارن. ولی اغلبشون امکانات یه Web Server رو در اختیارت قرار میدن (مثل BEA WebLogic و Sun J2EE Container) و بعضی‌های دیگه هم به Web Serverهائی مثل Apache Tomcat یا Resin وصل میشن (مثل JBoss، Geronimo یا Jonas) و بعضی‌های دیگه هم هر دو قابلیت رو دارن (مثل OC4J یا OAS).
ولی فن‌آوری‌های جدیدی مثل Web Serviceها یا خود EJB 3.0 این مفاهیم رو کمی تغییر دادن. اگر فرصت بشه بعدا توضیحات بیشتری در این مورد میدم.