ايجاد محتواي دايناميك XML با ليستي از Item ها

November 28, 2007 12:52 PM

در ادامه مطلب قبلي باز هم به توليد XML با محتواي دايناميك مي پردازيم. اين بار محتواي فايل XML را توسط ليست آيتم هايي كه در يك Java bean تعريف شده، ايجاد مي كنيم. براي اين كار دو كلاس به نام هاي Item و Inventory ايجاد مي نماييم.
محتواي فايل Item.java چنين است:

package beans;

public class Item implements java.io.Serializable {
    private String name;
    private float price;
    
    public Item(String name , float price) {
        this.name = name;
        this.price = price;
    }
    public String getName() {return name;}
    public float getPrice() {return price;}
}

محتواي فايل Inventory.java چنين است:

package beans;

import java.util.Iterator;
import java.util.Vector;

public class Inventory implements java.io.Serializable {
    private Vector items = new Vector();
    
    public Inventory() {
        items.addElement(new Item("LCD",(float)200000.0));
        items.addElement(new Item("Laptop",(float)1000000.0));
    }
    
    public Iterator getItems() {
        return items.iterator();
    }
}

توجه كنيد كه در اينجا محتويات ليست items از كلاس Inventory بصورت ثابت مقداردهي شده اند. اين ليست مي تواند از روي يك منبع داده قابل تغيير مقداردهي شود.
سرانجام مشخصات فايل inventory.jsp بدين صورت است:

<%@page contentType="text/xml"%>
<%@page pageEncoding="UTF-8"%>
<%@ page import="beans.Inventory,beans.Item" %>

<jsp:useBean id="inventory" class="beans.Inventory" scope="page" />
<% 
    java.util.Iterator it = inventory.getItems();
    Item item = null;
%>

<?xml version="1.0" encoding="UTF-8"?>
<inventory>
    <% while (it.hasNext()) { 
        item = (Item)it.next(); %>
    <item>
        <name><%= item.getName() %></name>
        <price><%= item.getPrice() %></price>
    </item>
    <% } %>  
</inventory>

با اجراي اين فايل jsp روي Browser خود يك ساختار XML را مشاهده خواهيد نمود كه محتويات آن، ليست همه آيتم هاي تعريف شده در كلاس Inventory است.

منبع : فصل 11 كتاب Advanced JavaServer Pages

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

ساخت XML با محتوای داینامیک توسط jsp

November 28, 2007 10:01 AM

ساختار استاندارد و شناخته شده تر يک فايل jsp مشابه يک فايل html است که در ميان تگ هاي آن مي توان تگ هاي jsp را نيز به کار برد. مثال:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<html>
    <head>
        <title>JSP Page in HTML format</title>
    </head>
    <body>
<% out.println("This is a jsp in html format.");    %>
    </body>
</html>

اما يک فايل jsp مي تواند فرمت XML نيز داشته باشد. به اين ترتيب مي توان خروجي XML دايناميک توليد نمود. مثال:

<%@page contentType="text/xml"%>
<%@page pageEncoding="UTF-8"%>

<?xml version="1.0" encoding="UTF-8"?>
<documnet>
    <date>
        <%= new java.util.Date() %>
    </date>
</documnet>

نکته 1: توجه کنيد که در هر دو حالت پسوند فايل بايد jsp باشد.
نکته 2: به تفاوت مقدار contentType در دو مثال دقت کنيد.
نکته 3: خروجي مثال اول در Browser صفحه اي است که تنها عبارت "JSP Page in HTML format" در آن نوشته شده. اما خروجي دوم به فرمت XML است که مقدار عنصر date آن تاريخ جاري سيستم است.

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

نمايش XML در HTML

November 19, 2007 01:21 PM

چندي پيش در كامنت هاي مطلبي مربوط به XML دوست عزيزم سوالي مطرح نمود كه آن زمان من از روي ناداني جوابي دادم كه گرچه غلط نبود، اما جواب سوال او هم نبود. سوال اين بود كه "چطور مي توان يك فايل XML را در صفحه html نشان داد". باز حين وب گردي هايم به مثالي برخوردم كه گمان مي كنم جواب سوال اين دوست عزيزم باشد.
فرض كنيد محتويات فايل Products.xml چنين باشد:

<?xml version="1.0"?>

<Products>
    <Item>
        <Name>Coffee Cup Warmer</Name>
        <Number>0001</Number>
        <Description>See Name</Description>
        <Price>15.00</Price>
    </Item>
    <Item>
        <Name>T-Shirt with Wacky NorEaster Logo Large</Name>
        <Number>0004</Number>
        <Description>See Name</Description>
        <Price>21.00</Price>
    </Item>
    <Item>
        <Name>Computer For Linux</Name>
        <Number>0009</Number>
        <Description>With Linux Installed</Description>
        <Price>250.00</Price>
    </Item>
    <Item>
        <Name>Flat LCD Display 14"</Name>
        <Number>0010</Number>
        <Description>Recommended for #0009</Description>
        <Price>387.00</Price>
    </Item>
</Products>

با دستورات html زير مي توان محتويات اين فايل XML را بصورت جدولي نمايش داد:

<HTML>

<HEAD>
    <TITLE>Show XML In Your HTML </TITLE>
</HEAD>
<BODY>
    <XML ID="MyProducts" SRC="Products.xml"></XML>

    <TABLE ID="ProdTable" DATASRC="#MyProducts" BORDER="1">
    <THEAD>
    <TH>
        Item Name/Description
    </TH>
    <TH>
        Item Number
    </TH>
    <TH>
        Price
    </TH>
    </THEAD>

    <TR>
    <TD>
        <B><Span DATAFLD="Name"></SPAN></B><BR>
        <SPAN DATAFLD="Description"></SPAN>
    </TD>
    <TD>
        <SPAN DATAFLD="Number"></SPAN>
    </TD>
    <TD>
        <SPAN DATAFLD="Price"></SPAN>
    </TD>
    </TR>
</TABLE>

</BODY>
</HTML>

اصل مثال را مي توانيد اينجا ببينيد. 
اميدوارم اين بار ديگر پاسخ سوال را درست داده باشم.

mahyar_ev | 01:21 PM | Comment(s)(2)

ادامه مروري بر DTD

November 4, 2007 03:42 PM

Element ها در DTD

سينتكس Elements
در DTD با سينتكس زير element ها تعريف مي شوند:

<!ELEMENT element-name category>
يا
<!ELEMENT element-name (element-content)>

Empty Elements
در اين نوع Element ها category برابر EMPTY مقداردهي مي شود:

<!ELEMENT element-name EMPTY>
مثال:
<!ELEMENT br EMPTY>

در XML با توجه به اين DTD تعريف br بايد چنين باشد:

<br />

Element هاي با Parsed Character Data

