ساخت صفحه greeting.jsp

January 6, 2008 03:07 PM

اين ص�?حه شامل پيغام خوش آمدگويي، نمايش سن �?علي Duke و دريا�?ت تاريخ تولد کاربر است. مراحل ساخت ص�?حه چنين است:
ساخت يک ص�?حه خالي:
1. روي ماژول firstcup-war کليک راست نماييد.
2. از قسمت New گزينه JSP را انتخاب کنيد.
3. نام �?ايل JSP را greeting وارد کنيد.
4. Finish را کليک کنيد.
5. تگ head را به اين صورت تغيير دهيد:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Firstcup Greeting Page</title> 
</head>

6. تگ هاي ابتدا و انتهاي body را حذ�? کنيد.
7. عبارت زير را حذ�? کنيد:

<h1>JSP Page</h1>

8. �?ايل را ذخيره نماييد.

Declare نمودن Tag Library هاي JSF
همانگونه که مي دانيد تکنولوژي JavaServer Faces در واقع مجموعه اي از custom tag هاي jsp است که براي نمايش کامپوننت هاي واسط کاربري ، اعتبار سنجي و ساير موارد مربوطه به کار مي رود. Custom tag ها در tag library ها تعري�? مي شوند. تکنولوژي JavaServer Faces در دو tag library تعري�? مي شود:
• HTML Render Kit library که در آن همه کامپوننت هاي استاندارد واسط کاربري تعري�? شده اند.
• Core tag library که تگ هاي مورد نياز براي مبدل ها (convertors) ، اعتبارسنج ها (Validators) و event listener ها و ساير توابع عملکردي اشياء تعري�? مي شوند.

براي است�?اده از اين تگ ها در ص�?حه بايد tag library را declare نماييد. در اين مثال بايد خطوط زير را در �?ايل greeting.jsp درست پس از تگ بسته شدن head قرار دهيد:

<%@ taglib prefix="h" uri="http://java.sun.com/jsf/html" %>
<%@ taglib prefix="f" uri="http://java.sun.com/jsf/core" %>

ا�?زودن تگ هاي f:view و f:form
يک ص�?حه JSF بوسيله درختي از کامپوننت هاي واسط کاربري نمايش داده مي شود. هر ص�?حه JSP که از تکنولوژي JSF است�?اده مي کند بايد داراي تگ view باشد. اين تگ در Core tag Library تعري�? شده است و ريشه يا root درخت کامپوننت ها را مشخص مي نمايد. ساير تگ هاي JSF بايد درون تگ view تعري�? شوند.
همچنين از آنجا که معمولا ص�?حات JSF شامل �?رمي براي دريا�?ت اطلاعات از کاربر است، معمولا بايد شامل تگ form نيز باشد. همه کامپوننت هاي موجود در يک �?رم بايد درون تگ form قرار گيرند.
با مثال خود بحث را پي مي گيريم.
در ادامه declare نمودن tag library ها تگ هاي view و form را بدين صورت تعري�? نماييد:

<f:view>
    <h:form>
    </h:form>
</f:view>

ا�?زودن Output Label ها براي نمايش محتواي �?قط خواندني
يکي از مهمترين و پر کاربرد ترين تگ هاي JSF تگ outputText است. greeting.jsp براي نمايش پيغام خوش آمدگويي، دستورالعمل ها، Lebel ها و سن Duke از آن است�?اده مي کند. براي اين کار از پيغام هاي تعري�? شده در resource bundle است�?اده مي نمايد. همچنين تگ outputText اي که سن Duke را نشان مي دهد از متغير age موجود در DukesBDay bean است�?اده مي کند.
در داخل تگ h:form اين کد ها را بنويسيد:

<h2><h:outputText value="#{bundle.Welcome}"/></h2>
<h:outputText value="#{bundle.DukeIs} "/>
<h:outputText value="#{dukesBDay.age}"/>
<p><h:outputText value="#{bundle.Instructions}"/>
<p><h:outputText value="#{bundle.YourBD}"/>

