« May 2007 | صفحه اصلی | July 2007 »

Static & Dynamic include

June 26, 2007 06:10 PM

Static include  <%@ include %>

در فاز compile همه صفحات jsp كه include شده اند، همه در يك servlet قرار مي گيرند. اين نوع include، در زمان اجرا، overhead ندارد

Dynamic include   <%jsp:include …>

JSP كه بصورت دايناميك include شده در يك servlet جداگانه compile مي شود. همچنين overhead هم دارد.

براي صفحات jsp كه زياد تغيير نمي كنند، استفاده از static include توصيه مي شود. در صورتيكه اگر تغييرات روي jsp زياد است. روش دايناميك مناسب تر است. ضمنا به دليل اينكه JVM در حجم فايل ها و صفحات jsp كه با آنها كار مي كند محدوديت دارد (حداكثر 64 KB)، گاهي ناچاريم كه با استفاده از dynamic include چندين servlet ايجاد كنيم.

در ادامه مطالب وبلاگ مثال هايي از JSP و Servlet خواهيم ديد.

mahyar_ev | 06:10 PM | Comment(s)(0)

JSP

هرچند كه servlet با دستور out.println امكان ايجاد صفحات دايناميك را دارد.اما اين نحوه نگارش برنامه و ساختار صفحات ، پيچيده و نگهداري و توسعه آن ، مشكل است. لذا تكنولوژي JSP يا Java ServerPages براي حل اين مشكل و سهولت بخشيدن به ايجاد صفحات HTML پويا پديد آمده است.
دو نوع دستور در صفحات JSP وجود دارند :

. بخش static مثل HTML و CSS كه عينا در پاسخ توليد شده توسط JSP Engine كپي مي شوند.

. بخش dynamic كه توسط JSP Engine ترجمه و بعد، كپي مي شوند. اجزاء دايناميك، خود سه دسته اند:
1- Scripting Elements: امكان درج كدهاي جاوا را بصورت embedded فراهم مي كند و سه نوع است:

Declaration:
مثال        <%! Calendar c = Calendar.getInstance(); %>


Expression:
مثال        <%= new Date()>


Scriptlet:
مثال  
            <%
            //Java codes
            String userName = null;
            userName = request.getParameter("username");
            %>

2- Action Elements: اطلاعاتي را جهت فاز اجرا (execution) فراهم مي كند.
مثال

<jsp:useBean id="object name" class="class name"/>
<jsp:include page="scripts/login.jsp" />

3- Directive Elements: اطلاعات global را براي فاز ترجمه (translation) فراهم مي كند.
مثال


<%@ page import="java.util.Date" %>
<%@ include file="myJSP" %>
<%@ taglib uri="tagliburi" prefix="myTag"%>

mahyar_ev | 05:56 PM | Comment(s)(0)

Servlet API

June 24, 2007 02:11 PM

يك Subclass از كلاس HttpServlet است كه در پكيج *.Javax.servlet تعريف شده است.

Servlet به همراه JSP، راه حل جاوا براي ايجاد محتواي پويا يا dynamic در وب است.
حداقل يكي از متدهاي زير از HttpServlet بايد در SubClass هاي آن Override شود:
doGet : براي درخواست هاي HTTP GET
doPost : براي درخواست هاي HTTP POST
doPut : براي درخواست هاي HTTP PUT
doDelete : براي درخواست هاي HTTP DELETE
Init و Destroy : براي مديريت منابع مرتبط با servlet
getServletInfo : براي دستيابي به اطلاعات servlet

مثال:

import java.io.*;
import java.text.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorldExample extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws IOException, ServletException
        {
                 response.setContentType("text/html");
                 PrintWriter out = response.getWriter();
                 out.println("<html>");
                 out.println("<head>");
                 out.println("<title>Hello World!</title>");
                 out.println("</head>");
                 out.println("<body>");
                 out.println("<h1>Hello World!</h1>");
                 out.println("</body>");
                 out.println("</html>");
        }
}


نحوه فراخواني يك servlet از يك صفحه HTML:

<a href="servlet/ HelloWorldExample">Execute Servlet</a>

توسط توابع پارامتر request مي توان به اطلاعات request ارسال شده دست يافت و از آن استفاده نمود. از جمله

request.getMethod()
request.getRequestURI()
request.getProtocol()
request.getRemoteAddr()
request.getParameter("ParamName"); // براي گرفتن مقدار پارامتر ارسال شده درخواست

mahyar_ev | 02:11 PM | Comment(s)(0)

MVC

June 23, 2007 10:42 AM

