قواعد و دستورات کد نویسی JSP
در سری مقالات آموزش Java Enterprise, قصد داریم تا قواعد مورد نیاز برای نوشتن JSP ها را بررسی کنیم.
برای درک کافی نسبت به JSP نیاز است تا با مفاهیم اولیه آن آشنایی داشته باشید. میتوانید برای مطالعه این مفاهیم به اینجا مراجعه کنید. در JSP میتوان به صورت Scripting کد های جاوا را مورد استفاده قرار داد. سه روش برای Scripting وجود دارد :
- scriptlet
- expression
- declaration
از scriptlet ها برای اجرای کد های جاوا استفاده میشود.ساختار scriptlet به این صورت است :
<% Code %>
برای مثال برای نمایش یک مقدار در خروجی میتوان از این دستور استفاده کرد :
<% out.println("Hello Zero to Hero"); %>
از expression ها برای نمایش یک مقدار در خروجی استفاده میشود. در حقیقت برای قراردادن output stream در Response بکار میرود. وقتی expression استفاده میکنید دیگر به out.println نیاز ندارید. ساختار expression به این صورت است :
<%= code %>
برای مثال برای نمایش تاریخ در خروجی میتوان از این دستور استفاده کرد :
<%= new Date() %>
ازdeclaration ها برای تعریف متغیر ها و متدها استفاده میشود. کد های نوشته شده در declaration ها در خارج متد service در servlet متناظر با JSP ایجاد میگردد. به این ترتیب در هر request فضای حافظه جدیدی را اشغال نمیکند. این تفاوت بین scriptlet وdeclaration است. همچنین در scriptlet تنها قادر به تعریف متغیر ها هستیم اما در declaration هم متغیر و هم متد میتواند تعریف شود. ساختار declaration به این صورت است :
<%! Code %>
برای مثال یک متد را به این صورت میتوان در JSP تعریف کرد :
<%! public String getUsername() { return "vhdrjb"; } %>
مبحث بعدی که باید به آن بپردازیم Directive هستند. Directive ها بر تمام Servlet منتاظر با JSP تأثیر میگذارند. در حقیقت با استفاده از Directive ها مشخص میشود که Container چگونه JSP فعلی را باید مورد پردازش قرار دهد. Directive ها میتوانند به تعداد نامحدودی attributes داشته باشند. سه نوع Directive داریم :
- page
- include
- taglib
و ساختار Directive ها به این صورت است :
<%@ directive attr="value for jsp" %>
با استفاده از page یکسری ساختار های مرتبط به JSP فعلی را برای Container مشخص میکند. میتوان Page Directive را در هر مکانی از صفحه تعریف کرد ولی بیشتر آنرا در بالای صفحه تعریف میکنند. همچنین میتوان به تعداد دلخواه page directive ایجاد کرد. وقتی یک صفحه JSP را در IntelliJ تولید میکنید به صورت پیش فرض یک Page Directive در آن وجود دار :
<%@ page contentType="text/html;charset=UTF-8" language="java" info="zero to hero jsp" %>
attribute هایی که در page directive وجود دارند :
- import : برای افزودن یک کلاس به jsp
- content Type : مانند setContentType در Servlet ها است و ساختار خروجی را مشخص میکند
- info : میتوان یکسری توضیحات را در صفحه فعلی قرار داد متناظر با متد getServletInfo است
- buffer : مشخص کننده مقدار buffer خروجی است و برحسب kB است
- language : زبان نوشتن را مشخص میکند که java است
- isThreadSafe : همانطور که در تعاریف قبلی گفته شد یکی از ویژگی های مثبت این تکنولوژی استفاده از multi thread است. این مقدار به صورت پیشفرض برابر با true است. وقتی این مقدار false شود, Container درخواست ها را Serialize میکند. به این ترتیب تا وقتی یک درخواست به پایان نرسیده است و response آن ارسال نشده است, درخواست بعدی را ارسال نمیکند
- errorPage : آدرس صفحه ای را مشخص میکنید تا در صورت بروز مشکلی به این صفحه هدایت شود
- isErrorPage : مشخص میکند که آیا صفحه فعلی یک Error page است یا خیر
با استفاده از include directive میتوان محتوای صفحات دیگر ( با هر فرمتی ) را به صفحه فعلی وارد کرد. عمل وارد کردن در مرحله ترجمه صفحه فعلی انجام میشود. ساختار include directive به این صورت است :
<%@ include file="zerotohero.html" %>
با استفاده از taglib directive میتوان یک tag را تعریف کرد که در خود تعداد زیادی tag را شامل میشود. با استفاده از (TLD) Tag Library Descriptor میتوان tag ها را تعریف کرد.
<%@ taglib uri="tag_lib_uri" prefix="zeroToHeroTag" %>
وقتی یک prefix را مشخص میکنید میتوانید به دسته های tag با استفاده از این prefix دسترسی پیدا کنید :
<%@ taglib uri="https://www.zerotohero.ir/tags" prefix="jsptag" %> <jsptag:getDate/>
در مقاله های بعدی پیرامون TLD ها بیشتر صحبت خواهیم کرد.
یکسری از object ها در JSP تعریف شده اند و نیاز نیست تا تعریف شوند. این object ها توسط Container ایجاد میشوند و قابل استفاده هستند. object ها به این شرح میباشند :
- request : از نوع کلاس HttpServletRequest است. از این object میتوان اطلاعات request ارسال شده, مانند نوع متد ارسالی و اطلاعات توسط HTTP را دریافت کرد
- response : از نوع کلاس HttpServletResponse است. با استفاده از این object میتوان به client نتیجه و response را ارسال کرد
- out : از نوع کلاس JspWriter است و برای قرار دادن مقدار در response است. شامل متد های print, println و flush است
- session : از نوع کلاس HttpSession است و مانند Session ها در Servlet رفتار میکند
- application : از نوع ServletContext است و میتواند به پارامتر هایی که در زمان تعریف مشخص شده اند دسترسی پیدا کند
- config : از نوع کلاس ServletConfig است و مانند application به پارامتر ها میتواند دسترسی پیدا کند
- pageContext :از نوع کلاس PageContext است. با استفاده از این object میتوان attribute هایی را اضافه, دریافت و یا حذف کرد
- page : به صفحه فعلی اشاره دارد و مانند کلمه کلیدی this عمل میکند
- exception : در Error Page استفاده میشود و خطای رخ داده در صفحه قبل را مشخص میکند
یکی از ویژگی هایی که در کد نویسی JSP میتواند بسیار کاربردی باشد بلوک بندی در دستور های تکرار و شرطی است. با استفاده از این ویژگی میتوان از کد های html نیز در حلقه های تکرار و یا بلوک های شرط استفاده کرد :
<% int index = 0; while (index < 10) { if (index % 2 == 0) { int header = 1; %> <h<%=header%>> <%=index%> </h<%=header%>> <% } else { int header = 2; %> <h<%=header%>> <%=index%> </h<%=header%>> <%} index++; } %>
و خروجی آن به این صورت است :
<html> <head> <title>First JSP</title> </head> <body> <h1> 0 </h1> <h2> 1 </h2> <h1> 2 </h1> <h2> 3 </h2> <h1> 4 </h1> <h2> 5 </h2> <h1> 6 </h1> <h2> 7 </h2> <h1> 8 </h1> <h2> 9 </h2> </body> </html>
در این مقاله سعی بر این شد تا قواعد و دستورات مورد نیاز برای نوشتن صفحات JSP را بررسی کنیم. در مقاله بعدی با استفاده از این مفاهیم و یک فرم login را طراحی میکنیم.
سری مقالات آموزش Java Enterprise همچنان ادامه دارد.
با ما همراه باشید.
مطالب زیر را حتما مطالعه کنید
از Java به Dart – کلاس و Constructor
آموزش Gradle – اهمیت Project Automation
تفاوت Sequence و List در کاتلین
بهترین محیط های توسعه(IDE) برای جاوا
Open/Closed Principle در قوانین Solid
توابع در زبان برنامه نویسی Kotlin
2 Comments
Join the discussion and tell us your opinion.
دیدگاهتان را بنویسید لغو پاسخ
برای نوشتن دیدگاه باید وارد بشوید.
salam
mamnon babat maghalaton
سلام. ممنون از همراهیتون