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

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

写一个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>

 

 

 

跟网型逆变器小干扰稳定性分析与控制策略优化研究(Simulink仿真实现)内容概要:本文围绕跟网型逆变器的小干扰稳定性展开分析,重点研究其在电力系统中的动态响应特性及控制策略优化问题。通过构建基于Simulink的仿真模型,对逆变器在不同工况下的小信号稳定性进行建模与分析,识别系统可能存在的振荡风险,并提出相应的控制优化方法以提升系统稳定性动态性能。研究内容涵盖数学建模、稳定性判据分析、控制器设计与参数优化,并结合仿真验证所提策略的有效性,为新能源并网系统的稳定运行提供理论支持技术参考。; 适合人群:具备电力电子、自动控制或电力系统相关背景,熟悉Matlab/Simulink仿真工具,从事新能源并网、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 分析跟网型逆变器在弱电网条件下的小干扰稳定性问题;② 设计并优化逆变器外环与内环控制器以提升系统阻尼特性;③ 利用Simulink搭建仿真模型验证理论分析与控制策略的有效性;④ 支持科研论文撰、课题研究或工程项目中的稳定性评估与改进。; 阅读建议:建议读者结合文中提供的Simulink仿真模型,深入理解状态空间建模、特征值分析及控制器设计过程,重点关注控制参数变化对系统极点分布的影响,并通过动手仿真加深对小干扰稳定性机理的认识。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值