MVC يك Design Pattern است.

Design Pattern چيست و چرا از Design Pattern در جاوا استفاده مي كنيم؟
Design Pattern ها الگو ها و روش هاي اثبات شده اي هستند كه هنگام طراحي معماري Application بايد مورد توجه قرار گيرند. Design Patternها نشانگر تجربه و دانش طراحاني هستند كه از آن ها با موفقيت استفاده كرده اند. استفاده از اين Design Pattern ها به شما امكان استفاده از تجربيات ايشان را در جهت مقاصدتان مي دهد. ضمنا استفاده از آنها ، زبان و قالب مشتركي را بين طراحان نرم افزار فراهم مي سازد.
Design Pattern هاي مختلفي وجود دارد كه يكي از مهمترين آنها MVC است.

MVC چيست؟
كاربران ممكن است از طريق Browser با فرمت HTML يا Wireless Device با فرمت WML يا Web Service با فرمت XML و غيره به سرور، درخواست بفرستند. معماري MVC براي پاسخگويي به اين نياز ، يعني فراهم آوردن امكان سرويس دهي به انواع كاربران با interface هاي گوناگون ، پديد آمده است.
MVC يكي از معماري هاي مهم در JavaEE است و به Model-View-Controller architecture اشاره دارد. اين معماري عمليات نمايش و مديريت داده ها را به سه قسمت تقسيم مي نمايد.
Model :وظيفه ارتباط با منابع اطلاعاتي (Database ها و غيره) را به عهده دارد. همچنين Business Logic در اين قسمت پياده سازي مي شود.
View : خروجي را با فرمت مناسب توليد مي كند.
Controller : بعنوان واسط و هماهنگ كننده Model و View عمل مي كند.

mvc3.JPG

نحوه ارتباط بين اين اجزا را از هنگام دريافت يك request تا صدور response در شكل زير ملاحظه مي نماييد.

MVC.JPG

در سيستم هاي web based از JSP در View، از Servlet در Controller و از Enterprise JavaBeans يا EJB در Model استفاده مي شود.

mahyar_ev | 10:42 AM | Comment(s)(0)

ساختار JavaEE

June 16, 2007 03:03 PM

Web Server & Application Server

Web Server وظيفه دريافت درخواست و پاسخگويي به درخواست client را به عهده دارد. Web Server درصورت نياز و جهت تهيه پاسخ dynamic ، درخواست را به برنامه هاي ديگري از جمله Servlet و JSP كه در Application Server قرار دارند، ارسال مي نمايد. Web Server الزما بايد از پروتوكل HTTP حمايت نمايد.
اما در Application Server، نحوه توليد محتواي Dynamic و Business Logic پياده مي شود. همچنين Web Container, Servlet container و EJB container در Application Server قرار مي گيرند.

جزييات ساختار و لايه هاي فيزيكي JavaEE را در تصوير زير مي توانيد مشاهده نماييد:

JavaEE_Structure_small.JPG

تصوير بزرگ تر

mahyar_ev | 03:03 PM | Comment(s)(0)

JavaEE

June 11, 2007 12:14 PM

JavaEE يا Java Enterprise Edition كه قبلا J2EE ناميده مي شد، پلتفرم ارائه شده توسط Sun براي ايجاد Enterprise Application ها است. JavaEE شامل مجموعه اي از Component ها، Service ها، API ها، پروتوكل ها و استانداردهايي است كه امكان ايجاد application هاي تحت وب توزيع شده و multi-tiered را فراهم مي كند. JavaEE نسبت به JavaSE ياJave Standard Edition ،چند چيز اضافه دارد كه مهمترين آنها عبارتند از:
1- Enterprise JavaBeans Components
2-Servlet API
3- JSP
4- XML

لايه هاي فيزيكي JavaEE يا JavaEE Physical Tiers شامل
1- لايه كاربر - Client Tier
2- لايه مياني - Application Tier يا Middle Tier
3- لايه داده ها – Data (EIS) Tier

PhysicalTieres.JPG

mahyar_ev | 12:14 PM | Comment(s)(0)

گستردگي جاوا

شايد شما هم جزو كساني باشيد كه از گستردگي و پراكندگي ‌اصطلاحات و تكنولوژي هايي كه در رابطه با جاوا به گوش مي رسد گيج شده باشيد.

J2EE, J2ME, JSP, JAVASCRIPT, SERVLET, JDBC, JNDI, STRUTS, JMS, HIBERNATE, EJB

