« 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)