ورود

View Full Version : آموزش: اپلتهای جاوا و asp.net میتوانند با همدیگر کار میکنند .



jeus
چهارشنبه 15 اردیبهشت 1389, 19:32 عصر
اگر برنامه نویس asp.net هستید و میخواهید از توانایی جاوا برای ساخت برنامه های غنی در سمت کلاینت مانند JavaFX , applet استفاده کنید میتوانید این مقاله را بخوانید و مکانسیم های مختلف تعامل را یاد بگیرید .


Default.aspx


<body>
...
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = { width:675, height:300} ;
var parameters = { jnlp_href: 'applet/map-applet.jnlp'};
deployJava.runApplet(attributes, parameters, '1.6');
</script>
...
</body>


asp.net نیاز دارد با applet ها ارتباط داشته داشته باشد
یک اپلت در حال اجرا در سمت کلاینت نیاز دارد که با یک صفحه asp.net که در سمت کلاینت در حال اجرا است تعامل داشته باشد که با مکانیسم جاری امکان پذیر خواهد شد .

حالت تعامل
کوکی ها
کوکی ها میتوانند استفاده شوند برای اشتراک داده ها بین اپلت و یک صفحه ASP.net . یک اپلت می تواند دریافت کند اطلاعاتی را که Set شده اند توسط یک صفحه ASP.net

بوسیله توکن های یکسان یک صفحه ASP.net نیز میتواند دریافت کند کوکی های set شده توسط یک Applet را .
در یک کد کوچک نشان داده شده بعدی , کلاس mapApplet استفاده شده از کلاس java.net.CookieHandler برای دریافت کوکی userName ست شده توسط صفحه اصلی Applet . متن"<Hello <user name" نمایش داده شده است در بالا سمت چپ گوشه applet .


private void getUserNameFromCookie() {
try {
// get the cookies that are applicable for this applet's parent web page
URL docBaseUrl = this.getDocumentBase();
CookieHandler cookieHandler = CookieHandler.getDefault();
java.util.Map<String, List<String>> headers =
cookieHandler.get(docBaseUrl.toURI(),
new HashMap<String,List<String>>());
if (headers.isEmpty()) {
System.out.println("No cookies found!");
} else {
getUserNameFromHeader(headers);
}
} catch(Exception e) {
...
}
}

private void getUserNameFromHeader(java.util.Map<String, List<String>> headers) {
for (String key : headers.keySet()) {
for (String value : headers.get(key)) {
if (key.equals("Cookie") && value.startsWith("userName")) {
userName = value.split("=")[1];
}
}
}
}


نکته اینکه شما نیاز خواهید داشت به sign کردن به applet تان هنگامی که استفاده می کنید از API - java.net.CookieHandler اگر شما تمایلی به sign کردن به applet تان ندارید میتوانید استفاده کنید از کدهای جاوا اسکری
پت در صفحه asp.net . این مقدار میتواند در دسترس باشد توسط اپلت با یکی از راههای زیر .
مقدار میتواند عبور کنند همچون یک پارامتر برای یک اپلت (تعریف و استفاده از پارامترهای اپلت)
اپلتها میتوانند استفاده از خصیصه liveConnect برای تعامل با کدهای جاوا اسکریپت و دسترسی داشته باشند یه مقدار کوکی . طلب کردن یک کد جاوا اسکریپت از یک اپلت


به روز رسانی صفحه ASP.net توسط LiveConnect
یک اپلت میتواند ارتباط داشته باشد با کدهای جاوا اسکریپت در صفحه وبی که اپلت را شامل میشود با استفاده از خصیصه LiveConnect . اپلت میتواند درخواست کند توابع و دسترسی یه متغییرهای جاوا اسکریپت برای بروزرسانی محتویات صفحه وبی که اپلت را شامل میشود. کدهای جاوا اسکریپت همچنین میتوانند درخواست کنند متدهای اپلت را .
در قطعه کدهای کوچک پایین کلاس MapApplet استفاده می کند از یک instance ازکلاس netscape.javascript.JSObject برای بروز رسانی محتوای کنترل asp:TextBox ID="addresses"

MapApplet.java

public void updateWebPage(String street, String city, String state) {
char result = invokeAspPage(street, city, state);
if (result == '1') {
window.call("writeAddressOnPage", new Object[] {street, city, state});
}
}


Default.aspx



<body>
...
<script type="text/javascript" language="javascript">
function writeAddressOnPage(street, city, state) {
var address = street + ", " + city + ", " + state;
var form = document.getElementById("addrForm");
var prevValue = form.elements["addresses"].value;
form.elements["addresses"].value = prevValue + "\n" + address;
}
</script>

<form id="addrForm" runat="server">
<div>
<p>Addresses saved to your address book:</p>
<asp:TextBox ID="addresses" TextMode="MultiLine" Rows="6"
Columns="60" runat="server" ></asp:TextBox>
</div>
</form>
...
</body>

هنگامی که یک فرم پست شده است, مقادیر فیلد فرم فراهم شده است برای صفحه بعدی ASP.net از طریق شی Request . شما ممکت است همچنی انتخاب کنید برای بروزرسانی فیلدهای مخفی فرم با داده های اپلت .

درخواست یک صفحه ASP.net
یک اپلت میتواند درخواست کند یک صفحه ASP.net با استفاده از کلاس java.net.URLConnection در قطعه کد پایین کلاس MapAppletباز کرده یک کانکشن به صفحه FileWriter.aspx و فرستاده پارامترها را توسط استفاده خروجی استریم کانکشن و دریافت یک نتیجه توسط خواندن کانکشن ها استریم های ورودی

MapApplet.java

public char invokeAspPage(String street, String city, String state) {
char [] result = {'0'};
...
String urlString = baseUrl + "FileWriter.aspx";
URL url = new URL(urlString);
URLConnection connection = url.openConnection();
connection.setDoOutput(true);
// send parameter to url connection
OutputStreamWriter out = new OutputStreamWriter(
connection.getOutputStream());
out.write("addresses=" + URLEncoder.encode(address, "UTF-8"));
out.close();
// read response from url connection
BufferedReader in = new BufferedReader(
new InputStreamReader(
connection.getInputStream()));
in.read(result);
in.close();
...
return result[0];
}

صفحه FileWriter.aspxمی نویسد اطلاعات آدرسهای داده شده را در فایل تکست userData/addresses.txt در سرور ASP.net صفحه برمی گرداند یک مقدار کارکتری "1" اگر آدرس به درستی نوشته شده باشد.

jeus
چهارشنبه 15 اردیبهشت 1389, 19:37 عصر
منبع هم
http://java.sun.com/developer/technicalArticles/appletAspIntegration/index.html#screencast
و فایلهای ضمیمه را هم پیوست کردم .

jeus
چهارشنبه 15 اردیبهشت 1389, 19:45 عصر
منبع هم
http://java.sun.com/developer/technicalArticles/appletAspIntegration/index.html#screencast
و فایلهای ضمیمه را هم پیوست کردم .
aspProject.zip (http://java.sun.com/developer/technicalArticles/appletAspIntegration/aspProject.zip)
javaNetbeansProject.zip (http://java.sun.com/developer/technicalArticles/appletAspIntegration/javaNetbeansProject.zip)