ا�?زودن يک کامپوننت input براي دريا�?ت تاريخ تولد کاربر
يکي ديگر از تگ هاي پرکاربرد، تگ inputText است که يک �?يلد متني براي دريا�?ت ورودي از کاربر است. در اين مثال در ص�?حه greeting.jsp تاريخ تولد کاربر دريا�?ت مي شود و مقدارش در متغير YourBD از DukesBDay Bean ريخته مي شود. بدين ترتيب:
پس از کدهاي نوشته شده از مراحل قبل، کدهاي زير را بنويسيد:

<h:inputText id="userBirthday" value="#{dukesBDay.yourBD}">
</h:inputText>

انتساب يک convertor به کامپوننت ورودي
JSF شامل مجموعه از convertor ها و validator هاي استاندارد است که مي توان به کامپوننت نسبت داد. هد�? از آنها اعتبار سنجي داده هاي ورودي و كنترل انطباق آنها با الگويي خاص است. در اينجا ما مي خواهيم نحوه ورود تاريخ توسط كاربر را مشخص نماييم و روي آن كنترل داشته باشيم.
به اين منظور چنين عمل کنيد:
1. تگ زير را در داخل تگ h:inputText اضا�?ه نماييد:

<f:convertDateTime pattern="MM/dd/yyyy"/>

2. براي نمايش الگوي ورود تاريخ به کاربر تگ زير را پس از تگ بسته شدن h:inputText قرار دهيد:

<h:outputText value="#{bundle.Pattern}"/>

3. براي اينکه در صورت بروز خطا هنگام conversion پيغامي به کاربر نشان داده شود لازم است مشخصه converterMessage را به تگ h:inputText اضا�?ه نماييد. اين تگ بدين صورت خواهد شد:

<h:inputText id="userBirthday" 
          value="#{dukesBDay.yourBD}"
          converterMessage="#{bundle.DateError}">             
    <f:convertDateTime pattern="MM/dd/yyyy"/>
</h:inputText>

4. براي مشخص کردن جاي نمايش پيغام خطا به کاربر تگ زير را درست قبل از تگ بسته شدن h:form قرار دهيد. بدين صورت:

<p><h:message for="userBirthday" style="color:red"/>

ا�?زودن دکمه براي submit
درست قبل از تگ message که در مرحله قبل ايجاد کرديد تگ زير را اضا�?ه نماييد:

<p><h:commandButton value="#{bundle.Submit}" action="success"/>

در نهايت �?ايل را ذخيره نماييد.

پياده سازي greeting.jsp هم تمام شد. در مطلب بعد، آخرين جزء Application كه ص�?حه response.jsp است را خواهيم ساخت.

mahyar_ev | 03:07 PM | Comment(s)(1)

ساخت firstcup Web Client

January 1, 2008 11:18 AM

براي ساخت Web Client کارهاي زير را بايد انجام دهيد:
• تنظيم firstcup-war به اين منظور که JSF را پشتيباني نمايد.
• ساخت يک Web service client
• ساخت يک resource bundle براي نگهداري پيغام هايي که توسط ص?حات JSP است?اده مي شوند.
• تنظيم resource bundle در ?ايل configuration
• ساخت کلاس مديريت DukesBDay
• تنظيم DukesBDay در ?ايل configuration
• ساخت ص?حه greeting.jsp
• تنظيم قواعد navigation
• ساخت ص?حه response.jsp
در ادامه، مراحل بالا يک به يک توضيح داده خواهند شد.

تنظيم firstcup-war جهت پشتيبالي JSF
همه Application هاي JSF بايد شامل يک map به نمونه FacesServlet در ?ايل deployment descriptor باشند. نمونه FacesServlet درخواست ها را دريا?ت مي کند و براي پردازش به life cycle مي ?رستد. همچنين مقداردهي اوليه منابع را انجام مي دهد.