نظر من اين است كه اين اسامي و اصطلاحات آنقدر كه به نظر مي رسند ترسناك و پيچيده نيستند. برخي از موارد بالا از جمله J2EE كه البته نام آن به JAVA EE تغيير كرده است تنها مجموعه اي از قواعد و استاندارد ها و البته ابزار است. برخي ديگر نيز مانند SERVLET تنها يك يا چند كلاس جاوا هستند. اين موارد را مي توان شناخت و در موارد لزوم به كارشان گرفت. به نظر من همين كه سينتكس جاوا را خوب بدانيد و نظم حاكم بر آن را بشناسيد مي توانيد ادعا كنيد كه جاوا بلديد. باقي آن مي شود شناخت كلاس ها و API هاي گوناگون جاوا .
در ادامه بحث، JAVA EE به عنوان يكي از مهمترين و پركاربردترين موضوعات جاوا معرفي مي شود و استانداردها و ابزار مورد استفاده آن تا حد ممكن مورد بررسي قرار مي گيرند.

mahyar_ev | 11:35 AM | Comment(s)(0)

اجراي يك برنامه ساده

June 6, 2007 11:56 AM

کد زیر را در یک فایل به نام HelloWorld.java بنویسید و مثلا در فولدری به نام "c:\test" ذخیره نمایید.


   public class HelloWorld {
     public static void main(String args[]) {
       System.out.println("Hello World!");
     }
   }


این یک برنامه ساده قابل اجرا در جاوا است. روش اجرای این برنامه در جاوا بصورت کلاسیک بدین صورت است که ابتدا توسط دستور javac که در فولدر bin از فولدر اصلی جاوا واقع شده، با دستور زیر، Class مربوطه را create می کنیم.


javac c:\test\HelloWindows.java


با اجرای این دستور مشاهده می کنیم که فایلی با نان HelloWorld.class در فولدر مربوطه ایجاد می شود.
سپس با استفاده از دستور java از همان فولدر bin می توان برنامه را اجرا نمود. نتیجه اجرای برنامه نمایش عبارت "!Hello World" روی صفحه است.


java -classpath c:\test HelloWorld


دستورات فوق در command prompt اجرا می شوند.

تست برنامه های جاوا در IDE ها ساده تر است، زیرا خود آنها ابزار لازم را برای اجرا و تست در اختیار می گذارند. بدون آنکه لازم باشد درگیر جزئیات دستورات اجرایی جاوا شوید.
البته نباید فراموش کرد که بطور کلی deploy کردن برنامه های جاوا در عمل کاری پیچیده است و نیازمند دقت است.
برای کسب اطلاعات بیشتر بهترین منبع help جاوا است که احتمالا آن را در فولدر Doc موجود در فولدر اصلی برنامه جاوا خواهید یافت.

mahyar_ev | 11:56 AM | Comment(s)(1)

Class Loading

June 3, 2007 11:44 AM

درجاوا اولين class با متد ()static main فراخواني مي شود. بقيه class ها توسط class هايي كه هم اكنون load شده و در حال اجرا هستند، فراخواني مي شوند.
تفاوت Static Class Loading و Dynamic Class Loading:
Static Class Loading با دستور new انجام مي شود

Car C = new Car();

اگر class پيدا نشود، خطاي NoClassDefFoundException رخ مي دهد.

Dynamic Class Loading با دستور forName انجام مي شود

Class.forName(String className);

دستور فوق، يك class بر مي گرداند و اگر يافت نشود خطاي ClassNotFoundException مي دهد.

mahyar_ev | 11:44 AM | Comment(s)(0)

تفاوت abstract class و interface

June 2, 2007 10:43 AM

public abstract class Account{
public interface Account{


هنگامي كه كلاسي بعنوان abstract class تعريف مي شود،‌ اين امكان كه مستقيما نمونه اي از آن كلاس ايجاد شود، گرفته مي شود. از اين جهت شبيه interface است اما اين دو تفاوت هاي مهمي دارند:
1-abstract class هم داراي متدهاي قابل اجرا است (امكان پياده سازي بدنه متد وجود دارد) و هم متدهاي abstract، درحاليكه در interface امكان تعريف بدنه متد وجود ندارد.
2-هر subclass تنها از يك abstract class مي تواند گرفته شود. اما يك كلاس مي تواند چندين interface را implement نمايد.
3-abstract class مي تواند شامل متغير، متد، construction و انواع modifier هاي public,private, proected و none باشد. در حاليكه interface نمي تواند شامل موارد ذكر شده باشد.

mahyar_ev | 10:43 AM | Comment(s)(0)