写一个JSP代理作为AIR和FLEX以及远程通信的桥梁

本文介绍了一种利用JSP代理实现FLEX及AIR应用程序跨域数据加载的方法。当无法部署跨域配置文件时,可通过服务器端的JSP代理文件作为中间层,帮助FLEX客户端获取远程数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写一个JSP代理作为AIRFLEX以及远程通信的桥梁

【写在前面:】我本人也非常推荐使用JSP来构建FLEX的服务端,这样的应用架构不难理解而且也非常方便,扩充和维护起来都很简单

有的时候你无法将跨域的配置文件放置到一个目标服务器,那么这个时候你的C/S架构就会出现一些问题,如何来解决这些问题呢?你可以使用一个服务端的代理文件作为FLEX客户端加载远程数据的一个桥梁,和直接访问域上的资源不同,FLEX首先回去访问这些代理服务,然后由这个代理来尝试获得指定域上的资源。

这样的代理也可以通过使用JSP服务端语言来构建,脚本如下,将其保存为getrssurl.jsp并将其配置到服务端这样这个代理就可以工作了。

服务端代码:

<% @ page language="java" contentType="text/html; charset=utf-8"

pageEncoding
="utf-8"

import
="java.io.BufferedReader,

java.io.InputStreamReader,

java.io.IOException,

java.io.InputStream,

java.net.MalformedURLException,

java.net.URL,

java.net.URLConnection
"

%>

<% !

private String contentURL;

public static final String CONTENT_URL_NAME = "contentURL";

%>

<%

// 从request获得指定的要访问的URL:

If (contentURL 
==   null {

contentURL 
= (String)request.getAttribute(CONTENT_URL_NAME);

throw new ServletException("A content URL must be provided, as a

"'" + CONTENT_URL_NAME +

"'" request attribute or request parameter.");

URL url 
= null;

try {

//获得到该内容的连接:

url 
= new URL(contentURL);

URLConnection urlConn 
= url.openConnection();

//向客户端展示文档内容:

String contentType 
= urlConn.getContentType();

response.setContentType(contentType);

// 获得输入流

InputStream 
in = urlConn.getInputStream();

BufferedReader br 
= new BufferedReader(new InputStreamReader(in));

char[] buffer = new char[1024];

String contentString 
= "";

String tmp 
= br.readLine();

do

{

contentString 
+= tmp + " ";

tmp 
= br.readLine();

}


while (tmp != null);

out.flush();

out.close();

}


catch (MalformedURLException me) {

// 新的URL到来的时候:

throw new ServletException(å

"URL: '" + contentURL + "' is malformed.");

}


catch (IOException ioe) {

//在创建新的连接的时候:

throw new ServletException("Exception while opening '" +å

contentURL 
+ "': " + ioe.getMessage());

}


catch (Exception e) {

//在读入输入的时候:

throw new ServletException("Exception during proxy request: " å

+ e.getMessage());

}


%>

 

FLEX客户端,你要做的唯一一件事情就是将HTTP标签的目标URL进行修改,指向该JSP文件即可

客户端代码

< mx:Application xmlns:mx = " http://www.adobe.com/2006/mxml "

layout
= " vertical "  creationComplete = " myHS.send() " >

< mx:HTTPService id = " myHS "

url
= " http://88.149.156.198/develop/xmloutput/getrssurl.jsp "

method
= " GET " å

result
= " myAS = myHS.lastResult.rss.channel.item as ArrayCollection " >

< mx:request xmlns = "" >

< url > {myURL} </ url >

</ mx:request >

</ mx:HTTPService >

< mx:DataGrid id = " myDG "  dataProvider = " {myAS} " >

< mx:columns >

< mx:DataGridColumn dataField = " category "  headerText = " Category "   />

< mx:DataGridColumn dataField = " title "  headerText = " Description "   />

< mx:DataGridColumn dataField = " pubDate "  headerText = " Date "   />

</ mx:columns >

</ mx:DataGrid >

</ mx:Application >

保存这些文件,然后将SWFHTML包裹代码作为客户端,JSP文件作为服务端,装载该LFEX程序的话你就可以看见RSS FEED显示在应用程序中

 

源文档 <http://casario.blogs.com/mmworld/2008/02/write-a-jsp-pro.html>

 

Write a JSP proxy which acts as a bridge between the Flex and AIR applications and the remote data

Sometimes you won’t be able to put a cross-domain file on the destination server. To solve

this problem you can use a server-side proxy file that consists of a script published on the

server which acts as a bridge between the Flex application and the remote data to load. Instead of directly accessing external resources on different domains, Flex will access this proxy service, which looks after accessing the resources on the specified domains.

The same proxy method can also be created by using JSP as server-side language. Create a

new file and save it with the name getrssurl.jsp.  The script is the following:

<%@ page language="java" contentType="text/html; charset=utf-8"

pageEncoding="utf-8"

import="java.io.BufferedReader,

java.io.InputStreamReader,

java.io.IOException,

java.io.InputStream,

java.net.MalformedURLException,

java.net.URL,

java.net.URLConnection"

%>

<%!

private String contentURL;

public static final String CONTENT_URL_NAME = "contentURL";

%>

<%

// get the url through the request:

If (contentURL == null) {

contentURL = (String)request.getAttribute(CONTENT_URL_NAME);

if (contentURL == null)

contentURL = (String)request.getParameter(CONTENT_URL_NAME);

}

if (contentURL == null)

throw new ServletException("A content URL must be provided, as a

"'" + CONTENT_URL_NAME +

"'" request attribute or request parameter.");

URL url = null;

try {

// get a connection to the content:

url = new URL(contentURL);

URLConnection urlConn = url.openConnection();

// show the client the content type:

String contentType = urlConn.getContentType();

response.setContentType(contentType);

// get the input stream

InputStream in = urlConn.getInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(in));

char[] buffer = new char[1024];

String contentString = "";

String tmp = br.readLine();

do

{

contentString += tmp + "/n";

tmp = br.readLine();

}

while (tmp != null);

out.flush();

out.close();

}

catch (MalformedURLException me) {

// on new URL:

throw new ServletException(å

"URL: '" + contentURL + "' is malformed.");

}

catch (IOException ioe) {

// on opne connection:

throw new ServletException("Exception while opening '" +å

contentURL + "': " + ioe.getMessage());

}

catch (Exception e) {

// on reading input:

throw new ServletException("Exception during proxy request: " å

+ e.getMessage());

}

%>

Save this file as getrssurl.jsp and transfer it onto the web server.

On the Flex side the only thing you have to change is the address defined within the url

property of the HTTPService tag. The url has to point to the JSP file:

<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"

layout="vertical" creationComplete="myHS.send()">

<mx:HTTPService id="myHS"

url="http://88.149.156.198/develop/xmloutput/getrssurl.jsp"

method="GET"å

result="myAS = myHS.lastResult.rss.channel.item as ArrayCollection">

<mx:request xmlns="">

<url>{myURL}</url>

</mx:request>

</mx:HTTPService>

<mx:DataGrid id="myDG" dataProvider="{myAS}">

<mx:columns>

<mx:DataGridColumn dataField="category" headerText="Category" />

<mx:DataGridColumn dataField="title" headerText="Description" />

<mx:DataGridColumn dataField="pubDate" headerText="Date" />

</mx:columns>

</mx:DataGrid>

</mx:Application>

Save the file, run the application, and then copy the SWF file with the HTML Wrapper and

the JSP file onto a web server. Load the application to see the RSS feed displayed in the

Flex application.

Posted by marco casario on February 20, 2008 at 01:16 AM in Flex, Flex 2 Best Practice | Permalink

Comments

I end up using proxies like this way more than I'd like to, but alas, it's what we have to do.

one trick i like to use is to put the proxying into an error handler, so that if the site ever adds a crossdomain file, i can take advantage of direct access without having to change the code. It does add an extra request but can be handy.

myurlloader.addEventListener(SecurityErrorEvent.SECURITY_ERROR,tryProxy);

Posted by: Daryn | February 20, 2008 at 02:05 AM

 

源文档 <http://casario.blogs.com/mmworld/2008/02/write-a-jsp-pro.html>

 

 

 

内容概要:本文深入探讨了利用MATLAB/Simulink搭建变压器励磁涌流仿真模型的方法技术。首先介绍了空载合闸励磁涌流仿真模型的搭建步骤,包括选择配置电源模块、变压器模块以及设置相关参数。文中详细讲解了如何通过代码生成交流电压信号设置变压器的变比,同时强调了铁芯饱特性合闸角控制的重要性。此外,还讨论了电源简化模型的应用及其优势,如使用受控电压源替代复杂电源模块。为了更好地理解分析仿真结果,文章提供了绘制励磁涌流曲线的具体方法,并展示了如何提取分析涌流特征量,如谐波含量谐波畸变率。最后,文章指出通过调整电源变压器参数,可以实现针对不同应用场景的定制化仿真,从而为实际工程应用提供理论支持技术指导。 适合人群:从事电力系统研究、变压器设计及相关领域的科研人员、工程师技术爱好者。 使用场景及目标:适用于希望深入了解变压器励磁涌流特性的研究人员,旨在帮助他们掌握MATLAB/Simulink仿真工具的使用技巧,提高对励磁涌流现象的理解预测能力,进而优化继电保护系统的设计。 其他说明:文中不仅提供了详细的建模步骤代码示例,还分享了一些实用的经验技巧,如考虑磁滞效应对涌流的影响、避免理想断路器带来的误差等。这些内容有助于读者在实践中获得更加准确可靠的仿真结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值