اين mapping بدين صورت انجام مي شود:
1. روي ماژول firstcup-war کليک راست کنيد و properties را انتخاب نماييد.
2. از category ها framework را انتخاب نماييد.
3. روي Add کليک کنيد.
4. از ليست انتخاب ها، JavaServer Faces را انتخاب نماييد و OK را کليک کنيد.
5. Servlet URL mapping را به */firstcupWeb/ تغيير دهيد. اين مسير نمونه FacesServlet است.
6. تيک Validate XML را برداريد.
7. OK را کليک کنيد.

?وروارد ص?حه index.jsp به greeting.jsp
مي خواهيم بلا?اصله پس از اجراي اين Web Application به ص?حه greeting.jsp برويم. لذا بايد index.jsp را به greeting.jsp ?وروارد نماييم. بدين صورت:
1. ماژول firstcup-war را باز کنيد و روي Web Pages دبل کليک نماييد.
2. روي welcomeJSF.jsp کليک راست کرده بوسيله Delete آن را حذ? نماييد.
3. روي index.jsp دبل کليک کنيد.
4. هر چيزي که داخل اين ص?حه نوشته شده است را پاک کنيد.
5. اين عبارت را در ص?حه index.jsp وارد کنيد:
6. ?ايل را ذخيره کنيد.

توضيح اينكه ص?حه greeting.jsp را بعدا خواهيم ساخت.

ساخت Web Service Client براي وب ماژول firstcup-war
اين ماژول از وب سرويس firstcup-dukes-age است?اده مي نمايد. به اين منظور لازم است يک Web Service Client در آن ايجاد نماييد. بدين صورت:
1. ماژول firstcup-war را انتخاب کنيد.
2. از منوي File گزينه New File را انتخاب کنيد.
3. از category ها گزينه Web Services را انتخاب کنيد.
4. از انواع ?ايل، Web Service Client را ايجاد نماييد.
5. Next را کليک کنيد.
6. WSDL URL را انتخاب کنيد.
7. در قسمت WSDL URL مقدار زير را وارد کنيد:
http://localhost:8080/DukesAgeService/DukesAgeService?WSDL
8. در ?يلد package نيز اين مقدار را وارد نماييد:
com.sun.firstcup.webservice
9. Finish را کليک کنيد.

ساخت Resource Bundle
منظور از Resource Bundle ?ايلي است از نوع properties كه در آن كليه متون ثابت، شامل پيغام هاي خطا و عباراتي كه در ص?حه jsp به كار مي روند، تعري? مي شود. نحوه ساخت آن بدين ترتيب است:
1. ماژول firstcup-war را انتخاب نماييد.
2. از منوي ?ايل گزينه New File را انتخاب کنيد.
3. category را other و نوع ?ايل را Properties File انتخاب کنيد و Next را کليک کنيد.
4.نام ?ايل را WebMessages وارد نماييد.
5. ?ولدر را نيز اين مسير وارد کنيد:
src/java/com/sun/firstcup/web
6. Finish را کليک نماييد.
7. پس از اينکه NetBeans ?ايل را ايجاد نمود متن زير را در آن کپي نماييد:
Welcome=Hi. My name is Duke. Let us find out who is older -- You or me
DukeIs=Duke is
YearsOldToday=years old today.
Instructions=Enter Your birthday and click submit.
YourBD=Your birthday
Pattern=MM/dd/yyyy
DateError=Please enter the date in the form MM/dd/yyyy.
YouAre=You are
Year=year
Years=years
Older=older than Duke!
Younger=younger than Duke!
SameAge= the same age as Duke!
Submit=Submit
Back=Back
8. ?ايل را ذخيره کنيد.
9. در صورت نياز مي توانيد براي هر زباني مانند زبان ?ارسي يک Properties File مشابه بالا تهيه نماييد.
10. توسط گزينه Refresh All Files از منوي File همه ?ايل ها را Refresh نماييد.

