زبان برنامه‌نویسی( JSB (Java  Server  Pageجاوا: جاوا (به انگلیسی: (Java یک زبان برنامه‌نویسی شئ‌گراست که برای اولین بار توسط جیمز گوسلینگ در شرکت سان مایکروسیستمز ایجاد شد و در سال ۱۹۹۵ به عنوان بخشی از سکوی جاوا منتشر شد. زبان جاوا شبیه به ++C است اما مدل شیءگرایی آسان‌تری دارد و از قابلیت‌های سطح پایین کمتری پشتیبانی می‌کند. یکی از قابلیت‌های اصلی جاوا این است که مدیریت حافظه را بطور خودکار انجام می‌دهد. ضریب اطمینان عملکرد برنامه‌های نوشته‌شده به این زبان بالا است و وابسته به سیستم‌عامل خاصی نیست، به عبارت دیگر می‌توان آن را روی هر رایانه با هر نوع سیستم‌عاملی اجرا کرد. برنامه‌های جاوا به صورت کدهای بیتی همگردانی (کامپایل) می‌شوند. که مانند کد ماشین هستند و به ویژه وابسته به سیستم‌عامل خاصی نیستند. ساخت اولين صفحة JSP  : مروري بر زبان HTML : طرح كلي يك صفحة JSP در واقع يك سند HTML مي باشد كه در داخل آنها كدهاي جاوا قرار داده شده است. از تگهاي خاصي براي قرار دادن كدهاي جاوا در داخل سند HTML استفاده مي شوند. HyperText Markup Language (HTML) يك زبان نشانه گذاري مي باشد. اسناد HTML، اسنادي متني هستند كه در قالب بندي آنها از تگ هايي بخصوص استفاده شده است. ليست زير مثالي از يك سند HTML را نشان مي دهد كه خروجي آن در صفحة وب HTML به راحتي صورت مي گيرد : 1: 2: This is a simple HTML 3: 4: HML is Easy 5: 6: نكته : HTML يك برنامة حساس به متن نمي باشد، بنابراين تگ با تگ هيچگونه تفاوتي ندارد. اما استفاده از حروف بزرگ باعث مي شود كه تگ ها در داخل متن مشخص تر شوند و غلط گيري آنها راحت تر صورت گيرد. زبان JSP  Java  Server  Page یا JSP نوعی فن آوری مبتنی بر زبان JAVA می باشد و امکاکان تولید وب سایتهای پویا (فعال) فراهم می سازد. JSP توسط شرکت SUN Microsystems برای برنامه نویسی سمت سرور تولید شده . فیلهای JSP همان فایلهای html می باشند همراه قطعات ویژه شامل کدهای Java که قابلیت پویای صفحات را ایجاد می کند.در ابتدا صفحات وب به صورت ایستا نمایش داده می شدند. معمولأ این اولین تجربه مردم در تولید صفحات وب بود ت سایتهای شخصی و اطلاعات قروش شرکتها را ثبت کنند . بعد از مدتی Perl و C زبانهایی بودند که بر روی سرور برای ایجاد ماهیت پویا قرار داده می شدند .بعد از مدت کوتاهی اکثر زبانها از جمله Delphi , C++ , VB و Java این قابلیت را داشتند که برنامه هایی را با استفاده از خاصیت پویایی و استفاده از داده های متنی و پایگاه داده تولید کنند. این برنامه ها به نام برنامه های CGI سمت سرور شناخته شدند.ASP توسط شرکت ماکروسافت تولید شد تا به برنامه نویسان html این امکان را بدهد که براحتی مندرجات پویا را که توسط سرور رایگان مایکروسافت
 (IIS پشتیبانی می شد مورد استفاده قرار دهند.JSP همتای ASP است که در این بخش ارائه خواهد شد. کدهای JSP بر روی وب سرور در JSP Servlet Engine اجرا می شوند. JSP Servlet   Engine  به صورت پویا  html  تولید می کند و   html را به مرو گر سرویسگیرنده می فرستد.صفحات JSP سندهای متنی هستند که شامل دو نوع متن می شوند.متن Static که می توان آنرا در هر نوع فرمت مبتنی بر متن (مثل XML،WML،SVG،HTML)بیان کرد و نوع دوم JSP Element ها ، که محتوای دینامیک را می سازند.پسوندی که در برای فایل های JSP به کار می رود jsp. است. هر صفحه می تواند ترکیبی از یک Top File باشد که این Top File شامل فایل های دیگری نیز می شود که خود این فایل ها می توانند یا یک صفحه کامل JSP باشند و یا اینکه بخشی از یک صفحه JSP باشند.JSP Element  ها در صفحات JSP از طریق دو Syntax متفاوت بیان می شوند.یکی Standard و دیگری XML ، لذا هر فایل داده شده می تواند فقط از یک Syntax(برای بیان JSP Element ها) استفاده کند. SP یک تکنولوژی است که توسط شرکت SUN MICROSYSTEMS تعریف شده تا محتویات پویایی را در شبکه ایجاد نماید .آنها اسناد HTML هستند که در داخل آنها از کد های جاوایی استفده شده است ، تا محتویات پویایی را به وجود آورند . JSP ر واقع پاسخی بود که شرکت SUN در مقابل ASP شرکت Microsoft ، ارائه داد.برخلاف CGI ، JSP، اجازه می دهد که کدهای جاوا درون صفحات HTML ، جاسازی شوند. JSP ، با زبان جاوا ، پایگاه داده ی MySQL یا Oracel، و بر روی سرور Tomcat استفاده می شود.JDBC، رابط بین پایگاه داده ی MySQL و کد های JSP است. JSP یک برنامه کاربردی است که بر روی سرویس دهنده قرار دارد ، آنها درخواست ها را گرفته وبه آنها پاسخ می دهند .به طور کلی در خواست ها از طرف سرویس گیرنده وب ارسال می گردد.از آنجایی که JSP یک برنامه کاربردی SERVER SIDE می باشد ، آنها به منابع سرویس ددهنده همانند SERVELT ها ، JAVABEAN ها ، EJB ها وبانک های اطلاعاتی دسترسی دارند. سرویس گیرنده : یک سرویس گیرنده شبکه ،سرویس گیرنده ای است که با یک سرویس دهنده با استفاده از پروتکل HTTP در ارتباط می باشد .سرویس گیرنده یک مرورگر شبکه را اجرا میکند .مانند IE یا NEVIGATOR NETSCAPE واسناد را با مشخص کردن URL (آدرس یک وب سایت ) در داخل مرورگر درخواست می نماید . استفاده از تکنولوژی JSP دارای مزایای می باشد.از آنجایی که صفحات JSP از زبان برنامه نویسی جاوا استفاده می نمایند ، آنها سیاست "یک بار بنویس و در همه جا اجرا کن "را دنبال می کنند ،این به آن معنی است که صفحه JSP می تواند بدون هیچ تغییری در هر سرویس دهنده ی کاربردی که صفحات JSP را پشتیبانی می نماید ، اجرا شود.مزیت دیگر JSP این است که مشخصات آن به گونه ای نوشته شده است که عمل یکپارچه سازی با محیط برنامه نویسی مجتمع را بوجود آورده است..DES)) صفحات JSP را می توان در هر ویرایشگر متنی نوشت ؛ فقط باید مطمئن گردید که سند موردنظر را با پسوند JSP ذخیره می نمایید.این به آن معنی است که شما میتوانید JSP ها در برنامه NOTEPAD سیستم عامل ویندوز،یا EMACS سیستم عامل UNIX بنویسید .یک IDE که از صفحات نوشته شده JSP حمایت می نماید ، برنامه DREAM WEAVER می باشد که بخشی از WEBGAIN STUDIO می باشد. مزیت دیگر JSP ها استفاده از تگ های کتابخانه ای میباشد .JSP از تگ هایی که به صورت مشابه در HTML وXML وجود دارند ،برای درج متن های پویا استفاده میکند.این امکان وجود دارد که بتوانیم با وارد کردن یک تگ کتابخانه ای ،امکانات اضافه ای را به صفحات JSP بیفزاییم .تگ کتابخانه ای ، تگ اضافه ای را تعریف میکنند که میتوانند برای جایگزین کردن بخش هایی از کد ها مورد استفاده قرار گیرند . یکی دیگر از مزیت های مهم JSP جداسازي نقش ها می باشد.مشخصه های JSP این اجازه را می دهد که بار کاری به دو دسته تفکیک گردد:متن های گرافیکی صفحه ، ومتن های پویای صفحه .یک تیم خلاق که هیچ دانشی درباره زبان برنامه نویسی جاوا ندارد ، میتواند متن های گرافیکی صفحه را ایجاد کند.یک برنامه نویس جاوا سپس کد های جاوا را برای رسیدن به متن پویای صفحه در داخل سند HTML درج مینماید. زمان نوشتن یک صفحه JSP ، نوشتن کد های HTML وسپس کد های جاوا برای ایجاد متن های پویا آسان تر باشد.بنابراین ،اگر قصد نوشتن HTML را ندارید ، به گرافیست های خود اجازه دهید که یک صفحه زیبا را طراحی نمایند وسپس کد های جاوا را به منظور ساختن صفحات JSP پویا وارد نمایید درج عناصر پویا در صفحات HTML تکنولوژی JSP این امکان را فراهم می کند که عناصر پویا را در صفحات HTML بگنجانید. این عناصر بسیار شبیه عناصر HTML به نظر می رسند، در حالی که برای ایجاد آنها از زبان برنامه نویسی جاوا استفاده شده است. برای درک بهتر موضوع به مثال زیر توجه کنید. Good Morning Good Day Good Evening Welcome to our site, open 24 hours a day صفحه فوق پیغامهای متفاوتی به ازای ساعات متفاوت روز نشان می دهد. پیغام Good morning قبل از ساعت 12 ظهر، پیغام Good Day بین ساعت 12 ظهر و ساعت 6 بعد از ظهر و در غیر این صورت پیغام Good Evening نمایش داده خواهد شد. زمانی که کاربر این صفحه را فراخوانی می کند، سرویس دهنده وب عناصر JSP را اجرا می کند و یک صفحه HTML ایجاد نموده و آن را برای سرویس گیرنده ارسال می کند. برای مثال در صورتی که ساعت P.M8:53 باشد، صفحه ارسال شده به صورت زیر خواهد بود. Good Evening Welcome to our site, open 24 hours a day علاوه بر عناصری که گفته شد، امکان درج دستورات زبان برنامه نویسی جاوا در صفحات JSP وجود دارد. اگرچه با توجه به وجود JSTL به ندرت ممکن است نیازی به درج مستقیم دستورات جاوا داشته باشیم. چرا از JSP استفاده می کنیم؟ آموختن JSP آسان است و این امکان را به برنامه نویسان میدهد تا برنامه ها و وب سایتها را به روشی آشکار و استاندارد تولید کنند. اساس JSP مبتنی بر زبان Java می باشد که زبانی شی گرا ست .JSP محیطی قدرتمند را برای گسترش وب عرضه می کند.  مزایای jsp:  استفاده از تکنولوژی JSP دارای مزایای می باشد.از آنجایی که صفحات JSP از زبان برنامه نویسی جاوا استفاده می نمایند ، آنها سیاست "یک بار بنویس و در همه جا اجرا کن "را دنبال می کنند ،این به آن معنی است که صفحه  JSP می تواند بدون هیچ تغییری در هر سرویس دهنده ی کاربردی که صفحات JSP را پشتیبانی می نماید ، اجرا شود.مزیت دیگر JSP این است که مشخصات آن به گونه ای نوشته شده است که عمل یکپارچه سازی با محیط برنامه نویسی مجتمع را بوجود آورده است..DES)) صفحات JSP را می توان در هر ویرایشگر متنی نوشت ؛ فقط باید مطمئن گردید که سند موردنظر را با پسوند JSP  ذخیره می نمایید .این به آن معنی است که شما میتوانید JSP  ها در برنامه  NOTEPAD  سیستم عامل ویندوز،یا EMACS سیستم عامل  UNIX بنویسید .یک IDE که از صفحات نوشته ده  JSP  حمایت می نماید ، برنامه   DREAM WEAVER   می باشد که بخشی از  WEBGAIN STUDIO  می باشد.مزیت دیگر   JSP ها استفاده از تگ های کتابخانه ای میباشد . JSP از تگ هایی که به صورت مشابه در HTML و XML وجود دارند ،برای درج متن های پویا استفاده میکند.این امکان وجود دارد که بتوانیم با وارد کردن یک تگ کتابخانه ای ،امکانات اضافه ای را به صفحات  JSP  بیفزاییم .تگ کتابخانه ای ، تگ اضافه ای را تعریف میکنند که میتوانند برای جایگزین کردن بخش هایی از کد ها مورد استفاده قرار گیرند . یکی دیگر از مزیت های مهم  JSP جداسازس نقش ها می باشد.مشخصه های  JSP این اجازه را می دهد که بار کاری به دو دسته تفکیک گردد:متن های گرافیکی صفحه ، ومتن های پویای صفحه .یک تیم خلاق که هیچ دانشی درباره زبان برنامه نویسی جاوا ندارد ، میتواند متن های گرافیکی صفحه را ایجاد کند.یک برنامه نویس جاوا سپس کد های جاوا را برای رسیدن به متن پویای صفحه در داخل سند  HTML درج می نماید. زمان نوشتن یک صفحه JSP ، نوشتن کد های  HTML وسپس کد های جاوا برای ایجاد متن های پویا آسان تر باشد.بنابراین ،اگر قصد نوشتن  HTML را ندارید ، به گرافیست های خود اجازه دهید که یک صفحه زیبا را طراحی نمایند وسپس کد های جاوا را به منظور ساختن صفحات  JSP پویا وارد نمایید. از مزیت های دیگر  jsp این است کهشما می توانید به راحتی یه فایل JSP را به یه پلتفرم دیگه، وب سرور یا    JSP Servlet Engine انتقال بدهید.(شکل پایین) نمایش یک صفحه JSP در JSP, صفحه مورد نظر واقعا روی سرور وجود ندارد و آنرا بنا به درخواست شما میسازد. در این سیستم سرور که یک سرور جاواست پس از درخواست کلاینت مبنی بر یک فایل JSP, درخواست را به موتور JSP انتقال میدهد. در این مرحله صفحه JSP از دیسک لود شده به servlet تبدیل میشود. سپس آنرا کامپایل کرده و درخواست را به موتور servlet تحویل میدهد. جالب اینجاست که موتور JSP تنها صفحاتی را تبدیل و کامپایل میکند که متوجه تغییری در آنها بشود. بنابراین این سیستم از سایر زبانهای اسکریپتی مثل PHP کاراتر و درنتیجه سریعتر است. ساختار برنامه های JSP قرار دادن کد جاوا بین تگهای HTML به این معنی است که برنامه ما پویاست. اما اگر قرار باشد یک پروژه بزرگ را با استفاده از این روش بسازیم به جایی میرسیم که ممکن است ادامه کدنویسی ممکن نباشد(به دلیل پیچیدگی کدها(اما راه بهتری نیز وجود دارد و آن جدا کردن منطق برنامه از نمایش خروجی آن است. بر این اساس دو نوع مدل برای تولید برنامه ابداع شده: ساختار مدل ۱ در این مدل منطق برنامه در کلاسهایی (یعنی java beans) پیاده سازی میشود و بعدا در فایل jsp مورد استفاده قرار میگیرد.این مدل برای برنامه نویسان است اما کار را برای طراحان صفحات مشکل میکند. ساختار مدل ۲ راه حل بهتر این است که منطق برنامه و ارائه آن را از هم جدا کنیم. در این روش servlet درخواستها را پردازش میکند, منطق برنامه را اداره میکند و از java beans نمونه سازی میکند. در این صورت jsp داده ها را از این بخش دریافت میکند و پاسخ را فرمتبندی میکند درحالی که از پشت صحنه هیچ اطلاعی ندارد. پارامترها: منظور از پارامتر همان اطلاعات کمکی است که به صفحه ارسال میشود و بعد از نام صفحه با علامت ? شروع شده و با & از هم جدا میشوند. بدین صورت http://www.mysite.com/path/page.jsp?param1=value1¶m2=value2 حال چنانچه پارامتری به صفحه ارسال شود و ما بخواهیم مقدار آنرا در برنامه بخوانیم باید متد getParameter را از شیء request فراخوانی و نام پارامتر را به او بدهیم و مقدار را به صورت رشته ای دریافت کنیم: [sourcecode language="java"]String p1 = request.getParameter("param1");out.println("The value of param1 is " + p1);[/sourcecode] کوکی ها: کوکی ها اطلاعاتی هستند که بنا به درخواست سرور در کلاینت ذخیره و بازیابی میشوند. مثلا اطلاعاتی در مورد حساب کاربری در یک وب سایت, به صورتی که در مراجعات بعدی از کاربر درخواست کلمه عبور و نام کاربری نشود! برای ذخیره اطلاعاتی در کوکی کلاینت از شیء response متد addCookie را استفاده میکنیم: [sourcecode language="java"]Cookie newCookie = new Cookie("name","value");response.addCookie(newCookie);[/sourcecode] برای خواندن کوکی ها ابتدا باید کل کوکی ها را در یک آرایه ذخیره کرد و سپس از آن آرایه اقدام به خواندن یک کوکی کرد ( نکته: هر سرور فقط میتواند کوکیهایی را که خودش ذخیره کرده بخواند) [sourcecode language="java"]Cookie cookie[]= request.getCookies();String value = cookie[i].getValue(); [/sourcecode] برای جستجو در بین کوکیها میتوان از چنین کدی استفاده کرد: [sourcecode language="java"]Cookie cookie[]= request.getCookies();for(int i=0; iString name = cookie[i].getName();if(name.equals("name")) {String value = cookie[i].getValue();out.println("The value of the cookie is " + value);}} [/sourcecode] sessionها: session مکان مناسبی برای ذخیره داده های کاربر پس از لاگین است که در سرور ذخیره میشود. چنانچه session جدید باشد,( یعنی این شیء ساخته شده اما هیچ صفحه یا چیز دیگری به کاربر اختصاص داده نشده) و متد session.isNew() فراخوانی شود نتیجه true خواهد بود. برای درج یک مقدار در session: [sourcecode language="java"]session.putValue("name","value");[/sourcecode] و برای خواندن مقداری از session: [sourcecode language="java"]session.getValue("name");[/sourcecode] پارامتهای ذخیره شده در برنامه: در بسیاری از برنامه ها لازم میشود که اطلاعاتی را در برنامه ذخیره کنیم. مثل رشته اتصال به بانک اطلاعاتی یا عنوان برخی صفحات یا فاکتورها و امثال آن و موارد دیگر. از طرفی این اطلاعات باید درون تمام صفحات در دسترس باشند. اگر این اطلاعات را در یک مکان ذخیره کنیم در صورت تغییر ساختار برنامه همان یک مکان تغییر میکند و دیگر مجبور نیستیم تمام صفحات را ویرایش کنیم.بدین منظور میتوان اطلاعات مورد نظر را در فایل web.xml ذخیره و سپس درون صفحات برنامه بازیابی نمود. حال میخواهیم دو مقدار داده ای را در فایل مذکور ذخیره و از درون برنامه بازیابی و چاپ کنیم.در یک پروژه جدید, ابتدا فایل web.xml را باز کرده و در تب General درون قسمت context parameters دکمه Add را کلیک کنید و در صفحه باز شده مقدارهای مشخص شده را وارد نمایید حال OK را کلیک کنید و یکبار دیگر دکمه Add را کلیک کرده و مقادیر name2 و value2 را وارد کرده و سپس OK را بزنید و فایل را ذخیره کنید. همانطور که مشاهده میکنید دو مقدار داده ای ذخیره شده. حال فایل index.jsp را باز کرده و این کد را درون آن بنویسید: [sourcecode language="java"]java.util.Enumeration mylist;mylist = application.getInitParameterNames();while (mylist.hasMoreElements()) {String name = mylist.nextElement().toString();String value = application.getInitParameter(name);out.println("" + name + " = " + value);} [/sourcecode] در این کد از شیء application استفاده شده (که به کل برنامه جاری و تنظیمات آن اشاره دارد) و لیست نامهای پارامتهای ذخیره شده را دریافت کرده و در یک شیء از نوع شمارش ذخیره میکنیم سپس در یک حلقه لیست تمام نامها را به صورت تک تک خوانده و مقادیر نسبت داده شده به آنها را از طریق شیء application بازیابی کرده و چاپ میکنیم. بعد از اجرای برنامه نتیجه چنین است: المانهای اسکریپتی: با استفاده از المانهای اسکریپتی میتوان کد را درون یک صفحه JSP جا داد. چندین نوع از المانهای اسکریپتی وجود دارند و معمولا برای هر نوع از این المانها فرمت xml آن نیز وجود دارد: Scriptletها: یک بلوک کد است که بین قرار دارد. فرمت xml: script code Declarationها: اعلان یک متغیر محصور بین , یک نمونه متغیر است که در تمام درخواستهای همان صفحه مشترک است: فرمت xml: declaration code Expressionها: نتیجه حاصل شده از محاسبه عبارت بین درون صفحه قرار میگیرد فرمت xml: expression Commentها: مثل سایر زبانهای برنامه نویسی در اینجا نیز امکان قرار دادن توضیح در فایل کد وجود دارد. یک نوع آن از نوع HTML است که در فایل نهایی ظاهر میشود و نوع دیگر از نوع JSP است که در فایل نهایی ظاهر نمیشود. Directiveها: صفحه های JSP از directiveها برای انتقال برخی داده های خود به سرور استفاده میکنند و در پروسه پردازش فایل اسکریپت تاثیر دارند و زمانی نقش خود را بازی میکنند که فایل تغییر کرده و نیاز به کامپایل مجدد دارد: JSP Expression Language.:  که به اختصار آن را EL نیز مینامند. در ادامه نیز یک برنامه کامل با آنچه تا به حال آموختیم را میبینیم. میتوان یک expression را درون JSP جا داد و در این صورت نتیجه آن بخشی از فایل نهایی شما را شامل میشود. مثلا تکه کد زیر را ملاحظه کنید: 2 + 2 = ${ 2 + 2 } در این تکه کد عبارت عبارت داخل براکتها محاسبه شده و پس از تبدیل شدن به رشته درون متن جا میگیرد. البته قدرت و امکانات EL محدود به عبارات ریاضی نیست و محاسبات منطقی را نیز شامل میشود و برای عبارات منطقی از علائم مخصوص به خود بهره میگیرد. البته علائم قبلی نیز همچنان قابل استفاده میباشند. برخی از این علائم بدین شرح است: not برای ! , div برای / , mod برای % , lt برای , le برای = , eq برای == , ne برای != , and برای && , or برای || و اپراتور یگانی empty برای بررسی null یا تهی بودن. یک برنامه نمونه: با این برنامه یک ایده کلی از برنامه های JSP را بررسی میکنیم, همچنین نحوه نوشتن و استفاده از متدها را دربرنامه های JSP بررسی میکنیم. در ابتدای کد یک page directive وجود دارد که در آن از دستور import استفاده شده و یک کلاس هم به برنامه الحاق شده است. سپس یک تگ declaration آمده که یک متد به نام makeDividingLine را در کلاس جاری تعریف کرده که در تمام کدهای کلاس قابل دسترسی میباشد. این متد یک دشته را دریافت میکند و رشته ای حاوی ۲۰ بار تکرار رشته اول اما مابین تگ center برمیگرداند. در ادامه یک تگ declaration دیگر قرار دارد که یک شیء از نوع vector به نام vec را تعریف میکند. بنابراین این شیء در تمام کد قابل دسترسی میباشد. سپس در یک تگ servlet دو دستور چاپ آمده که اولی متنی ساده را چاپ میکند ولی دومی رشته حاصل از فراخوانی متد makeDividingLine به همراه ورودی ** را چاپ میکند. پس از مقداری متن و کد HTML در ادامه یک تگ expression آمده که در آن متد makeDividingLine فراخوانی میشود و نتیجه آن عینا در خروجی درج میگردد. سپس یک تگ servlet قرار گرفته که در آن در شیء vec سه مقدار مختلف درج میگردد و سپس خروجی متدی که در ادامه تعریف شده در بین دو تگ center چاپ میشود. متد اشاره شده در یک تگ declaration تعریف شده و وظیفه آن چاپ محتوی شیء vec در خروجی مشخص شده میباشد. کد مورد نظر چنین است: [sourcecode language="text"] String makeDividingLine(String part) {String str = "";for(int i=0; istr += part;str += "";return(str);}%> This is a JSP page that demonstrates the syntax for adding methods,calling methods, and creating objects from class definitions.out.println("The following is calling a local method from the Java code.");out.println(makeDividingLine("**"));%> The following is calling a local method inside the expression tags. The following shows access to a globally defined object.vec.add("Chocolate");vec.add("Vanilla");vec.add("Strawberry");out.println("");showVecElements(out);out.println("");%> void showVecElements(JspWriter out) throws java.io.IOException {String str;for(int i=0; istr = (String)vec.elementAt(i);out.println("");out.println(str);out.println("");}}%> [/sourcecode] آنرا در بین تگ body قرار دهید و اجرا کنید:   یکی از آیتم هایی که میتوانید در فایل JSP قرار دهید, تگها هستند. میتوان یک تکه کد را به تگی نسبت داد که با فراخوانی آن تگ, تکه کد مربوطه فراخوانی شود. در این قسمت یک تگ ساده را میسازیم و از آن استفاده میکنیم.کلیت کار به این صورت است که ابتدا یک فایل xml حاوی تعریف تگ ساخته سپس فایل جاوایی برای تولید خروجی آن تولید میکنیم و در نهایت از آن استفاده میکنیم.ابتدا یک پروژه جدید از نوع Web Application بسازید و سپس روی نام آن راست کلیک کنید, حال روی new->other کلیک کنید. در پنجره باز شده و در قسمت categories (سمت چپ) گزینه web و از قسمت  File Types گزینه Tag Library Descriptor  را انتخاب کرده و next را کلیک کنید. در پنجره جدید نام MyTag را انتخاب کرده و finish را کلیک کنید.این فایل باید حاوی تگ مورد نظر ما باشد که بعدا به آن اضافه میشود. در ادامه باید فایل جاوایی بنویسیم که هنگام استفاده از تگ در فایل نهایی خروجی موردنظر ما را تولید کند. البته قصد تولید خروجی پیچیده ای نداریم (این یک مثال است). حال به پروژه یک java package اضافه کرده و آنرا com بنامید اینبار به پکیجی که ساختید یک فایل از نوع Tag Handler اضافه کنید, آنرا MyTag بنامید و در قسمت Tag support class to extend گزینه BodyTagSupport  را انتخاب کرده و next را کلیک کنید. در صفحه بعد روی Browse کلیک کرده و مانند شکل فایل tld را که قبلا ساخته اید را انتخاب کنید و سپس Select File و در نهایت finish را کلیک کنید. حال اگر فایل MyTag.tld را باز کنید میبینید که محتویات آن تغییر کرده و این کدها به آن اضافه شده که درواقع ارجایی است به کلاسی که تعریف کردیم و موجب میشود کدهای ما درون آن کلاس اجرا شود. [sourcecode language="xml"]MyTagcom.MyTagJSP [/sourcecode] در این قسمت باید کدهای مربوطه را به فایلها اضافه کنید. پس فایل جاوایی که اخیرا ساختید را باز کرده و متد doStartTag را یافته و این کد را به ابتدای آن اضافه کنید: [sourcecode language="java"]try{JspWriter out= pageContext.getOut();out.println(" This is MyTag");}catch(Exception exp){exp.printStackTrace();} [/sourcecode] سپس فایل index.jsp را باز کرده و این تگ را قبل از تگ HTML اضافه کنید: حال موقع استفاده از تگی است که تعریف کردیم.همانطور که میبینید پیشوند my را برای آن تعریف کرده ایم پس درون تگ body میتوان چنین نوشت: همه چیز را ذخیره کرده و اجرا کنید:   JSTL که مخفف JSP Standard Tag Library میباشد مجموعه ای گسسته از تگهای از پیش تعریف شده است که به چند دسته کلی تقسیم میشوند که به همراه URI مربوطه در زیر آورده شده: Core: http://java.sun.com/jsp/jstl/core XML: http://java.sun.com/jsp/jstl/xml Internationalization: http://java.sun.com/jsp/jstl/fmt SQL: http://java.sun.com/jsp/jstl/sql Functions: http://java.sun.com/jsp/jstl/functions نحوه استفاده از JSTL در netbeans بسیار آسان است. بر روی نام پروژه راست کلیک کرده و گزینه Properties را انتخاب نمایید. در سمت چپ پنجره باز شده روی گزینه Libraries کلیک کرده و سپس دکمه Add Library را کلیک کنید و در پنجره جدیدی که باز میشود JSTL را پیدا کرده و اضافه کنید: حال اگر به قسمت Libraries در زیر نام پروژه دقت کنید متوجه میشوید که در واقع با این کار شما دو پکیج به پروژه اضافه شده اند: jstl.jar standard.jar در این مرحله پروژه برای استفاده از تگهای  JSTL آمادگی دارد و میتوان در فایلهای JSP خود از آنها استفاده کنید. ابتدا فایل index.jsp را باز کرده و این تگ را قبل از تگ HTML اضافه کنید: [sourcecode language="text"][/sourcecode] سپس این کد را درون تگ body بنویسید: [sourcecode language="text"] Format the number 82491302 as a number with commas Format the number 0.82 as a percent Format the number 12345.67 as currency Format the number 12345.6789 as an integer only [/sourcecode] نتیجه چنین است:  دلایل اصلی استفاده از JSP :  قابلیت اجرا در محیط های مختلف اجزا توسط Javabeans and EJB. قابلیت استفاده دوباره دارند.  امتیازات Java شمامی توانیدفایلهای JSP را ازمحیطی به محیط دیگرانتقال دهید(وب سرور و Servlrt Engine ). html وگرافیک که درمرورگر وب نمایش داده میشود درکلاس لایه نمایش (pesentation layer ) قرار میگیرند و کد JSP در سرور در کلاس پیاده سازی(implementation) قرار میگیرند. با داشتن پیاده سازی و نمایش جداگانه طراحان تنها در بخش نمایش و برنامه نویسان JSP در پیاده سازی تمرکز می کنند.. مقایسه JSP و ASP :  ASP و JSP در عملیاتی که انجام میدهند بسیار مشابه هستند. JSP ممکن است دارای دوره یادگیری طولانیتری باشد. هر دو قابلیت گنجاندن کد در HTML برای کار با پایگاه داده ها ومندرجات پویا را دارند . از آنجایی که ASP معمولأ در محیط های مایکروسافت IE , NT یافت می شود و JSP در هر محیطی که با خصوصیات J2EE مطابقت داشته باشد کار میکند.  JSP اجازه می دهد که اجزا دوباره به وسیله EJB’s , Javabeans استفاده شوند . ASP امکان استفاده از ActiveX , COM را فراهم میسازد. مقایسه JSP و Servlet  کی Servlet کلاسی از Java میباشد که امکان ویژه ای از سرویسهای سمت سرور را فراهم میسازد. نوشتن کد های html در Servlet کار بسیار دشواری می باشد . در Servlet شما برای تولید html باید تعداد زیادی دستور Println استفاده کنید.  معماری JSP   JSP بر روی فن آوری Servlet شرکت SUN پیاده شده است. فایل JSP صفحه ای html است که در آن تکه کدهای JSP گنجانده شده است. این تکه کدها می توانند شامل کد های Java باشند. پسوند فایلهای  JSP .jsp و ندرتاً .html , .htm می باشد . موتور(کامپایلر)  JSP فایل jsp. را تجزیه کرده و فایل کد Servlet را تولید میکند. بعد فایل servlet را کامپایل کرده و فایل Class را تولید میکند . این کار تنها بار اول انجام میگیرد و این دلیل کند کار کردن JSP برای بار اول میباشد  مراحل لازم برای پاسخ گویی به درخواست صفحه JSP :  -1 کاربر وارد سایت شده و مرورگر در خواست را از طریق اینترنت ارسال می کند . -2 در خواست به وب سرور ارسال می شود . -3 وب سرور تشخیص می دهد که فایل در خواستی .jsp بوده و فایل را به JSP Servlet Engine می فرستد. -4 اگر فایل JSP برای مرتبه اول صدازده شده باشد فایل تجزیه می شود در غیر این صورت به مرحله 7 می رود. -5 این مرحله مرحله تولید کد Servlet می باشد. همه html باید به دستورهای println تبدیل شود. -6 کد Servlet کامپایل شده و Class را تولید می کند. -7 کد html تولید می شود .      8-کد Html از طریق انترنت به مرورگر کاربر ارسال می شود . ونتیجه بر روی مرورگر کاربر نمایش داده می شود. ذخيره كردن يك صفحه JSP با پسوند JSP پس از تايپ كدهاي ليست قبلي در داخل برنامه Netepad ، شما بايد آنرا با يك پسوند JSP ، به سرويس دهنده وب يا سرويس دهنده برنامه كاربردي اجازه مي دهد تا بداند كه با يك صفحه JSP در ارتباط مي باشد. اين فايل را در دايركتوري C:\tomacat\webapps\myJSPs\Hour2 ذخيره نماييد. اگر اين ساختار دايركتوري وجود ندارد. آنرا بسازيد. هنگامي كه صفحه JSP خود را ذخيره مي كنيد، مطمئن شويد كه آن را به عنوان يك سند متني ذخيره مي كنيد و هنگام تايپ اسم فايل، آنرا درداخل دو عدد گيومه قرار دهيد و پسوند را به آن اضافه كنيد. مشاهده صفحه در داخل يك مرورگر: براي مشاهده اولين صفحه JSP ، مرورگر منتخب خود را باز كرده و در بخش آدرسش URL زير را تايپ نماييد. http:\\Localhost: 8080\myjsps\ Hour2\myFristjsp.jsp اين  URLبه سرويس دهنده مي گويد كه از ميزبان محلي در پورت 8080 استفاده نموده و باقيمانده URL مسير فايل JSP را مشخص مي نمايد. مقدمه اي بر Servlet ها پايه و اساس اجراي صفحات JSP ، Servlet ها مي باشند. اين درست است كه : صفحات JSP بايد قبل از اجرا به Servlet ها ترجمه شوند. ممكن است از اين متعجب باشيد كه اين مسئله چگونه بر روي كارايي اثر مي گذارد. در مرحله اول ممكن است اين مسئله به كارايي لطمه وارد كند، ليكن شما بايد روشهايي را براي دوري ازاين كاهش عملكرد در مراحل بعدي بيابيد. دانستن ترجمه تگ ها به كد Servlet به درك شما از پشت صحنه هاي عملكرد صفحات JSP ، كمك شاياني مي نمايد. يك Servlet چيست؟ Servlet  در كلي ترين حالت- يك كلاس جاوا است كه واسط Servlet  را پياده سازي مي نمايد و همچنين در خواستها را پذيرفته و پاسخها را توليد مي كند. اين درخواستها مي تواند از كلاسهاي جاوا، سرويس گيرنده هاي وب، يا Servlet  هاي ديگر بيايند. وقتي شما يك واسط را اجرا مي كنيد، در واقع اظهار مي داريد كه كلاس شما امكان اجرا را براي متدهاي بيان شده در واسط Servlet  فراهم مي نمايد. به عنوان مثال، اگر شما يك نمونه بانك داري را مي نويسيد و كلاسهاي متعددي داريد كه نياز دارند تا شرحي را براي متدهاي Withdraw ( ) و Deposit ( ) فراهم كنند، مي توانيد يك واسط بنويسيد كه اين متدها را توصيف نمايد. كلاسهاي ديگر، واسط بانك داري را پياده سازي خواهند كرد و تضمين مي كنند كه تعريف هايي را براي رفتار متدهاي Withdraw ( ) و Deposit ( ) فراهم كنند. نكته: گسترش كلاس جاوا، يك كلاس سلسله مراتبي را ايجاد مي كند كه تقريباً مانند يك درخت خانوادگي مي باشد. كلاس گسترش يافته را ابر كلاس يا كلاس والد مي نامند. كلاسي كه تعريف شده است، خودش به يك كلاس ديگر گسترش مي يابد كه زير كلاس فرزند ناميده مي شود. شما يك بسط از والدين خود مي باشيد و يقيناً خواص و رفتار آنها را به ارث مي بريد. اين مثال براي كلاسهاي جاوا نيز مصداق دارد. كلاس فرزند، رفتار وخواص كلاس والد را به ارث مي برد، اما داراي خواص ورفتار ديگري   مي باشد كه اين كلاس را منحصربه فرد مي نمايد.   چگونگي تبديل صفحات JSP به Servlet ها: اساس پياده سازي صفحات JSP ، Servlet ها مي باشند، پس چرا يكي بر روي ديگري به كار برده مي شود؟ صفحات JSP يك برتري بزرگ نسبت به Servlet ها دارند، زيرا صفحات JSP قواعد جداگانه اي را ارائه مي دهند. خبرگان وب مي توانند جلوه هاي زيبايي از صفحات وب را بيافرينند و همچنين برنامه نويسان جاوا ميتوانند محتويات پويا را به صفحات وب اضافه نمايند. همچنين برنامه نويسان نيازي ندارند تا مانند وقتي كه Servlet  ها را مي نويسند، در برنامه نويسي جاوا كار كشته باشند و از چگونگي ساخت كلاس ها و وراثت آگاهي كامل داشته باشند. ممكن است اين نگراني براي شما به وجود آيد كه اگر از صفحات JSP استفاده نماييد، از آنجايي كه بايد اين صفحات به      Servlet  ها ترجمه شوند، كارآيي نرم افزار كاربردي كاهش پيدا نمايد،‌اما خواهيد ديد كه اين موضوع هميشه صادق نمي باشد. حال بيايد به چرخه عمر JSPs / Servlet  و همچنين ترجمه بين صفحات JSP و Servlet  نگاهي بيندازيم.   چرخه عمر JSP/Servlet  : از آنجايي كه اساس پياده سازي صفحات JSP استفاده از Servlet  ها مي باشد، چرخه عمر اين دو مشابه به يگديگر مي باشد. شكل زير چرخه عمر JSP/ Servlet  را نشان ميدهد. شما كارتان را با يك صفحه JSP يا يك كلاس Servlet  شروع مي نماييد. سرويس دهنده مسئول نمونه سازي JSP/ Servlet ميباشد و از متد NEW (  ) براي انجام اين كار استفاده مي نمايد. متد NEW (  ) ، يك متد جاوا براي ايجاد فضاي مربوط به يك آبجكت در حافظه اصلي مي باشد. بعد از اينكه JSP/ Servlet نمونه سازي شد، متد init (…) به منظور مقدار دهي اين نمونه مورد استفاده قرار مي گيرد،‌ init (…) در دقايق بعد با جزئيات بيشتر بررسي مي شود. سپس JSP/Servlet  به سمت « حالت آماده » حركت كرده و آماده رسيدگي به درخواستهاي سرويس گيرنده مي شود. شما مي توانيد يك متد Service (…) را براي رسيدگي به عمل منطقي خود بنويسيد يا مي توانيد يك متد Do get (…) يا                 Do post (…)  را براي عمل منطقي خود بنويسيد. JSP/Servlet بعدها هنگامي كه سرويس دهنده از متد Destroy (  ) استفاده مي نمايد، از بين مي رود. سرانجام جمع كننده ضايعات، حافظه را با استفاده از متد Finalize (  ) پاك سازي مي نمايد. فرآيند ترجمه JSP JSP به كد Servlet  مربوطه تبديل مي شود، كه يك فايل جاوا مي باشد. خيلي از سرويس دهنده هاي برنامه كاربردي امكان نگهداري فايل هاي با پسوند JAVA را فراهم مي كنند. آنها بعد از اينكه به فايل با پسوند java  تبديل شد، به فايل Codebyte (با پسوند Class ) ترجمه مي شوند. فايل با پسوند Class ، اجرايي مي باشد و سند HTML خروجي را توليد كرده و به سرويس گيرنده بر مي گرداند. اكنون ممكن است فكر كنيد كه اين يك پردازش بزرگ مي باشد وبه كارايي لطمه شديدي را وارد مي نمايد. البته، پس از اولين دسترسي به يك صفحه JSP ، درخواستهاي بعدي از ميان فاز ترجمه عبور نخواهد كرد، بلكه به طرف فايل با پسوند Class كه قبلاً كامپايل شده ميرود. خيلي از سرويس دهنده هاي برنامه هاي كاربردي شما اجازه مي دهند تا مدت زماني كه سرويس دهنده برنامه كاربردي قبل از بررسي كردن صفحه JSP ( در صورتي كه صفحه تغيير كرده باشد و نياز به كامپايل داشته باشد) بايد منتظر بماند را تعيين نماييد. همچنين بسياري از سرويس دهنده هاي برنامه كاربردي، كامپايلري را براي صفحات JSP فراهم مي كند، لذا در برخورد اول با صفحه JSP كاهش كارآيي قابل توجه نخواهد بود . ساختار اصلي يك httpservlet متدها متعددي وجود دارند كه معمولاً وقتي يك httpservlet را مي نويسيد، از آنها استفاده مي نماييد. اين متدها عبارتند از : Void init (ServletConfig  SC ) throws  ServletException; Void Service(HttpServlet Request Request,HttpservletResponse response ) Throws ServletException , IOEception; Void doget( HttpServletRequest  reques ,Httpservlet Response   response ) Throws ServletException , IOEception; Void dopost( HttpServletRequest  request,Httpservlet Response   response )    Throws ServletException , IOEception;  شما مي توانيد جايي كه متدها در چرخه عمر JSP /Servlet  قرار گرفته اند را با رجوع به شكل چرخه عمر JSP /Servlet  در صفحه قبل مشاهده نماييد خاطر داريد كه از متد   init (…) براي مقدار دهي اوليه استفاده مي شد. شما از اين متد براي كنترل مقدار دهي مخصوص به خودتان، به Servlet  استفاده مي نماييد. متد Service (…) براي كنترل اعمال منطقي شما مورد استفاده مي گيرد ( در صورتي كه عمل منطقي شما مهم نباشد و در صورتي كه درخواست تحت متدها POST يا GET فرستاده شده باشد، مي توانيد از متدهاي dopost (…) يا doGet (…) استفاده نماييد. متد init (…) شما در چرخه عمر JSP /Servlet  ديديد كه متد init (…) براي مقدار دهي اوليه JSP /Servlet  فراخواني مي شد. دستور زبان مربوط به متد init (…) به صورت زير مي باشد: Void init (ServletConfig  SC ) throws  ServletException; پارامتري كه به داخل متد init (…) عبور داده مي شود يك آبجكت Servlet config   مي باشد. آبجكت Servlet Config به شما امكان دستيابي پارامترهاي اوليه را مي دهد. پارامترها اوليه به شما اجازه مي دهند تا براي Servlet  خود متغيرهاي سراسري تعيين نماييد. بيشتر اوقات اين پارامترها براي مشخص كردن حداقل يا حداكثر اعداد مربوط به Servlet  مورد استفاده قرار مي گيرند. براي مثال اگر شما يك شماره حساب بانكي داريد، عموماً يك مقدار حداقل، براي ثابت نگه داشتن شماره حساب نياز مي باشد. پارامتر اوليه مي تواند براي اين عدد حداقل تنظيم شود و سپس Servlet  مي تواند براي بررسي مقدار آبجكت، به آن دسترسي پيدا نمايد.   متد Service (…) متد Service (…) مي تواند براي پياده سازي اعمال منطق شما مورد استفاده قرار گيرد. دستور زبان متد Service (…) به صورت زير است: Void Service (HttpServlet Request Request , HttpservletResponse response ) Throws ServletException , IOEception; معمولاًتوسعه دهنده Servlet  از متدهاي dopost (…) يا doGet يك Servlet  ، با فرض اينكه Servlet  شامل منطق متفاوتي مي باشد و بسته به نوع در خواست استفاده مي نمايد. اگرچه در تمرينات، اغلب كدهاي مشابهي براي هر دو متد نوشته ميشود. شما به جاي اينكه دوبار كدهايتان را بنويسيد، فقط كافي است از متد Service (…)  استفاده نماييد. نوع عمل منطقي كه Servlet  اجرا مينمايد، وابسته به برنامه كاربردي شما ميباشد. يك دستور پردازشي را براي مثال در نظر بگيريد، كه كاربر يك فرم HTML را پر مي كند كه شامل نام، شماره تلفن، آدرس و انواع ديگري از اطلاعات شخصي وي مي باشد. كاربر همچنين محصولاتي كه مي خواهد خريداري نمايد را در داخل فرم پر مي كند.اطلاعات خريد مي تواند شامل شماره محصول و ميزان خريد كاربر باشد. عمل منطقي در Servlet  مي تواند شامل چندين چيز باشد. ممكن است Servlet  بررسي كند كه آيا سرويس گيرنده هم اكنون در داخل بانك اطلاعاتي وجود دارد يا خير و اگر چنين نيست آن را به بانك اطلاعاتي اضافه نمايد. همچنين مي تواند بررسي نمايد كه آيا محصول در داخل انبار وجود دارد يا خير. اگر محصول در انبار وجود دارد، مقداري كه سرويس گيرنده درخواست نموده است را از موجودي انبار كم مي نمايد و اطلاعات فروش مربوط به دستور را تنظيم مي نمايد. پارامترهايي كه فرستاده مي شوند، آبجكت هاي HttpServlet Request و ttpservletResponse  مي باشند.اين آبجكت به شما اجازه تجزيه درخواستها رسيده را مي دهند و پاسخهايي را كه براي سرويس گيرنده پس فرستاده مي شوند را توليد مي كنند. متدهاي dopost (…) و doGet (…) متدهاي dopost (…) و doGet (…) درخواستها را از فرم HTML مربوطه گرفته و عمل منطقي را براي شما اجرا مي كنند. دستور زبان متدهاي dopost (…) و doGet (…) به قرار زير مي باشند:  (Void doget ( HttpServletRequest  request ,Httpservlet Response response Throws ServletException , IOEception; Void( dopost ( HttpServletRequest  request , Httpservlet Response response    Throws ServletException , IOEception; فرم HTML داراي خاصيتي بنام “METHOD” مي باشد كه چگونگي ارسال اطلاعات سرويس دهنده را مشخص مي كند. متد GET داده را به URL پيوست مي كند و از اين طريق آنها را براي سرويس دهنده ارسال مي نمايد. متد POST ، داده را در يك بسته، بسته بندي كرده و بسته را براي سرويس دهنده ارسال مي نمايد . ليست زير يك سند HTML مي باشد كه شامل دو فرم است. يكي از فرم ها از متد GET و فرم ديگر از متد POST براي ارسال داده به سرويس دهنده استفاده مي كنند. 1:     2:     Form Examples 3:     4:     5:     6:     Name: 7:     8:     9:     password: 10:  11:  12: 13:  14:  15:  16:  17:  Name : 18:  19:  20:  please Select your Favorite Ice Cream Flavors: 21:  22:  23:  Mint Chocolate chip 24:  Rocky Road 25:  Strawberry Cheesecake 26:  Chocolate 27:  Vanilla 28:  29:  30: 31:  32:  33:  34:     پارامترهايي كه به متدهاي doxxx(…) عبور داده مي شوند مشابه متد Service (…)      مي باشند و عبارتند از: آبجكت هايHttp Servlet Reques  و HttpServletresponse .   ترجمه يك JSP ساده به يك Servlet   از آنجايي كه پايه اساس پياده سازي يك صفحه JSP ، يك Servlet  مي باشد، اجازه دهيد نگاهي به يك صفحه JSP سپس كد Servlet  معادل آن بيندازيم. كد معادل Servlet  ، خروجي شبيه به صفحه JSP دارد، اما خواهيد ديد كه كار بيشتري را بايد انجام دهيد. نوشتن يك صفحه JSP ساده ليست زير يك صفحه JSP مي باشدكه جدول Powers of 2 را مي سازد. 1:     2:     Powers of 2 3:     4:     5:     Behold The Powers of 2 6:     7:     8:     Exponent2^Exponent 9:     10:   11:   12:   13:   14:   15:   16:        مقايسة صفحات JSP با برنامه هاي CGI : برنامه هاي CGI كلي ترين اصطلاحاتي هستند كه براي توصيف برنامه هاي موجود بر روي سرويس دهنده به كار مي روند كه توليد اسناد پويا را مي نمايند. اين برنامه ها را   مي توانيد با زبانهاي برنامه نويسي C، C++، Perl يا جاوا بنويسيد. صفحات JSP نوعي از برنامه هاي CGI مي باشند. آنها اجازه دسترسي از سرويس  گيرنده هاي وب، براي دسترسي به منابع سرويس دهنده را مي دهند و پاسخهاي پويايي  را براي سرويس گيرنده هاي وب توليد مي نمايند. CGI فقط يك اصطلاح كلي براي توصيف برنامه هايي مانند ASP، JSP و ديگر برنامه هاي نوشته شده به زبانهايي مانند C و Perl مي باشد.   مقايسة صفحات JSP با برنامه هاي CGI : برنامه هاي CGI كلي ترين اصطلاحاتي هستند كه براي توصيف برنامه هاي موجود بر روي سرويس دهنده به كار مي روند كه توليد اسناد پويا را مي نمايند. اين برنامه ها را   مي توانيد با زبانهاي برنامه نويسي C، C++، Perl يا جاوا بنويسيد. صفحات JSP نوعي از برنامه هاي CGI مي باشند. آنها اجازه دسترسي از سرويس  گيرنده هاي وب، براي دسترسي به منابع سرويس دهنده را مي دهند و پاسخهاي پويايي  را براي سرويس گيرنده هاي وب توليد مي نمايند. CGI فقط يك اصطلاح كلي براي توصيف برنامه هايي مانند ASP، JSP و ديگر برنامه هاي نوشته شده به زبانهايي مانند C و Perl مي باشد. مقايسه صفحات JSP و صفحات ASP : تكنولوژي ASP ، به وسيلة شركت مايكروسافت توسعه يافته است و از زبان برنامه نويسي VBScript در داخل اسناد HTML جهت توليد محتويات پويا براي سرويس گيرنده هاي وب استفاده مي نمايد. صفحات ASP و JSP در عملكرد خيلي با يكديگر مشابه مي باشند – هر دو براي توليد محتويات پويا براي سرويس گيرنده هاي وب به كار مي روند. صفحات ASP از زبان VBScript استفاده مي نمايند در حالي كه صفحات JSP از زبان جاوا در داخل اسناد HTML استفاده مي كنند. هر دوي اين زبانها، برنامه هايي بر روي سرويس دهنده هستند و اين بدان معنا است كه هر دوي اين زبانها به منابع سمت سرويس دهنده مثل بانكهاي اطلاعاتي دسترسي دارند. حتي دستور زباني كه براي وارد كردن زبان خاص خودشان استفاده مي نمايند، نيز بسيار با يكديگر مشابه مي باشد. ليست(1) مثالي از يك صفحة ASP مي باشد كه زمان و تاريخ فعلي سيستم را نمايش    مي دهد و ليست(2) مثالي از يك صفحة JSP مي باشد كه زمان و تاريخ فعلي سيستم را نمايش مي دهد. در خط هشتم ليست(1) ، مي توانيد مشاهده نماييد كه از تگ هاي %> و ليست 1: 1:  2:  3:  4:  A Simple APS 5:  6:  7:  8:   The Current Date and Time is : 9:   10: 11: نكته: صفحات ASP مانند صفحات JSP ، مي توانند در داخل هر ويرايشگر متني نوشته شوند و پسوند asp ذخيره شوند. ابزاري محبوب ويرايش كه متنن را به صورت برجسته (highlights) نمايش داده و به شما با دستور زبان مربوطه كمك مي نمايد. برنامه Visual InterDev شركت مايكروسافت مي باشد. اين ابزار در سازماندهي برنامه هاي كاربردي بزرگي كه شامل تعداد زيادي صفحات ASP و HTML مي باشند به شما كمك مينمايد. كد معادل در صفحه JSP ليست 3-2 آورده شده است. ليست (2): 1:    2:    A Simpie JSP 3:    4:     5:    6:    The Current  date  and Time is:  7:    8:    9:    10:  نكته: جاوا كلاس هاي مشابه اي را در داخل بسته هاي نرم افزاري تركيب كرده است. كلاس Date در بسته Java . ulit قرار دارد وبه شما اجازه مي دهد كه از ساختار آن براي دستيابي به زمان و تاريخ فعلي سيستم استفاده نماييد. يك ساختار (Contructor) متدي است كه يك آبجكت را ايجاد و نمونه سازي مي نمايد. اگر چه صفحات ASP و JSP با يكديگر مشابه مي باشند، اما چند تفاوت بين آنها وجود دارد. يك تفاوت عمده در اين است كه صفحات ASP تنها بر روي سيستم هاي مايكروسافت اجرا مي شوند، در حالي كه، صفحات JSP فلسفه يك بار بنويس و در همه جا اجرا كن را دنبال مي كنند و بر روي هر سرويس دهنده اي كه از يك ماشين مجازي استفاده مي كنند، اجرا مي شوند. از آنجايي كه ماشين مجازي جاوا تقريباً بر روي هر سيستم عاملي قابل نصب و قابل دسترسي مي باشد، اين موضوع يكي از مزاياي صفحات JSP مي تواند باشد. مزيت ديگر JSP اين است كه از زبان برنامه نويسي قويتري به نام جاوا استفاده مي نمايد تا محتويات پوياي مربوط به خود را بسازد. اين به معناست كه صدها كلاس و متد در اختيار شما قرار دارند.  ساخت اولين صفحه JSP اكنون زمان آن رسيده است كه محيط كاري خود را راه اندازي كرده و اولين صفحه JSP را اجرا نماييد. ذخيره كردن يك صفحه JSP با پسوند JSP پس از تايپ كدهاي ليست قبلي در داخل برنامه Netepad ، شما بايد آنرا با يك پسوند JSP ، به سرويس دهنده وب يا سرويس دهنده برنامه كاربردي اجازه مي دهد تا بداند كه با يك صفحه JSP در ارتباط مي باشد. اين فايل را در دايركتوري C:\tomacat\webapps\myJSPs\Hour2 ذخيره نماييد. اگر اين ساختار دايركتوري وجود ندارد. آنرا بسازيد. هنگامي كه صفحه JSP خود را ذخيره مي كنيد، مطمئن شويد كه آن را به عنوان يك سند متني ذخيره مي كنيد و هنگام تايپ اسم فايل، آنرا درداخل دو عدد گيومه قرار دهيد و پسوند را به آن اضافه كنيد. مشاهده صفحه در داخل يك مرورگر براي مشاهده اولين صفحه JSP ، مرورگر منتخب خود را باز كرده و در بخش آدرسش URL زير را تايپ نماييد. http:\\Localhost: 8080\myjsps\ Hour2\myFristjsp.jsp اين  URLبه سرويس دهنده مي گويد كه از ميزبان محلي در پورت 8080 استفاده نموده و باقيمانده URL مسير فايل JSP را مشخص مي نمايد. مقدمه اي بر Servlet ها پايه و اساس اجراي صفحات JSP ، Servlet ها مي باشند. اين درست است كه : صفحات JSP بايد قبل از اجرا به Servlet ها ترجمه شوند. ممكن است از اين متعجب باشيد كه اين مسئله چگونه بر روي كارايي اثر مي گذارد. در مرحله اول ممكن است اين مسئله به كارايي لطمه وارد كند، ليكن شما بايد روشهايي را براي دوري ازاين كاهش عملكرد در مراحل بعدي بيابيد. دانستن ترجمه تگ ها به كد Servlet به درك شما از پشت صحنه هاي عملكرد صفحات JSP ، كمك شاياني  مي نمايد. يك Servlet چيست؟ Servlet  در كلي ترين حالت- يك كلاس جاوا است كه واسط Servlet  را پياده سازي مي نمايد و همچنين در خواستها را پذيرفته و پاسخها را توليد مي كند. اين درخواستها مي تواند از كلاسهاي جاوا، سرويس گيرنده هاي وب، يا Servlet  هاي ديگر بيايند. وقتي شما يك واسط را اجرا مي كنيد، در واقع اظهار مي داريد كه كلاس شما امكان اجرا را براي متدهاي بيان شده در واسط Servlet  فراهم مي نمايد. به عنوان مثال، اگر شما يك نمونه بانك داري را مي نويسيد و كلاسهاي متعددي داريد كه نياز دارند تا شرحي را براي متدهاي Withdraw ( ) و Deposit ( ) فراهم كنند، مي توانيد يك واسط بنويسيد كه اين متدها را توصيف نمايد. كلاسهاي ديگر، واسط بانك داري را پياده سازي خواهند كرد و تضمين مي كنند كه تعريف هايي را براي رفتار متدهاي Withdraw ( ) و Deposit ( ) فراهم كنند. نكته: گسترش كلاس جاوا، يك كلاس سلسله مراتبي را ايجاد مي كند كه تقريباً مانند يك درخت خانوادگي مي باشد. كلاس گسترش يافته را ابر كلاس يا كلاس والد مي نامند. كلاسي كه تعريف شده است، خودش به يك كلاس ديگر گسترش مي يابد كه زير كلاس فرزند ناميده مي شود. شما يك بسط از والدين خود مي باشيد و يقيناً خواص و رفتار آنها را به ارث مي بريد. اين مثال براي كلاسهاي جاوا نيز مصداق دارد. كلاس فرزند، رفتار وخواص كلاس والد را به ارث مي برد، اما داراي خواص ورفتار ديگري   مي باشد كه اين كلاس را منحصربه فرد مي نمايد. چگونگي تبديل صفحات JSP به Servlet ها   اساس پياده سازي صفحات JSP ، Servlet ها مي باشند، پس چرا يكي بر روي ديگري به كار برده مي شود؟ صفحات JSP يك برتري بزرگ نسبت به Servlet ها دارند، زيرا صفحات JSP قواعد جداگانه اي را ارائه مي دهند. خبرگان وب مي توانند جلوه هاي زيبايي از صفحات وب را بيافرينند و همچنين برنامه نويسان جاوا ميتوانند محتويات پويا را به صفحات وب اضافه نمايند. همچنين برنامه نويسان نيازي ندارند تا مانند وقتي كه Servlet  ها را مي نويسند، در برنامه نويسي جاوا كار كشته باشند و از چگونگي ساخت كلاس ها و وراثت آگاهي كامل داشته باشند. ممكن است اين نگراني براي شما به وجود آيد كه اگر از صفحات JSP استفاده نماييد، از آنجايي كه بايد اين صفحات به      Servlet  ها ترجمه شوند، كارآيي نرم افزار كاربردي كاهش پيدا نمايد،‌اما خواهيد ديد كه اين موضوع هميشه صادق نمي باشد. حال بيايد به چرخه عمر JSPs / Servlet  و همچنين ترجمه بين صفحات JSP و Servlet  نگاهي بيندازيم. چرخه عمر JSP/Servlet  از آنجايي كه اساس پياده سازي صفحات JSP استفاده از Servlet  ها مي باشد، چرخه عمر اين دو مشابه به يگديگر مي باشد. شكل زير چرخه عمر JSP/ Servlet  را نشان ميدهد. شما كارتان را با يك صفحه JSP يا يك كلاس Servlet  شروع مي نماييد. سرويس دهنده مسئول نمونه سازي JSP/ Servlet ميباشد و از متد NEW (  ) براي انجام اين كار استفاده مي نمايد. متد NEW (  ) ، يك متد جاوا براي ايجاد فضاي مربوط به يك آبجكت در حافظه اصلي مي باشد. بعد از اينكه JSP/ Servlet نمونه سازي شد، متد init (…) به منظور مقدار دهي اين نمونه مورد استفاده قرار مي گيرد،‌ init (…) در دقايق بعد با جزئيات بيشتر بررسي مي شود. سپس JSP/Servlet  به سمت « حالت آماده » حركت كرده و آماده رسيدگي به درخواستهاي سرويس گيرنده مي شود. شما مي توانيد يك متد Service (…) را براي رسيدگي به عمل منطقي خود بنويسيد يا مي توانيد يك متد Do get (…) يا                 Do post (…)  را براي عمل منطقي خود بنويسيد. JSP/Servlet بعدها هنگامي كه سرويس دهنده از متد Destroy (  ) استفاده مي نمايد، از بين مي رود. سرانجام جمع كننده ضايعات، حافظه را با استفاده از متد Finalize (  ) پاك سازي مي نمايد. فرآيند ترجمه JSP JSP به كد Servlet  مربوطه تبديل مي شود، كه يك فايل جاوا مي باشد. خيلي از سرويس دهنده هاي برنامه كاربردي امكان نگهداري فايل هاي با پسوند JAVA را فراهم مي كنند. آنها بعد از اينكه به فايل با پسوند java  تبديل شد، به فايل Codebyte (با پسوند Class ) ترجمه مي شوند. فايل با پسوند Class ، اجرايي مي باشد و سند HTML خروجي را توليد كرده و به سرويس گيرنده بر مي گرداند. اكنون ممكن است فكر كنيد كه اين يك پردازش بزرگ مي باشد وبه كارايي لطمه شديدي را وارد مي نمايد. البته، پس از اولين دسترسي به يك صفحه JSP ، درخواستهاي بعدي از ميان فاز ترجمه عبور نخواهد كرد، بلكه به طرف فايل با پسوند Class كه قبلاً كامپايل شده ميرود. خيلي از سرويس دهنده هاي برنامه هاي كاربردي شما اجازه مي دهند تا مدت زماني كه سرويس دهنده برنامه كاربردي قبل از بررسي كردن صفحه JSP ( در صورتي كه صفحه تغيير كرده باشد و نياز به كامپايل داشته باشد) بايد منتظر بماند را تعيين نماييد. همچنين بسياري از سرويس دهنده هاي برنامه كاربردي، كامپايلري را براي صفحات JSP فراهم مي كند، لذا در برخورد اول با صفحه JSP كاهش كارآيي قابل توجه نخواهد بود . ساختار اصلي يك httpservlet متدها متعددي وجود دارند كه معمولاً وقتي يك httpservlet را مي نويسيد، از آنها استفاده مي نماييد. اين متدها عبارتند از : Void init (ServletConfig  SC ) throws  ServletException; Void Service(HttpServlet Request Request,HttpservletResponse response ) Throws ServletException , IOEception; Void doget( HttpServletRequest  reques ,Httpservlet Response   response ) Throws ServletException , IOEception; Void dopost( HttpServletRequest  request,Httpservlet Response   response )    Throws ServletException , IOEception;  شما مي توانيد جايي كه متدها در چرخه عمر JSP /Servlet  قرار گرفته اند را با رجوع به شكل چرخه عمر JSP /Servlet  در صفحه قبل مشاهده نماييد خاطر داريد كه از متد   init (…) براي مقدار دهي اوليه استفاده مي شد. شما از اين متد براي كنترل مقدار دهي مخصوص به خودتان، به Servlet  استفاده مي نماييد. متد Service (…) براي كنترل اعمال منطقي شما مورد استفاده مي گيرد ( در صورتي كه عمل منطقي شما مهم نباشد و در صورتي كه درخواست تحت متدها POST يا GET فرستاده شده باشد، مي توانيد از متدهاي dopost (…) يا doGet (…) استفاده نماييد. متد init (…) شما در چرخه عمر JSP /Servlet  ديديد كه متد init (…) براي مقدار دهي اوليه JSP /Servlet  فراخواني مي شد. دستور زبان مربوط به متد init (…) به صورت زير مي باشد: Void init (ServletConfig  SC ) throws  ServletException; پارامتري كه به داخل متد init (…) عبور داده مي شود يك آبجكت Servlet config   مي باشد. آبجكت Servlet Config به شما امكان دستيابي پارامترهاي اوليه را مي دهد. پارامترها اوليه به شما اجازه مي دهند تا براي Servlet  خود متغيرهاي سراسري تعيين نماييد. بيشتر اوقات اين پارامترها براي مشخص كردن حداقل يا حداكثر اعداد مربوط به Servlet  مورد استفاده قرار مي گيرند. براي مثال اگر شما يك شماره حساب بانكي داريد، عموماً يك مقدار حداقل، براي ثابت نگه داشتن شماره حساب نياز مي باشد. پارامتر اوليه مي تواند براي اين عدد حداقل تنظيم شود و سپس Servlet  مي تواند براي بررسي مقدار آبجكت، به آن دسترسي پيدا نمايد.  متد Service (…) متد Service (…) مي تواند براي پياده سازي اعمال منطق شما مورد استفاده قرار گيرد. دستور زبان متد Service (…) به صورت زير است: Void Service (HttpServlet Request Request , HttpservletResponse response ) Throws ServletException , IOEception; معمولاًتوسعه دهنده Servlet  از متدهاي dopost (…) يا doGet يك Servlet  ، با فرض اينكه Servlet  شامل منطق متفاوتي مي باشد و بسته به نوع در خواست استفاده مي نمايد. اگرچه در تمرينات، اغلب كدهاي مشابهي براي هر دو متد نوشته ميشود. شما به جاي اينكه دوبار كدهايتان را بنويسيد، فقط كافي است از متد Service (…)  استفاده نماييد. نوع عمل منطقي كه Servlet  اجرا مينمايد، وابسته به برنامه كاربردي شما ميباشد. يك دستور پردازشي را براي مثال در نظر بگيريد، كه كاربر يك فرم HTML را پر مي كند كه شامل نام، شماره تلفن، آدرس و انواع ديگري از اطلاعات شخصي وي مي باشد. كاربر همچنين محصولاتي كه مي خواهد خريداري نمايد را در داخل فرم پر مي كند. اطلاعات خريد مي تواند شامل شماره محصول و ميزان خريد كاربر باشد. عمل منطقي در Servlet  مي تواند شامل چندين چيز باشد. ممكن است Servlet  بررسي كند كه آيا سرويس گيرنده هم اكنون در داخل بانك اطلاعاتي وجود دارد يا خير و اگر چنين نيست آن را به بانك اطلاعاتي اضافه نمايد. همچنين مي تواند بررسي نمايد كه آيا محصول در داخل انبار وجود دارد يا خير. اگر محصول در انبار وجود دارد، مقداري كه سرويس گيرنده درخواست نموده است را از موجودي انبار كم مي نمايد و اطلاعات فروش مربوط به دستور را تنظيم مي نمايد. پارامترهايي كه فرستاده مي شوند، آبجكت هاي HttpServlet Request و HttpservletResponse  مي باشند. اين آبجكت به شما اجازه تجزيه درخواستها رسيده را مي دهند و پاسخهايي را كه براي سرويس گيرنده پس فرستاده مي شوند را توليد مي كنند.   متدهاي dopost (…) و doGet (…) متدهاي dopost (…) و doGet (…)        درخواستها را از فرم HTML مربوطه گرفته و عمل منطقي را براي شما اجرا مي كنند. دستور زبان متدهاي dopost (…) و doGet (…) به قرار زير مي باشند:  Void doget ( HttpServletRequest  request , Httpservlet Response response ) Throws ServletException , IOEception; Void dopost ( HttpServletRequest  request , Httpservlet Response response )    Throws ServletException , IOEception; فرم HTML داراي خاصيتي بنام “METHOD” مي باشد كه چگونگي ارسال اطلاعات سرويس دهنده را مشخص مي كند. متد GET داده را به URL پيوست مي كند و از اين طريق آنها را براي سرويس دهنده ارسال مي نمايد. متد POST ، داده را در يك بسته، بسته بندي كرده و بسته را براي سرويس دهنده ارسال مي نمايد . ليست زير يك سند HTML مي باشد كه شامل دو فرم است. يكي از فرم ها از متد GET و فرم ديگر از متد POST براي ارسال داده به سرويس دهنده استفاده مي كنند. 1:     2:     Form Examples 3:     4:     5:     6:     Name: 7:      8:     9:     password: 10:  11:  12: 13:  14:  15:  16:  17:  Name : 18:  19:  20:  please Select your Favorite Ice Cream Flavors: 21:  22:  23:  Mint Chocolate chip 24:  Rocky Road 25:  Strawberry Cheesecake 26:  Chocolate 27:  Vanilla 28:  29:  30: 31:  32:  33:  34:  پارامترهايي كه به متدهاي doxxx(…) عبور داده مي شوند مشابه متد Service (…)      مي باشند و عبارتند از: آبجكت هايHttp Servlet Reques  و HttpServletresponse . ترجمه يك JSP ساده به يك Servlet  از آنجايي كه پايه اساس پياده سازي يك صفحه JSP ، يك Servlet  مي باشد، اجازه دهيد نگاهي به يك صفحه JSP سپس كد Servlet  معادل آن بيندازيم. كد معادل Servlet  ، خروجي شبيه به صفحه JSP دارد، اما خواهيد ديد كه كار بيشتري را بايد انجام دهيد. نوشتن يك صفحه JSP ساده ليست زير يك صفحه JSP مي باشدكه جدول Powers of 2 را مي سازد. 1:     2:     Powers of 2 3:     4:     5:     Behold The Powers of 2 6:     7:     8:     Exponent2^Exponent 9:     10:   11:   12:   13:   14:   15:   16:    در صفحه JSP بالا چه اتفاقي رخ مي دهد. خط 1 و 16 تگ هاي ابتدايي و انتهايي سند HTML مي باشند و مشخص مي كنند كه اين صفحه يك سند HTML مي باشد. خط 2 بخش سر آغاز (head) سند را مي سازد و يك عنوان به نام Powers  of  2 را به اين صفحه مي دهد. تگ ( BODY) در خط سوم شروع شده ودر خط 15 بسته مي شود، كه تقريباً محتويات صفحه را شامل مي شود. خطهاي   6-4 يك عنوان را بر روي صفحه در سطح دوم مي سازند كه در وسط صفحه قرار       مي گيرد. عنوان عبارت Behold The Powers of 2 مي باشد. خروجي اين صفحه قرار است يك جدول، با يك عدد در ستون اول و نتيجه به توان دو آن عدد در ستون دوم باشد. در خط هفتم جدولي با حاشيه اي به اندازه 2 پيكسل بر روي صفحه ساخته مي شود. سر تيتر جدول در خط هشتم با استفاده از تگ ساخته مي شود. حال زمان آن رسيده كه كدهاي جاوا را به داخل سند HTML وارد نماييم. خط نهم از يك تگ JSP به نام تگ Scriptlet كه به صورت %> و ساخته مي شود و اولين مقدار در ستون exponent قرار داده ميشود، كه همان متغير ساده i مي باشد. قابل توجه است كه يك تگ جديد مقدار i را درج مي نمايد؛ اين تگ، تگ Scriptlet كه در خط نهم مشاهده كرده ايد، نمي باشد. اين تگ جديد، قابل توجه است كه خروجي Servlet  مشابه با خروجي صفحه SP مي باشد. اگرچه خروجيها مشابه مي باشند، اما كدهاي Servlet  كار بيشتري را طلب مي كنند، بنابر اين ساخت صفحات JSP مطلوب تر مي باشد. شما براي نوشتن صفحات JSP بر خلاف وقتي كه با Servlet  ها كار مي كنيد، نياز نداريد كه فهم عميقي از جاوا داشته باشيد.   مقايسه صفحات JSP و صفحات ASP : تكنولوژي ASP ، به وسيلة شركت مايكروسافت توسعه يافته است و از زبان برنامه نويسي VBScript در داخل اسناد HTML جهت توليد محتويات پويا براي سرويس گيرنده هاي وب استفاده مي نمايد. صفحات ASP و JSP در عملكرد خيلي با يكديگر مشابه مي باشند – هر دو براي توليد محتويات پويا براي سرويس گيرنده هاي وب به كار مي روند. صفحات ASP از زبان VBScript استفاده مي نمايند در حالي كه صفحات JSP از زبان جاوا در داخل اسناد HTML استفاده مي كنند. هر دوي اين زبانها، برنامه هايي بر روي سرويس دهنده هستند و اين بدان معنا است كه هر دوي اين زبانها به منابع سمت سرويس دهنده مثل بانكهاي اطلاعاتي دسترسي دارند. حتي دستور زباني كه براي وارد كردن زبان خاص خودشان استفاده مي نمايند، نيز بسيار با يكديگر مشابه مي باشد. ليست(1) مثالي از يك صفحة ASP مي باشد كه زمان و تاريخ فعلي سيستم را نمايش    مي دهد و ليست(2) مثالي از يك صفحة JSP مي باشد كه زمان و تاريخ فعلي سيستم را نمايش مي دهد. در خط هشتم ليست(1) ، مي توانيد مشاهده نماييد كه از تگ هاي %> و ليست (1) : 1:  2:  3:  4:  A Simple APS 5:  6:  7:  8:   The Current Date and Time is : 9:   10: 11: نكته: صفحات ASP مانند صفحات JSP ، مي توانند در داخل هر ويرايشگر متني نوشته شوند و پسوند asp ذخيره شوند. ابزاري محبوب ويرايش كه متنن را به صورت برجسته (highlights) نمايش داده و به شما با دستور زبان مربوطه كمك مي نمايد. برنامه Visual InterDev شركت مايكروسافت مي باشد. اين ابزار در سازماندهي برنامه هاي كاربردي بزرگي كه شامل تعداد زيادي صفحات ASP و HTML مي باشند به شما كمك مينمايد. كد معادل در صفحه JSP ليست 3-2 آورده شده است. ليست (2) : 1:    2:    A Simpie JSP 3:    4:    5:    6:    The Current  date  and Time is:  7:    8:    9:    10:  نكته: جاوا كلاس هاي مشابه اي را در داخل بسته هاي نرم افزاري تركيب كرده است. كلاس Date در بسته Java . ulit قرار دارد وبه شما اجازه مي دهد كه از ساختار آن براي دستيابي به زمان و تاريخ فعلي سيستم استفاده نماييد. يك ساختار (Contructor) متدي است كه يك آبجكت را ايجاد و نمونه سازي مي نمايد. اگر چه صفحات ASP و JSP با يكديگر مشابه مي باشند، اما چند تفاوت بين آنها وجود دارد. يك تفاوت عمده در اين است كه صفحات ASP تنها بر روي سيستم هاي مايكروسافت اجرا مي شوند، در حالي كه، صفحات JSP فلسفه يك بار بنويس و در همه جا اجرا كن را دنبال مي كنند و بر روي هر سرويس دهنده اي كه از يك ماشين مجازي استفاده مي كنند، اجرا مي شوند. از آنجايي كه ماشين مجازي جاوا تقريباً بر روي هر سيستم عاملي قابل نصب و قابل دسترسي مي باشد، اين موضوع يكي از مزاياي صفحات JSP مي تواند باشد. مزيت ديگر JSP اين است كه از زبان برنامه نويسي قويتري به نام جاوا استفاده مي نمايد تا محتويات پوياي مربوط به خود را بسازد. اين به معناست كه صدها كلاس و متد در اختيار شما قرار دارند. ساخت اولين صفحه JSP اكنون زمان آن رسيده است كه محيط كاري خود را راه اندازي كرده و اولين صفحه JSP را اجرا نماييد. نصب سرويس دهنده Apache’s Tomcat قبل از اينكه بتوانيد صفحات JSP را بنويسيد، به محيطي نياز داريد كه صفحات JSP را اجرا نماييد. در اين بخش شما برنامه Apache’s Tomcat را به عنوان سرويس دهنده صفحات JSP ، نصب مي كنيد. Apache’s Stomcat يك سرويس دهنده رايگان وب مي باشد كه درخواستهاي مربوط به اسناد HTML و صفحات JSP و Servelet ها را كنترل مي نمايد. Weblogic Server  را مي توانيد از شبكه دريافت نموده و در يك دوره 30 روزه به بررسي آن بپردازيد. در طي اين 30 روز مي توانيد اجراي صفحات JSP را بر روي سرويس دهنده هاي چند گانه تجربه نماييد و با محبوب ترين سرويس دهنده    برنامه هاي كاربردي – سرويس دهنده BEA – تجربه كسب نماييد. بنابر اين اجازه دهيد كارمان را شروع كنيم: 1-  براي نصب سرويس دهنده Apache’s Tomcat نياز به گرفتن كپي از فايل Jakarta-tomcat.zip داريد.اين كار براي سيستم عامل Windows NT مي باشد و دستورات بعدي مربوط به                        ويندوزهاي ديگر مي باشد. شما مي توانيد اين فايل را از سايت مربوطه دريافت نماييد. به سايت وب Apache’s براي دريافت سرويس دهنده Tomcat برويد: http://jakarta.apache.org/ 2-   در زير كلمه Download ،لينك Binaries را انتخاب نماييد تا عمل دريافت فايل انجام شود. 3-   به پايين صفحه وب Binaries Download بيابيد و يكي از نسخه هاي موجود را انتخاب نماييد. 4-  اكنون شما در فهرست بارگذاريها قرار داريد. فايل Jakarta-tomcat.zip را براي دريافت آن انتخاب نماييد. آن را در دايركتوري موقت بر روي ديسك درايو خود ذخيره نماييد. از اين فايل Zip براي نصب سرويس دهنده Tomcat بر روي سيستم عامل ويندوز استفاده مي شود؛ همچنين فايل هايي نيز براي سيستم عامل هاي ديگر مثل Linux در دسترسي قرار داده شده اند. 5-  فايل مورد نظر را بر روي كامپيوترتان در فهرست C:\tomcat از حالت فشرده (Zip) خارج نماييد. اگر اين دايركتوري وجو ندارد، آن را ايجاد كنيد. پس از خارج كردن فايل ها از حالت فشرده، ساختار دايركتوري شما بايد C:\tomcat و پوشه هاي داخل آن bin ،conf ،doc ،lib ، src ،webapps باشند. 6-  فايل tomcat.bat را ويرايش كنيد و متغير JAVA-HOME را به گونه اي اصلاح كنيد كه به ريشه محل نصب JDK اشاره كند. فايل tomcat.bat در پوشه C:\tomcat\bin قرار دارد. براي مثال، من به JDK به صورت زير اشاره كرده ام:  d:Jdk1.2.2 7-  اكنون زمان اجراي سرويس دهنده Tomcat فرا رسيده است. در اعلان به بخش C:\tomcat\bin برويد. سپس در خط فرمان، دستور Tomcat start را تايپ نماييد. روش ديگر براي اجراي سرويس دهنده Tomcat  اين است كه دستور Startup را تايپ نماييد كه در اين حالت، سرويس دهنده Tomcat  در يك پنجره DOS جديد آغاز به كار مي نمايد. 8-  با مشاهده صفحه خانگي در مرورگرتان مي توانيد بررسي نماييد كه آيا سرويس دهنده Tomcat به صورت صحيح كار مي كند يا خير. 9-  اكنون دانستيد كه سرويس دهنده Tomcat  در حال كار كردن مي باشد، با كليك كردن بر روي JSPEXamples و اجراي يكي از مثالهاي ليست شده از اجراي صحيح صفحات JSP اطمينان حاصل نماييد. نكته: اگر صفحه JSP را به صورت مناسبي مشاهده نكرديد، مطمئن شويد كه JAVA-HOME به ريشه محل نصب JDK به طور صحيح اشاره مي نمايد. 10-اكنون همه چيز را تنظيم كرده ايد. شما سرويس دهنده Apach’s Tomcat را نصب و اجرا كرده ايد و حالا مي توانيد اولين صفحه JSP را بنويسيد. تايپ كدهاي صفحه JSP در داخل يك ويرايشگر متن صفحات JSP را مي توانيد در داخل هر ويرايشگر متني بنويسيد. اگر در حال كار كردن با سيستم عامل ويندوز مي باشيد، مي توانيد از برنامه Notpad استفاده نماييد. اولين صفحه JSP اي كه قصد داريد بنويسيد، سينوس چندين زاويه را محاسبه كرده و نتايج را در داخل يك جدول نمايش مي دهد. ليست زير چنين كاري را براي ما انجام مي دهد. 1:     2:     My First JSP 3:     4:     5:     6:     AngleSine of  Angle 7:     8:     9:     10:   11:   12:   13:   14:     پیاده سازی شرکت سان میکروسیستم مجوز رسمی برای پلت فرم استاندارد جاوا را به مایکروسافت ویندوز, لینوکس، و Solaris. داده‌است. همچنین محیط‌های دیگری برای دیگر پلت فرم‌ها فراهم آورده‌است. علامت تجاری مجوز شرکت سان میکروسیستم طوری بود که با همهٔ پیاده سازی‌ها سازگار باشد. به علت اختلاف قانونی که با ماکروسافت پیدا کرد، زمانی که شرکت سان ادعا کرد که پیاده سازی ماکروسافت از RMI یا JNI پشتیبانی نکرده و ویژگی‌های خاصی را برای خودش اضافه کرده‌است. شرکت سان در سال ۱۹۹۷ پیگیری قانونی کرد و در سال ۲۰۰۱ در توافقی ۲۰ میلیون دلاری برنده شد. در نتیجه کمی بعدماکروسافت جاوا را به ویندوز فرستاد. در نسخهٔ اخیر ویندوز، مرورگر اینترنت نمی‌تواند از جاوا پلت فرم پشتیبانی کند. شرکت سان و دیگران یک سیستم اجرای جاوای رایگان برای آنها و نسخه‌های دیگر ویندوز فراهم آوردند. اداره خودکار حافظه جاوا از حافظهٔ بازیافتی خودکار برای ادارهٔ حافظه در چرخهٔ زندگی یک شی استفاده می‌کند. برنامه‌نویس زمانی که اشیا به وجود می‌آیند، این حافظه را تعیین می‌کند. و در زمان اجرا نیز، زمانی که این اشیا در استفادهٔ زیاد طولانی نباشند، برنامه نویس مسئول بازگرداندن این حافظه‌است. زمانی که مرجعی برای شی‌های باقیمانده نیست، شی‌های غیر قابل دسترس برای آزاد شدن به صورت خودکار توسط بازیافت حافظه، انتخاب می‌شوند. اگر برنامه‌نویس مقداری از حافظه را برای شی‌هایی که زیاد طولانی نیستند، نگه دارد، چیزهایی شبیه سوراخ حافظه اتفاق می‌افتند. یکی از عقایدی که پشت سر مدل ادارهٔ حافظهٔ خودکار جاوا وجود دارد، این است که برنامه‌نویس هزینهٔ اجرای ادارهٔ دستی حافظه را نادیده می‌گیرد. در بعضی از زبان‌ها حافظه لازم برای ایجاد یک شی، به صورت ضمنی و بدون شرط، به پشته تخصیص داده می‌شود. و یا به‌طور صریح اختصاص داده شده و از heap بازگردانده می‌شود. در هر کدام از این راه‌ها، مسئولیت ادارهٔ اقامت حافظه با برنامه‌نویس است. اگر برنامه شی را برنگرداند، سوراخ حافظه اتفاق می‌افتد. اگر برنامه تلاش کند به حافظه‌ای را که هم‌اکنون بازگردانده شده، دستیابی پیدا کند یا برگرداند، نتیجه تعریف شده نیست و ممکن است برنامه بی‌ثبات شده و یا تخریب شود. این ممکن است با استفاده از اشاره‌گر مدتی باقی بماند، اما سرباری و پیچیدگی برنامه زیاد می‌شود. بازیافت حافظه اجازه دارد در هر زمانی اتفاق بیفتد. به‌طوری که این زمانی اتفاق می‌افتد که برنامه بی‌کار باشد. اگر حافظهٔ خالی کافی برای تخصیص شی جدید در heap وجود نداشته باشد، ممکن است برنامه برای چند دقیقه متوقف شود. در جایی که زمان پاسخ یا اجرا مهم باشد، ادارهٔ حافظه و منابع اشیا استفاده می‌شوند. جاوا از نوع اشاره‌گر ریاضی C و ++C پشتیبانی نمی‌کند. در جایی که آدرس اشیا و اعداد صحیح می‌توانند به جای هم استفاده شوند. همانند ++C و بعضی زبان‌های شی‌گرای دیگر، متغیرهای نوع‌های اولیهٔ جاوا شی‌گرا نبودند. مقدار نوع‌های اولیه، مستقیماً در فیلدها ذخیره می‌شوند. در فیلدها (برای اشیا) و در پشته (برای توابع)، بیشتر از heap استفاده می‌شود. این یک تصمیم هوشیارانه توسط طراح جاوا برای اجرا است. به همین دلیل جاوا یک زبان شی‌گرای خالص به حساب نمی‌آید. public class Test{     public static void main(String[] args) {         System.out.println("HelloWorld!");   } } برای اجرای برنامه بالا، ابتدا باید یک فایل به نام Test.java ساخته شود و سپس کامپایل شود: $ javac Test.java سپس یک فایل خروجی به نام Test.class دریافت می‌شود. بعد با استفاده از دستور زیر برنامه قابل اجرا است: $ java Test مثال‌ها برنامه Hello world به این صورت در زبان جاوا می‌تواند نوشته شود:   // HelloWorld.java public class HelloWorld {     public static void main(String[] args) {         System.out.println("Hello, World!");   } } بر طبق قرارداد فایل هل بعد از کلاس‌های عمومی نام گذاری می‌شوند. سپس باید پسوند java را به این صورت اضافه کرد: Hello world.java. این فایل اول باید با استفاده از کامپایلر جاوا به بایت کد کامپایل شود. در نتیجه فایل Hello world.class ایجاد می‌شود. این فایل قابل اجرا است. فایل جاوا ممکن است فقط یک کلاس عمومی داشته باشد. اما می‌تواند شامل چندین کلاس با دستیابی عمومی کمتر باشد. کلاسی که به صورت خصوصی تعریف می‌شود ممکن است در فایل.java ذخیره شود. کامپایلر برای هر کلاسی که در فایل اصلی تعریف می‌شود یک کلاس فایل تولید می‌کند. که نام این کلاس فایل همنام کلاس است با پسوند.class کلمه کلیدی public (عمومی) برای قسمت‌هایی که می‌توانند از کدهای کلاس‌های دیگر صدا زده بشوند، به کار برده می‌شود. کلمهٔ کلیدی static (ایستا) در جلوی یک تابع، یک تابع ایستا را که فقط وابسته به کلاس است و نه قابل استفاده برای نمونه‌هایی از کلاس، نشان می‌دهد. فقط تابع‌های ایستا می‌توانند توسط اشیا بدون مرجع صدا زده شوند. داده‌های ایستا به متغیرهایی که ایستا نیستند، نمی‌توانند دسترسی داشته باشند. کلمهٔ کلیدی void (تهی) نشان می‌دهد که تابع main هیچ مقداری را بر نمی‌گرداند. اگر برنامهٔ جاوا بخواهد با خطا از برنامه خارج شود، باید system.exit() صدا زده شود. کلمهٔ main یک کلمهٔ کلیدی در زبان جاوا نیست. این نام واقعی تابعی است که جاوا برای فرستادن کنترل به برنامه، صدا می‌زند. برنامه جاوا ممکن است شامل چندین کلاس باشد که هر کدام دارای تابع main هستند. تابع main باید آرایه‌ای از اشیا رشته‌ای را بپذیرد. تابع main می‌تواند از آرگومان‌های متغیر به شکل public static void main(string…args) استفاده کند که به تابع main اجازه می‌دهد اعدادی دلخواه از اشیا رشته‌ای را فراخوانی کند. پارامترstring[]args آرایه‌ای از اشیا رشته ایست که شامل تمام آرگومان‌هایی که به کلاس فرستاده می‌شود، است. چاپ کردن، قسمتی از کتابخانهٔ استاندارد جاوا است. کلاس سیستم یک فیلد استاتیک عمومی به نام out تعریف کرده‌است. شی out یک نمونه از کلاس printstream است و شامل تعداد زیادی تابع برای چاپ کردن اطلاعات در خروجی استاندارد است. همچنین شامل println(string) برای اضافه کردن یک خط جدید برای رشتهٔ فرستاده شده اضافه می‌کند. توزیع‌های جاوا [ویرایش]منظور از توزیع جاوا پیاده‌سازی‌های مختلفی است که برای کامپایلر جاوا و همچنین مجموعه کتابخانه‌های استاندارد زبان جاوا (JDK) وجود دارد. در حال حاضر چهار توزیع‌کنندهٔ عمده جاوا وجود دارند: سان میکروسیستمز: توزیع کننده اصلی جاوا و مبدع آن می‌باشد. در اکثر موارد هنگامی که گفته می‌شود جاوا منظور توزیع سان می‌باشد. GNU Classpath: این توزیع از سوی موسسه نرم‌افزارهای آزاد منتشر شده و تقریبا تمامی کتابخانه استاندارد زبان جاوا در آن بدون بهره‌گیری از توزیع شرکت سان از اول پیاده‌سازی شده‌است. یک کامپایلر به نام GNU Compiler for Java نیز برای کامپایل کردن کدهای جاوا توسط این موسسه ایجاد شده‌است. فلسفه انتخاب نام Classpath برای این پروژه رها کردن تکنولوژی جاوا از وابستگی به علامت تجاری جاوا است بطوریکه هیچ وابستگی یا محدودیتی برای استفاده آن از لحاظ قوانین حقوقی ایجاد نشود و از طرفی به خاطر وجود متغیر محیطی classpath در تمامی محیط‌های احرایی برنامه‌های جاوا، این نام به نوعی تکنولوژی جاوا را برای خواننده القا می‌کند. کامپایلر GNU توانایی ایجاد کد اجرایی (در مقابل بایت کد توزیع سان) را داراست. لازم به ذکر است که در حال حاضر شرکت سان تقریبا تمامی کدهای JDK را تحت مجوز نرم‌افزارهای آزاد به صورت متن باز منتشر کرده‌است و قول انتشار قسمت بسیار کوچکی از این مجموعه را که به‌دلیل استفاده از کدهای شرکت‌های ثانویه نتوانسته به صورت متن باز منتشر نماید در آینده نزدیک با بازنویسی این کدها داده‌است. مایکروسافت #J: این در حقیقت یک توزیع جاوا نیست. بلکه زبانی مشابه می‌باشد که توسط مایکروسافت و در چارچوب.net ارائه شده‌است. انتظار اینکه در سیستم‌عاملی غیر از ویندوز هم اجرا شود را نداشته باشید. AspectJ: این نیز یک زبان مجزا نیست. بلکه یک برنامه الحاقی می‌باشد که امکان برنامه نویسی Aspect Oriented را به جاوا می‌افزاید. این برنامه توسط بنیاد برنامه‌نویسی جلوه‌گرا و به صورت کدباز ارائه شده‌است. کلاس‌های خاص برنامک (برنامه‌های کاربردی کوچک) [ویرایش]اپلت جاواها برنامه‌هایی هستند که برای کاربردهایی نظیر نمایش در صفحات وب، ایجاد شده‌اند. واژهٔ import باعث می‌شود کامپایلر جاوا کلاس‌های javaapplet.Applet وjava.awt.Graphics را به کامپایل برنامه اضافه کند. کلاس Hello کلاس Applet را توسعه می‌دهد. کلاس اپلت چارچوبی برای کاربردهای گروهی برای نمایش و کنترل چرخهٔ زندگی اپلت، درست می‌کند. کلاس اپلت یک تابع پنجره‌ای مجرد است که برنامه‌های کوچکی با قابلیت نشان دادن واسط گرافیکی برای کاربر را فراهم می‌کند. کلاس Hello تابع موروثی print(Graphics) را از سوپر کلاس container باطل می‌کند، برای اینکه کدی که اپلت را نمایش می‌دهد، فراهم کند. تابع paint شی‌های گرافیکی را که شامل زمینه‌های گرافیکی هستند را می‌فرستد تا برای نمایش اپلت‌ها استفاده شوند. تابع paint برای نمایش "Hello world!" تابع drawstring(string,int,int) را صدا می‌زند. جاوا سرولت [ویرایش]تکنولوژی servlet جاوا گسترس وب را به آسانی فراهم می‌کند. و شامل مکانیزم‌هایی برای توسعهٔ تابعی سرور وب و برایدسترسی به سیستم‌های تجاری موجود است.servlet قسمتی از javaEE است که به درخواست‌های مشتری پاسخ می‌دهد. // Hello.java import java.io. *; import javax.servlet. *;  public class Hello extends GenericServlet {     public void service(ServletRequest request, ServletResponse response)             throws ServletException, IOException {         response.setContentType("text/html");         final PrintWriter pw = response.getWriter();         pw.println("Hello, world!");         pw.close();   } } واژهٔ import کامپایلر جاوا را هدایت می‌کند که تمام کلاس‌های عمومی و واسط‌ها را از بسته‌های java.io وjava.servlet را در کامپایل وارد کند. کلاس Hello کلاس Genericservlet را توسعه می‌دهد. کلاس Genericservlet واسطی برای سرور فراهم می‌کند تا درخواست را به servlet بفرستد و چرخهٔ زندگی servlet را کنترل کند. JSP صفحهٔ سرور جاوا قسمتی از سرور javaEE است که پاسخ تولید می‌کند. نوعاَ صفحات HTML به درخواست‌های HTTP از مشتری.JSPها کد جاوا در صفحهٔ HTML را با استفاده از حائل اضافه می‌کنند.JSP به javaservlet کامپایل می‌شود. سوینگ [ویرایش]Swing کتابخانهٔ واسط گرافیکی کاربر است برای پلت فرم javaSE. ابزاری مشابه پنجره، GTK و motif توسط شرکت sun فراهم شده‌اند. این مثال کاربرد swing یک پنجرهٔ واحد همراه با Hello world را ایجاد می‌کند. // Hello.java (Java SE 5) import java.awt.BorderLayout; import javax.swing. *;  public class Hello extends JFrame {     public Hello() {         super("hello");         setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);         setLayout(new BorderLayout());         add(new JLabel("Hello, world!"));         pack();   }      public static void main(String[] args) {         new Hello().setVisible(true);   } } اولین جملهٔ import کامپایلر جاوا را هدایت می‌کندتا کلاس Borderlayout را از بستهٔ java.awt در جاوا به کامپایل اضافه کند. و import دوم همهٔ کلاس‌های عمومی و واسط آن‌ها را از بستهٔ javax.swing اضافه می‌کند. کلاس Hello کلاس Jframe را توسعه می‌دهد. کلاس Jframe یک پنجره با میلهٔ عنوان و کنترل بستن است. زمانی که برنامه آغاز می‌شود، تابع main با JVM صدا زده می‌شود. این یک نمونهٔ جدید از کلاس Hello را ایجاد کرده و با صدا زدن تابع setvisible(boolean) با مقدار true نمایش داده می‌شود.   Generics قبل از کلاس‌های عمومی برای هر متغیر باید یک نوع خاص تعریف می‌کردیم. به عنوان مثال برای کلاس‌های ظرف این امر مشکل بود زیرا را آسانی برای ایجاد یک container وجود نداشت که نوع‌های خاصی از اشیا را بپذیرد. کلاس‌های عمومی اجازه می‌دهند نوع زمان کامپایل، بدون نیاز به ایجاد تعداد زیادی از container، چک شود. همه آنها کدهای مشابهی دارند. کتابخانه‌های کلاس کتابخانه‌های جاوا که به صورت بایت کد از کد اصلی کامپایل شده‌اند، برای پشتیبانی از بعضی از کاربردهای جاوا، توسطJRE منتشر شده‌است. مثال‌هایی از این کتابخانه‌ها عبارتند از: کتابخانه‌های مرکزی که شامل: کتابخانه‌هایی که برای ساختار داده کاربرد دارند. مثل لیست‌ها، درخت‌ها، مجموعه‌ها، مترجم‌ها. کتابخانهٔ پرداز XML (تجزیه، تغییر شکل، اعتبار) کتابخانه‌های موضعی و بین‌المللی کتابخانه‌های انتگرال گیری که امکان تایپ کردن توسط سیستم‌های بیرونی را می‌دهند. JDBC برای دستیابی به داده‌ها JNDI برای مراجعه و کشف کردن CORBA & RMI برای توسعهٔ کاربرد توزیع کردن کتابخانه‌های واسط کاربر AWT (توابع پنجره‌ای مجرد)که قسمت‌هایی از GUI را فراهم می‌کنند. کتابخانه‌های swing که در AWT ساخته شده‌اند اما کاربردهایی از AWT widgetry را فراهم می‌کنند. APLها برای ضبط صدا، پردازش و بازنواختی کاربردهای وابستهٔ پلت فرم ماشین‌های مجازی جاوا Plugins که توانایی اجرا شدن در مرورگرهای وب را به اپلت می‌دهد. java web start دادن مجوز و مستند سازی شرکت سان میکروسیستم، ۴ نوع ویرایش از کاربردهای مختلف جاوا را ارائه داده‌است: 1.Java card for smartcard 2.JavaME 3.JavaSE 4.JavaEE در این قسمت دو تگ forward و include را بررسی میکنیم. تگ include: گاهی اوقات برخی از قسمتها یا برخی محتویات در چند صفحه تکرار میشود. مثلا نام شرکت در ابتدا یا انتهای صفحات. یک پروژه جدید ایجاد کنید و در پنجره projects روی گزینه Web Pages راست کلیک کرده و new و سپس jsp را کلیک کنید حال کلمه top را برای نام آن انتخاب کرده و finish را کلیک کنید. همین کار را دوباره تکرار کرده و نام bottom را انتخاب کنید. فایل top.jsp را باز کرده و تمام محتویات آن را پاک کرده و این کد را درون آن بنویسید: [sourcecode language="text"]In The Name Of GOD [/sourcecode] حال فایل bottom را باز کرده و در آن نیز کد زیر را جایگزین کدهای موجود کنید: [sourcecode language="text"] my Company Name copyright 2010 [/sourcecode] سپس در فایل index.jsp درون تگ body از آنها استفاده میکنیم: [sourcecode language="text"]With the JavaTM Platform, Enterprise Edition (Java EE), development of Java enterpriseapplications has never been easier or faster. The aim of the Java EE 5 platform is to providedevelopers a powerful set of APIs while reducing development time, reducing applicationcomplexity, and improving application performance. [/sourcecode] همانطور که مشاهده میکنید صفحه ما حاوی یک متن کوتاه است اما مایل هستیم که سر عنوان صفحه از یک متن دلخواه و همچنین انتهای صفحه نیز از یک متن دلخواه استفاده کنیم که در این شرایط یکی از راههایی که میتوان استفاده کرد, استفاده از تگ include میباشد. در این صورت هر تعداد صفحه که در آن از این امکان استفاده شده را با تغییر دادن فایلهای top و bottom میتوان تغییر داد. نتیجه کار چنین است: تگ forward: فرض کنید شخصی در سایت شما قصد دسترسی به صفحه ای را دارد ولی هنوز لاگین نکرده, یا شما در حال تغییر سایت هستید و در این زمان هرکس که به سایت شما مراجعه میکند او را به صفحه ای هدایت میکنید که این شرایط را توضیح میدهد, یا به هر دلیل دیگری شما تصمیم گرفته اید او را به صفحه ای دلخواه هدایت کنید در این صورت این تگ مفید واقع میشود: یک پروژه جدید ایجاد کرده و یک صفحه به آن اضافه کنید و درون تگ body آن این کد را اضافه کنید: [sourcecode language="text"]Please be patient – This Page is Under Construction! [/sourcecode] حال فایل index.jsp را باز کرده و این تگ را درون تگ body آن قرار دهید: [sourcecode language="text"][/sourcecode] در این صورت هر کس که قصد دسترسی به صفحه اصلی سایت را داشته باشد به صفحه wait.jsp هدایت میشود و این درحالی است که آدرس در مرورگر تغییری نمیکند! ایرادات مطرح شده مهم‌ترین ایرادی که برنامه نویسان سایر زبان‌ها به زبان جاوا می‌گیرند سرعت اجرایی پایین[نیازمند منبع] جاوا در مقایسه با زبان‌ها سطح پایین‌تر مانند ++C و اسمبلی است. یک برنامه جاوا به صورت بایت کد می‌باشد و باید در ماشین مجازی جاوا اجرا گردد. به همین دلیل سرعت اجرای پایینی را در مقابل زبان‌هایی همچون ++C دارد. به صورت دیگر یک برنامه C به طور متوسط تا ۱۰ برابر سریعتر از برنامه مشابه جاوا اجرا می‌گردد. جاوا علی رغم شیءگرا بودن در بخشی از قسمت‌ها برخی از اصول شی‌گرایی را نادیده گرفته‌است[نیازمند منبع]. از جمله این قسمت‌ها قابلیت بازتابش Reflection می‌باشد. هدف اصلی بازتابش بررسی (مشاهده) و ایجاد تغییر در برنامه در حال اجرا است ولی این مهم با زیر پا گذاشتن بعضی اصول ممکن شده‌است. برای نمونه با استفاده از بازتابش (و در صورت داشتن مجوز لازم ضمن اجرای برنامه) می‌توان به متدهای خصوصی دیگر کلاس‌ها دسترسی داشت. زبان جاوا در مقابل زبانی مثل ++C ساده تر و یادگیری آن آسانتر است. این آسانتر بودن با حذف بسیاری[نیازمند منبع] از موارد که باعث قدرتمندتر بودن زبان ++C بوده‌اند ایجاد شده‌است. مهم‌ترین این موارد اشاره گرها و وراثت چندگانه بوده‌اند که در زبان جاوا یافت نمی‌شوند. از آنجایی که جاوا زبانی با عدم وابستگی به بستر می‌باشد پس استفاده از توابع سیستم‌عامل در برنامه را به طور مستقیم نمی‌پذیرد. به همین صورت نمی‌توان به طور مستقیم از واسط‌های برنامه نویسی غیر از جاوا در آن استفاده نمود. پاسخ به ایرادات سرعت پایین برنامه‌های جاوا در محیطی که اجرا می‌شوند ملاک کارایی نبوده زیرا در محیط وب مسئله‌ای که سرعت را کند می‌سازد، شبکه بوده و ابتدا باید سربار شبکه را از روی برنامه‌ها برداشت. از طرف دیگر در برنامه‌های رومیزی هم در JDK 5.0 و ۶٫۰، بهینه سازی بسیاری بوجود آمده که این مسئله باعث شده که در آخرین تست کارایی که انجام شده یک برنامه جاوا در محدودهٔ ۰٫۸ تا ۱٫۳ همان برنامه در ++C کارایی داشته باشد که ۱٫۳ آن مربوط به بخش واسط کاربری و سرعت ۰٫۸ آن مربوط به بسته تخلیه حافظه می‌شده که هیج الگوریتمی نتوانست از الگوریتم Garbage Collector جاوا پیشی بگیرد. همچنین سال ۱۹۹۹ در مقاله‌ای آقای Lutz Prechelt به این مسئله را ثابت کردند که تجربه برنامه‌نویسی که برنامه‌ای را می‌نویسد از انتخاب زبانی که برنامه برروی آن نوشته می‌شود در کارایی تأثیر بیشتری دارد و این بدان معناست که کارایی یک برنامه را برنامه‌نویس مشخص می‌کند و نه زبان برنامه‌نویسی(ایشان در همان مقاله از زبان جاوا استفاده نمودند تا ذهنیت بد را از بین ببرند همچنین در صنعت نرم‌افزار هزینه اصلی مربوط به ساخت نرم‌افزار است و نه تهیه سخت‌افزار برای دستیابی به سرعت بیشتر. حذف اشاره‌گرها در جاوا به دلیل مشکلاتی بوده که آنها در طول تاریخشان بوجود آورده‌اند، اگرچه این موارد در برنامه‌های سیستمی لازم به‌نظر می‌رسد ولی در محیط‌های تحت‌وب که بستر اصلی جاوا هستند می‌توانند اثراتی به مراتب شدیدتر نسبت به آنچه در برنامه‌های سیستمی دارند داشته باشند و باعث می‌شود که توجه برنامه‌نویسان از مسائلی چون کارایی، قابلیت اطمینان و مقیاس‌پذیری برنامه به تنظیم اشاره‌گرها معطوف گردد. وجود وراثت چندگانه در زبانی مانند ++C، باعث ایجاد مشکلات اساسی‌ای می‌گردید که اکثر برنامه‌نویسان ++C از آن دوری می‌کرده و هنوز هم می‌کنند. ولی قابلیت چندریخته شدن یک کلاس از لحاظ شی گرایی بسیار مهم بوده و بنابراین توجیهی برای وجود وراثت چندگانه را فراهم می‌نمود. در جاوا با وارد شدن مفهومی به نام واسط برنامه‌سازی (Interface)، دیگر نیازی به وجود وراثت چندگانه احساس نشد و بنابراین از زبان جاوا حذف گردید. در حال حاضر اکثر طراحان برنامه‌ها حتی به این نتیجه رسیده‌اند که وراثت تکی هم باعث ایجاد مشکل بوده و تا آنجایی که می‌شود باید از Composition استفاده نمود و در تمامی کتاب‌های طراحی که از سال ۲۰۰۰ به این طرف چاپ شده به آن اشاره نموده‌اند. از ابتدای بوجود آمدن جاوا، کتابخانه JNI - Java Native Interface در آن وجود داشته که قابلیت فراخوانی و دستکاری برنامه‌هایی در ++C و... را می‌داده که از نمونه‌های آن می‌توان به Jtwain که یک بسته‌ایست که از کتابخانه‌های ویندوز برای اسکن عکس استفاده می‌کند، یا SWT که یک بسته نرم‌افزاریست که از کتابخانه‌های ویندوز و لینوکس (برحسب سیستم‌عامل) برای ساخت واسط کاربری (UI) استفاده می‌کند، نام برد. بسیاری از موارد یاد شده به عنوان ایرادات به جاوا به عنوان ایرادات به طراحی زبان‌های سطح بالا هستند و نه جاوا. یک اشتباه متداول برخی مردم به علت شباهت اسمی، جاوا و جاوااسکریپت را با هم اشتباه می‌گیرند. در حالیکه این دو زبان گرچه در ظاهر و کلمات شبیهند ولی بطور ساختاری با یکدیگر متفاوتند. جاوا اسکریپت محصول شرکت نت اسکیپ است. جاوا برای اجرا باید به زبان ماشین مجازی ترجمه شود اما جاوااسکریپت زبانی است که معمولا در صفحات وب نوشته می‌شود و توسط مرورگر تفسیر می‌گردد. در جاوا متغیرها همگی بر اساس نوعشان معرفی می‌شوند اما در جاواسکریپت نوع متغیرها به صورت ضمنی مشخص می‌شود[۴[ پانویس 1.↑ Jonathan Schwartz's Blog: Different Isn't Always Better, But Better's Always Different 2.↑ The Java Language Environment 3.↑ Core Java™ 2 Volume I - Fundamentals, Seventh Edition ISBN 0-13-148202-5 - Chapter 1 4.↑ Krill, ‎Paul. 2008-06-23.  Retrieved on 2009-05-19. Sun MicroSystems Documentation on JDK 1.5 Deitel & Deitel , Java How to Program, 6th Ed. Prentice Hall, 2005 Bruce Eckel, Thinking in Java, 3rd Edition, www.BruceEckel.com Fowler, Martin. Patterns of Enterprise Application Architecture http://forum.joomfa.org/viewtopic.php?f=10&t=24962&start=0&&view=print http://www.digilife.be/quickreferences/QRC/JSP%20Syntax.pdf   دریافت کامل همراه با تصاویر در فایل ورد ۲۰۱۰