<!ELEMENT element-name (#PCDATA)>

Element هاي با هر محتوا
مي توانند هر تركيبي از داده هاي قابل پارس را بپذيرند:

<!ELEMENT element-name ANY>

Element هاي داراي فرزند

<!ELEMENT element-name (child1)>
يا
<!ELEMENT element-name (child1,child2,…)>
مثال:
<!ELEMENT note (to,from,heading,body)>

فرزندان به همان ترتيبي كه در تعريف آمده اند بايد در سند XML ظاهر شوند.
فرزندان خود مي توانند داراي فرزند باشند.

تعداد element هاي ممكن
در مثال هاي ذكر شده تا به حال تنها مي توان يك عدد از element را در XML قرار داد.
اگر بخواهيم كه تعداد تكرار يك element را مشخص نماييم از اين فرمت ها استفاده مي نماييم:

+ براي يك يا چند ،‌مثل

<!ELEMENT element-name (child-name+)>

* براي صفر يا چند ، مثل

<!ELEMENT element-name (child-name*)>

? براي صفر يا يك ، مثل

<!ELEMENT element-name (child-name?)>

محتواي دو حالتي
تعريف زير اشاره دارد به اينكه note element داراي يك to، يك from و يك header است، به علاوه يكي از عناصر message يا body (يا message يا body)

<!ELEMENT note (to,from,header,(message|body))>

محتواي تركيبي
تعريف زير اشاره دارد به اينكه note element داراي صفر يا چند تكرار از Parsed Character data، to، from، header يا message است.

<!ELEMENT note (#PCDATA|to|from|header|message)*>

Attribute ها در DTD
در DTD تعريف attribute ها با عبارت ATTLIST انجام مي شود. سينتكس آن بدين شكل است:

<!ATTLIST element-name attribute-name attribute-type default-value>
مثل
<!ATTLIST payment type CDATA "check">

كه در XML بدين شكل بايد پياده شود:

<payment type="check" />

لازم به ذكر است كه لازم نيست در سند XML حتما مقدار attribute را مساوي با defalt-value قرار دهيم. بلكه هر مقدار معتبري مطابق با type مشخص شده مي تواند باشد. ولي اگر مقداري به آن نسبت داده نشده باشد، مقدار آن برابر با default-value مي گردد.

به جاي default-value و نه همراه با آن، از سه عبارت REQUIRED# و IMPLIED# و FIXED value# هم مي توانيد استفاده كنيد. در ادامه اين سه مورد معرفي مي شوند.

REQUIRED#
عبارت #REQUIRED مشخص مي كند كه attribute وجودش در عنصر مربوطه الزامي است. مثل

<!ATTLIST person number CDATA #REQUIRED>

از REQUIRED# وقتي استفاده نماييد كه مقداري بعنوان مقدار پيش فرض نداريد، اما در عين حال مي خواهيد كه حتما اين attribute وجود داشته باشد.

IMPLIED#
از IMPLIED# وقتي استفاده كنيد كه مقداري بعنوان default نداريد و همچنين الزامي هم در وجود اين attribute وجود ندارد. مثال:

<!ATTLIST contact fax CDATA #IMPLIED>

FIXED value#
از اين عبارت وقتي استفاده كنيد كه مي خواهيد attribute يك مقدار مشخص داشته باشد و نويسنده XML نتواند چيز ديگري به جاي آن بنويسد. اگر نويسنده چيز ديگري بنويسد، پارسر XML خطا برميگرداند. مثال:

<!ATTLIST sender company CDATA #FIXED "Microsoft">

Attribute هاي داراي مقداير Enumerated
وقتي كه attribute مقادير مشخصي را مي تواند بپذيرد، اين مقادير در قسمت attribute-type تعريف مي شوند. مثال:

<!ATTLIST payment type (check|cash) "cash">

لازم به ذكر است كه attribute-type علاوه بر CDATAو enumerated عبارات ديگري را نيز مي تواند بپذيرد. از جمله ID، IDREF، IDREFS، NMTOKEN، NMTOKENS، ENTITY، ENTITIES، NOTATION و xml. براي آشنايي بيشتر با اين موارد به ساير منابع موجود در ارتباط با DTD از جمله مرجع اين نوشته رجوع نماييد:


ENTITY ها در DTD
Entity ها متغيرهايي هستند كه بعنوان shortcut براي برخي متون يا كاراكترهاي ديگر به كار مي روند. Entity به دو صورت internal و external قابل تعريف است.

تعريف Entity بصورت internal
سينتكس:

<!ENTITY entity-name "entity-value">
مثال:
<!ENTITY writer "Donald Duck.">
<!ENTITY copyright "Copyright W3Schools.">

و نحوه استفاده آنها در XML بدين صورت است:

<author>&writer;&copyright;</author>

توجه كنيد كه قبل از نام entity كاراكتر "&" و بعد از آن ";" مي آيد.

تعريف Entity بصورت external
سينتكس:

<!ENTITY entity-name SYSTEM "filename/URL">
مثال:
<!ENTITY writer SYSTEM "http://www.w3schools.com/entities.dtd">
<!ENTITY copyright SYSTEM "http://www.w3schools.com/entities.dtd">

نحوه استفاده از external entity مانند internal است.

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

مروري بر DTD

November 3, 2007 02:26 PM

ادامه مروري بر XML را با DTD پي مي گيريم.
DTD وسيله اي براي تعريف بلاك هاي معتبر در سند XML است.
يك DTD مي تواند داخل خود سند XML تعريف شود يا بصورت external از آن باشد.

Internal DTD Declaration:
در اين حالت در قسمت DOCTYPE با سينتكس زير تعريف مي شود:

<!DOCTYPE root-element [element-declarations]>

مثال:

<?xml version="1.0"?>
<!DOCTYPE note [
 <!ELEMENT note (to,from,heading,body)>
 <!ELEMENT to (#PCDATA)>
 <!ELEMENT from (#PCDATA)>
 <!ELEMENT heading (#PCDATA)>
 <!ELEMENT body (#PCDATA)>
]>
<note>
 <to>you</to>
 <from>me</from>
 <heading>Reminder</heading>
 <body>Don't forget</body>
</note>

در اين مثال DOCTYPE note مشخص مي كند كه عنصر root سند note است.

External DTD Declaration:
در قسمت DOCTYPE با سينتكس زير تعريف مي شود:

<!DOCTYPE root-element SYSTEM "filename">

مثال بالا را به صورت external مي بينيم:

<?xml version="1.0"?>
<!DOCTYPE  note SYSTEM "note.dtd">
<note>
 <to>you</to>
 <from>me</from>
 <heading>Reminder</heading>
 <body>Don't forget</body>
</note>

و محتواي فايل note.dtd بدين صورت است:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

دلايل استفاده از DTD
* هر DTD فرمت فايل XML مربوط به خود را توصيف مي كند.
* افراد و گروه هاي مختلف مي توانند فرمت DTD را بصورت استاندارد براي تبادلات در نظر بگيرند و فايل هاي XML خود را بر اساس آن توليد نمايند.
* application ها نيز مي توانند براي اعتبارسنجي فايل XML از DTD ها استفاده كنند.

از ديدگاه DTD هر سند XML يا HTML از اجزاي زير تشكيل شده است:
* Elements
* Attributes
* Entities
* PCDATA
* CDATA

در ادامه هر كدام تشريح مي گردند:

Elements
Element ها بلاك هاي اصلي اسناد XML يا HTML هستند. موارد زير مثال هايي از element ها هستند:

<body>some text</body>
<message>some text</message>

Attributes
عبارتند از توضيحات اضافي درباره element ها. در مثال زير img همان element است و src يك attribute آن. از آنجا كه خود element محتوايش empty است با "/" بسته مي شود.

<img src="computer.gif" />

Entities
برخي كاراكترها معني خاصي در XML دارند مثل < كه علامت شروع تگ XML است. مشابه آن در HTML عبارت ";nbsp&" است كه به "no-breaking-space" اشاره دارد. ليست آنها در XML بدين شرح است:

&lt;      <
&gt;      >
&amp;      &
&quot;      "
&apos;      '

PCDATA
PCDATAمخفف Parsed Character Data متني است كه توسط Parser قابل parse است.
CDATA
CDATA مخفف Character Data متني است كه توسط parser، parse نمي شود.

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

مروري بر XML

October 29, 2007 09:20 AM

قبل از ادامه بحث ارتباط جاوا و XML ترجيح دادم اول كمي به معرفي XML و مفاهيم مرتبط با آن بپردازم. البته مي دانم كه احتمالا با آن آشنا هستيد. با اين حال شايد مرور دوباره مفاهيم آن بد نباشد. مطالب را از w3schools برداشته ام.

XML يا Extensible Markup Language امكاني است براي توصيف داده ها. عبارت است از يك فايل متني با پسوند XML كه با هر اديتور متني قابل ويرايش است. شيوه نگارش آن در ادامه شرح داده خواهد شد.

برخي مشخصات XML :
* مانند HTML است اما تگ هاي آن از پيش تعريف شده نيستند و كاربر، خود بايد آنها را تعريف نمايد.
* از DTD يا يك XML Schema براي توصيف داده ها استفاده مي كند.

تفاوت اصلي XML و HTML اين است كه HTML بر چگونگي نمايش داده ها تاكيد دارد. در حالي كه XML محتواي داده ها را توصيف مي كند. در واقع XML مكملي است بر HTML. نه جايگزين آن

كاربردهاي XML :
* با XML داده ها خارج از HTML نگهداري مي شوند.
* XML براي جابجايي داده ها به كار مي رود.
* XML براي به اشتراك گذاري داده ها به كار مي رود
* XML براي ذخيره سازي داده هاي به كار مي رود
* در واقع XML باعث مي شود كه داده هاي شما پركاربرد تر باشند
* XML مي تواند براي ساخت يك زبان جديد به كار رود. XML مادر زبان هايي چون WAP و WML است.

سينتكس :
سينتكس XML بسيار ساده است
مثال:

<?xml version="1.0" encoding="ISO-8859-1"?>
<note date="12/11/2006">
<to>You</to>
<from>me</from>
<heading>Reminder</heading>
<body>Don't forget</body>
</note>

اولين خط آن هميشه XML declaration است كه ورژن و character encoding به كار رفته در سند XML را مشخص مي كند.
خط بعدي عنصر ريشه يا root element را مشخص مي نمايد. عنصر ريشه ماهيت سند XML را مشخص مي كند. مثل اينكه مي گوييم اين سند يك note است.

نكات:
* همه تگ هاي XML بايد بسته شوند و اين اجباري است.
* تگ هاي XML همه case sensitive هستند. بنابراين تگ هاي باز و بسته بايد عينا يكسان نوشته شوند. به عبارت ديگر مثلا تگ <message> نمي تواند با <Message/> بسته شود.
* ساختار تو درتوي تگ ها بايد به درستي رعايت شود.
* همه اسناد XML الزاما بايد داراي عنصر ريشه باشند . بقيه عناصر درون آن قرار داده شوند.
* در دو طرف value همه attribute هاي سند XML بايد كوتيشن قرار گيرد. هم مي تواند single quote باشد و هم double quote
* فضاي خالي يا space رشته ها در سند XML پاك نمي شود.

comment در XML

<!-- This is a comment -->

عناصر XML
بين عناصر XML رابطه پدر و فرزندي حاكم است.

<book>
<title>My First XML</title>
<prod id="33-657" media="paper"></prod>
<chapter>Introduction to XML
<para>What is HTML</para>
<para>What is XML</para>
</chapter>

<chapter>XML Syntax
<para>Elements must have a closing tag</para>
<para>Elements must be properly nested</para>
</chapter>

</book> 

محتواي element ها داراي چهار حالت است:

* element content : مثل book
* mixed content : مثل chapter
* simple content : مثل para
* empty content : مثل prod

در مثال بالا تنها prod داراي attribute است.

قواعد نامگذاري element ها:
* اسامي شامل حروف و اعداد و برخي كاراكترهاي ديگر مي شوند
* اسامي نبايد با عدد يا كاراكترهاي نقطه گذاري شروع شوند
* اسامي نبايد با عبارت xml يا XML يا Xml و ساير حالات XML شروع شود
* اسامي نبايد space داشته باشد
* اسامي نبايد ":" داشته باشند

اسامي element ها بهتر است گويا و توصيفي باشند.

كجا از element استفاده شود و كجا از attribute ؟
هيچ قانوني براي اين كار وجود ندارد. اما كلا استفاده از element ها در جاهايي كه نمي توان تمايزي بين اين دو قائل شد، توصيه مي شود. بهتر است هميشه داده ها را در element ها گنجاند. attribute ها را صرفا براي فراهم نمودن اطلاعات در مورد داده ها (metadata) مقداردهي نماييد.
بعنوان برخي مشكلات استفاده از attribute مي توان اين موارد را برشمرد:
* attribute ها نمي توانند چند مقدار بپذيرند
* attribute ها توسعه دادنشان سخت تر است.
* attribute ها قابليت نمايش structure ها را ندارند.
* كار با attribute ها در برنامه سخت تر است.
* attribute ها در تقابل با DTD تست كردنشان سخت تر است.

يك استثناء:
شناسه يا كد داده ها مثل counter اي كه بصورت سريال بالا مي رود را مي توان در attribute ها هم قرارداد.

XML با سينتكس درست Well Formed XML ناميده مي شود.
XML كه با DTD اعتبارسنجي شده ، Valid XML خوانده مي شود.

mahyar_ev | 09:20 AM | Comment(s)(2)

Binding بين XML Schema و كلاس هاي جاوا

October 15, 2007 12:31 PM

اين كار در جاوا با JAXB يا Java Architecture for XML Binding انجام مي شود. يك implementation از JAXB شامل بخش هاي زير است:
Schema compiler: يك XML schema را به مجموعه اي از عناصر داخل برنامه bind مي كند. رويه Binding توسط يك زبان مبتني بر XML تعريف مي شود.
Schema generator: مجموعه اي از عناصر موجود در برنامه را به يك XML schema مرتبط (map) مي كند.
Binding runtime framework : امكان عمليات marshaling (نوشتن به) و unmarshaling (خواندن از) محتواي XML را فراهم مي كند.

مراحل كلي در انجام رويه data binding با JAXB عبارت است از:
1- ساخت كلاس ها: در اين مرحله JAXB binding compiler يك XML schema را بعنوان ورودي دريافت مي كند و بر اساس آن كلاس هاي JAXB را مي سازد.
2- كامپايل كلاس ها: همه كلاس هاي ساخته شده به همراه source و كد application بايد كامپايل شوند.
3- Unmarshalling: توسط JAXB binding framework اسناد XML اي كه مطابق schema نوشته شده اند، Unmarshal مي گردند.
4- ساخت درخت محتوا: نتيجه Unmarshaling ساخت يك درخت از data object هايي است كه نمونه هايي از كلاس هاي JAXB ساخته شده، هستند. اين درخت محتوا ساختار و محتواي اسناد XML منبع را نمايش مي دهند.
5- اعتبارسنجي: اين مورد اختياري است و مي تواند انجام نشود. اما اگر مثلا تغييري در درخت محتوا ايجاد كنيد (آنگونه كه در مرحله بعدي گفته شده) لازم است كه قبل از Marshaling يا بازگرداندن محتوا به اسناد XML ، با استفاده از عمليات validation موجود در JAXB، صحت و اعتبار آنها را بررسي نماييد.
6- پردازش محتوا: application مي تواند داده هاي XML نمايش داده شده در درخت محتوا را ويرايش نمايد.
7- Marshalling: در نهايت درخت محتوا بايد به يك يا چند سند XML خروجي ، منتقل شود. همانگونه كه ذكر شد اين محتوا ممكن است قبل از انجام عمل Marshaling اعتبارش سنجيده شود.

در ادامه برخي از مفاهيم ذكر شده براي آشنايي بيشتر، معرفي مي گردد:
XML schema :
نوع سند XML را تعريف مي كند. معمولا بصورت شرايطي (constraints) كه بر ساختار و محتواي XML بايد اعمال شود، بيان مي گردد. زبان هاي گوناگوني براي بيان XML Schema وجود دارد. شناخته شده ترين آنها زبان Document Type Definition يا DTD است كه در واقع بعنوان يكي از ويژگي هاي XML شناخته مي شود. اين زبان قابليت هاي محدودي دارد، اما كاربردهاي ديگري نيز علاوه بر تعريف XML schema دارد. دو زبان ديگر پركاربرد در حوزه تعريف XML schemaعبارتند از XML schema (W3C) و RELAX NG
XML Data binding:
اين عبارت اشاره دارد به فرايند نمايش اطلاعات موجود در يك سند XML بصورت يك object در حافظه كامپيوتر. اين كار به application امكان مي دهد كه مستقيما و بدون استفاده از DOM به داده هاي XML دست يابد.
Marshaling:
Marshaling كه همچنين با عنوان serialization نيز شناخته مي شود، عبارت است از فرايند تبديل يك object موجود در حافظه به يك فرمت داده قابل انتقال يا ذخيره سازي (مثلا يك فايل). Marshaling در JAXB به application امكان مي دهد كه object هاي JAXB را به داده هاي XML تبديل نمايد.
Unmarshalling:
عمل معكوس Marshaling نيز Unmarshaling يا deserialization ناميده مي شود كه عبارت است از استخراج يك ساختمان داده از يك فايل (يا يك سري از بايت ها). Unmarshaling در JAXB به application اين امكان را مي دهد كه داده هاي XML را به object هاي JAXB تبديل كند.

ادامه دارد...

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

مثال فايل jsp با فرمت XML

July 15, 2007 03:04 PM

<?xml version="1.0"?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
  version="1.2">
<jsp:directive.page contentType="text/html"/>
<jsp:directive.page import="java.text.*"/>

<html>
<head>
  <title>Example JSP in XML format</title>
</head>

<body>
This is the output of a simple JSP using XML format.
<br/>

<div>Use a jsp:scriptlet to loop from 1 to 10: </div>
<jsp:scriptlet>
// Note we need to declare CDATA because we don't escape the less than symbol
<![CDATA[
  for (int i = 1; i<=10; i++) {
    out.println(i);
    if (i < 10) {
      out.println(", ");
    }
  }
]]>
</jsp:scriptlet>

<!-- Because I omit br's end tag, declare it as CDATA -->
<![CDATA[
  <br><br>
]]>


<jsp:text>
  This sentence is enclosed in a jsp:text element.
</jsp:text>

</body>
</html>
</jsp:root>


<br> در JSP نياز به بسته شدن ندارد. اما در XHTML بايد حتما بسته شود.

CDATA
همه قسمت هاي فايل XML توسط parser لحاظ مي شوند، مگر قسمتهايي كه درون CDATA نوشته شود. بخش CDATA با "<![CDATA["  آغاز و به "]]>"  ختم مي شود.
چرا بايد از CDATA اسفاده نمود؟ همانگونه كه مي دانيد هر XML tag خود ممكن است از تگ هاي ديگري تشكيل شده باشد. باز مي دانيم كه تگ ها با كاراكتر < شروع مي شوند. حال اگر داخل دستوراتي كه مي نويسيم از اين كاراكتر هم استفاده شده باشد، parser به اشتباه مي افتد و خطا مي دهد. چاره اين است كه دستورات مذكور داخل CDATA قرار گيرد. كاراكترهايي كه باعث بروز خطا در parser مي شود عبارتند از دو كاراكتر < و & .
البته براي رفع اين مشكل، راه حل ديگري هم وجود دارد كه در مواردي مفيد است كه تعداد كاراكترهاي غير مجاز، زياد نيست. در اين صورت به جاي < عبارت &lt; و به جاي & عبارت &amp; در متن جايگزين گردد. اطلاعات تكميلي را در توضيحات مربوط به CDATA بخوانيد.

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

JSP با فرمت XML

July 10, 2007 02:49 PM

دستورات و تگ هاي اصلي مورد استفاده براي نوشتن فايل JSP با فرمت XML عبارتند از:

jsp:root
فايل Jsp با فرمت XML، حتما jsp:root را دارد. استفاده از آن براي مشخص نمودن tag library استفاده شده در دستورات JSP است. مشخص نمودن xmlns و version در آن، اجباري است.

jsp:directive.page
همانگونه كه قبلا ذكر شد دستوراتي كه در <page @%> قيد مي شوند global هستند و براي كل صفحه JSP لحاظ مي گردند.

<%@ page 
   [ language="java" ] 
   [ extends="package.class" ] 
   [ import="{package.class | package.*}, ..." ] 
%>

jsp:directive.page مشابه اين دستور است درفرمت XML .

jsp:declaration
در JSP ، تعريف متغيرها بصورت زير است

<%!  int i = 0; %>

معادل اين دستور در فرمت XML چنين است:

<jsp:declaration>int i = 0;</jsp:declaration>

همچنين متد ها را نيز مي توان در jsp:declaration تعريف نمود.

jsp:scriptlet
نوشتن scriptlet در فرمت JSP بدين صورت است:

<% i = 1; %>

معادل اين دستور در فرمت XML چنين است:

<jsp:scriptlet>i = 1;</jsp:scriptlet>

jsp:expression
براي نمايش يك عبارت روي صفحه استفاده مي شود كه توسط زبان جاوا توليد شده است. براي اين كار عبارت مذكور كه مي تواند يك تابع با يك خروجي باشد،‌محاسبه مي شود و خروجي آن به string تبديل مي شود.

<jsp:expression>getDateTimeStr(request.getLocale())</jsp:expression>

jsp:text
براي نمايش متن ثابتي روي صفحه استفاده مي شود.

<jsp:text>this is a test</jsp:text>

در مطلب بعد مثالي در اين رابطه خواهيم ديد.

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