تنظيم و پيکر بندي Resource Bundle
1. ماژول firstcup-war را باز کنيد. از ?ولدر Web Pages ?ولدر WEB-INF را باز کنيد.
2. روي faces-config.xml دبل کليک نماييد.
3. قبل از تگ پاياني عنصر faces-config عناصر زير را اضا?ه نماييد:
<application>
    <resource-bundle>          
            <base-name>com.sun.firstcup.web.WebMessages</base-name>
        <var>bundle</var> 
    </resource-bundle>
    <locale-config>
        <default-locale>en</default-locale>
        <supported-locale>es</supported-locale>
    </locale-config>
</application>
4. ?ايل را ذخيره نماييد.

در مطلب بعد ساخت كلاس DukesBDay از اجزاي web client را خواهيم ديد. براي يادآوري اين تصوير را ببينيد.

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

ايجاد محتواي دايناميك 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)

مثال ?ايل 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)

برقراري ارتباط بين JSP و Servlet

July 7, 2007 03:43 PM

نحوه ?راخواني يك Servlet از داخل يك ?ايل JSP بدين صورت است:

<html>
<body bgcolor="white">

<!-- Forward to a servlet -->
<jsp:forward page="/servletToJsp" />

</html>

كه در آن عبارت "servletToJsp" نام servlet مربوطه است كه در ?ايلي به نام servletToJsp.java پياده شده است.

نحوه ?راخواني يك ص?حه JSP از درون يك Servlet بدين صورت است:

import javax.servlet.*;
import javax.servlet.http.*;

public class servletToJsp extends HttpServlet {

    public void doGet (HttpServletRequest request,
         HttpServletResponse response) {

 try {
     // Set the attribute and Forward to hello.jsp
     request.setAttribute ("servletName", "servletToJsp");
     getServletConfig().getServletContext().getRequestDispatcher("/jsptoserv/hello.jsp").forward(request, response);
 } catch (Exception ex) {}
    }
}

براي تست Servlet همانگونه كه قبلا نيز ذكر شده مي توانيد با دستور زير از يك ?ايل HTML آن را ?راخواني نماييد.

<a href="/ servletToJsp">Execute Servlet</a>

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

نمايش ساعت با است?اده از jsp

July 3, 2007 02:51 PM

?ايل CurrentTimeBean.java :

package javaborder;

import java.util.Date;

public class CurrentTimeBean {
  public int hours;
  public int minutes;
 
  public CurrentTimeBean() {
    Date now = new Date();
    this.hours = now.getHours();
    this.minutes = now.getMinutes();
  }

  public int getHours(){
    return hours;
  }
  public void setHours(int Hours){
    this.hours = Hours;
  }
 
  public int getMinutes(){
    return minutes;
  }
  public void setMinutes(int Minutes){
    this.minutes = Minutes;
  }
}

?ايل test.jsp :

<jsp:useBean id = "time" class= " javaborder.CurrentTimeBean"/>
<html>
<body>
Hour : <jsp:getProperty name = "time" property = "hours"/> <BR>
Minutes : <jsp:getProperty name = "time" property = "minutes"/> </body>
</html>

دستور <jsp:useBean> براي است?اده از JavaBean ها در jsp است?اده مي شود. با اين دستور مي توان يك كلاس جاوا را مشخص نمود و نمونه اي از آن ايجاد كرد.

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

يك مثال ساده JSP

July 1, 2007 12:27 PM

<html>
<head>
<title>JSP EXAMPLE</title>
</head>
<body>
      <%@page import="java.sql.* , java.io.*"%>
      <%
      int i = 1;
      if (i==1) {
      %>
            <p>Condition 1</p> 
      <%
      } else {
      %>
            <p>Condition 2</p>

      <%
      }
      %>
</body>
</html>

دستورات �?وق بايد در يك �?ايل متني با پسوند jsp ذخيره گردند.
از آنجا كه در مثال �?وق هميشه شرط i==1 صادق است، عبارت condition 1 هميشه نمايش داده مي شود. غرض تنها نشان دادن قالب يك �?ايل jsp ساده است.

mahyar_ev | 12:27 PM | Comment(s)(2)

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

June 26, 2007 05:56 PM

هرچند كه 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)