写一个JSP代理作为AIR和FLEX以及远程通信的桥梁
【写在前面:】我本人也非常推荐使用JSP来构建FLEX的服务端,这样的应用架构不难理解而且也非常方便,扩充和维护起来都很简单
有的时候你无法将跨域的配置文件放置到一个目标服务器,那么这个时候你的C/S架构就会出现一些问题,如何来解决这些问题呢?你可以使用一个服务端的代理文件作为FLEX客户端加载远程数据的一个桥梁,和直接访问域上的资源不同,FLEX首先回去访问这些代理服务,然后由这个代理来尝试获得指定域上的资源。
这样的代理也可以通过使用JSP服务端语言来构建,脚本如下,将其保存为getrssurl.jsp并将其配置到服务端这样这个代理就可以工作了。
服务端代码:
<%...@pagelanguage="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"
%>
<%...!
privateStringcontentURL;
publicstaticfinalStringCONTENT_URL_NAME="contentURL";
%>
<%
//从request获得指定的要访问的URL:
If(contentURL==null)...{
contentURL=(String)request.getAttribute(CONTENT_URL_NAME);
thrownewServletException("AcontentURLmustbeprovided,asa
"'"+CONTENT_URL_NAME+
"'"requestattributeorrequestparameter.");
URLurl=null;
try...{
//获得到该内容的连接:
url=newURL(contentURL);
URLConnectionurlConn=url.openConnection();
//向客户端展示文档内容:
StringcontentType=urlConn.getContentType();
response.setContentType(contentType);
//获得输入流
InputStreamin=urlConn.getInputStream();
BufferedReaderbr=newBufferedReader(newInputStreamReader(in));
char[]buffer=newchar[1024];
StringcontentString="";
Stringtmp=br.readLine();
do
...{
contentString+=tmp+" ";
tmp=br.readLine();
}
while(tmp!=null);
out.flush();
out.close();
}
catch(MalformedURLExceptionme)...{
//新的URL到来的时候:
thrownewServletException(å
"URL:'"+contentURL+"'ismalformed.");
}
catch(IOExceptionioe)...{
//在创建新的连接的时候:
thrownewServletException("Exceptionwhileopening'"+å
contentURL+"':"+ioe.getMessage());
}
catch(Exceptione)...{
//在读入输入的时候:
thrownewServletException("Exceptionduringproxyrequest:"å
+e.getMessage());
}
%>
在FLEX客户端,你要做的唯一一件事情就是将HTTP标签的目标URL进行修改,指向该JSP文件即可
客户端代码
<mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"creationComplete="myHS.send()">
<mx:HTTPServiceid="myHS"
url="http://88.149.156.198/develop/xmloutput/getrssurl.jsp"
method="GET"å
result="myAS=myHS.lastResult.rss.channel.itemasArrayCollection">
<mx:requestxmlns="">
<url>...{myURL}</url>
</mx:request>
</mx:HTTPService>
<mx:DataGridid="myDG"dataProvider="{myAS}">
<mx:columns>
<mx:DataGridColumndataField="category"headerText="Category"/>
<mx:DataGridColumndataField="title"headerText="Description"/>
<mx:DataGridColumndataField="pubDate"headerText="Date"/>
</mx:columns>
</mx:DataGrid>
</mx:Application>
保存这些文件,然后将SWF的HTML包裹代码作为客户端,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>
分享到:
相关推荐
`FlexProject`这个压缩包文件可能包含了一个已经整合好的JSP与Flex示例项目。如果你想要深入理解JSP与Flex的整合,可以下载这个项目,研究`web.xml`的配置以及`flex.xml`的内容。通过查看源代码和运行项目,你可以...
在IT行业中,尤其是在Web开发领域...总之,"FLEX3嵌入到JSP,实现的jar包"是一个集合了Flex与JSP集成所需核心组件的资源包,帮助开发者轻松地在Java Web应用中集成Flex功能,创建具有动态交互和丰富用户体验的Web应用。
5. flex3_tagforjsp:这可能是一个Flex 3时代的JSP标签库,提供了在JSP页面中创建和操作Flex组件的标签。这些标签允许开发者在不编写Flash Builder代码的情况下,在JSP页面中直接定义Flex组件,增强了JSP页面的交互...
在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而Flex是Adobe公司开发的一种用于构建富互联网应用程序(RIA)的框架,主要基于ActionScript编程语言和Flash Player运行环境。Flash报表则通常指...
Flex 和 JSP 结合使用是一种常见的前端与后端交互方式,它允许开发人员...综上所述,Flex 和 JSP 的结合使用为构建动态、交互的 Web 应用提供了一个强大的平台,开发者可以通过熟练掌握这种技术来提升应用的用户体验。
Flex与JSP通信包,这里面是一个包文件
【JSP调用Flex4组件演示代码】是一个典型的Web应用程序开发示例,它结合了Java服务器页面(JSP)和Adobe Flex4技术,展示了这两者之间的交互。在现代Web开发中,这种混合技术允许开发者利用Flex4的强大富互联网应用...
在JSP和Flex通信过程中,Servlets可以作为数据处理的中间层,接收来自Flex的请求,处理后返回响应。而Filter则可以用于认证、日志记录等预处理或后处理任务。 7. **部署与配置**: 在J2EE环境下部署Flex应用,...
`flex-bootstrap-jsp.jar` 是一个关键的库文件,主要用于在JSP环境中启动Flex应用程序。它包含了必要的类和资源,使得Flex能够与Java后端进行通信,通过HTTP服务提供数据交换。这个jar包的核心功能是初始化Flex的SWF...
Flex for JSP.jar 是一个专为JavaServer Pages (JSP) 开发的库,它使得在JSP中集成Adobe Flex技术变得更为简便。Flex是一种基于ActionScript和MXML的开源框架,主要用于构建富互联网应用程序(RIA)。通过Flex,...
8. **测试与调试**:在开发过程中,使用Flex Builder或类似的工具进行调试,确保Flex和JSP之间的通信正常,并对各种浏览器和操作系统进行兼容性测试。 通过以上这些知识点,我们可以理解"flex整合JSP"涉及到的技术...
3. Blazeds:Blazeds是Adobe提供的一款开源服务器端技术,它作为Flex和Java之间的通信桥梁。Blazeds使用AMF(Action Message Format)协议,实现了低延迟、高效的数据传输,使得Flex客户端能与Java后端服务进行实时...
FlexModule_j2ee 是一个专为整合Flex与JSP应用设计的组件库,它提供了一个.jar文件,使得在Java服务器端(JSP)与客户端的Adobe Flex之间建立交互变得更加便捷。Flex是一种强大的富互联网应用程序(RIA)开发技术,...
把这个JSP页放在tomcat下,运行这个页就可以看到远程电脑的所有盘符,进入盘符即可上传下载文件,和灰鸽子很像哦!!!
总结来说,本文档提供了在Java JSP环境中集成Flex的详细步骤,包括设置Flex JSP标签库、配置Flex Data Services以及利用HTTPService进行XML通信。这种结合使得开发者能够充分利用Flex的图形界面优势,同时利用Java的...
标题 "flex 即时通信的源码 可参考" 提示我们关注的是使用Flex技术构建的即时通信系统,而描述 "用flex和jsp实现的一个网页即时通信的小程序,大家可以分享进行完善" 暗示这是一个基于Flex前端和JSP后端的简单Web...
5. **Flex与JSP的通信**:如果Flex应用和JSP页面需要紧密交互,可以利用Flex的ExternalInterface或Ajax技术实现两者之间的通信,动态地调整Z-index或其他CSS属性,以达到理想的显示效果。 6. **重新设计布局**:在...
总之,将Flex嵌入JSP页面是一个涉及前端和后端多方面技术的过程。解决遮挡问题需要综合运用HTML、CSS、JavaScript以及Flex和JSP的相关知识。通过不断学习和实践,我们可以有效地解决这类问题,创建出既美观又功能...
flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex iframe 支持在flash中嵌套入html jsp asp php等flex...
在本文中,我们将探讨如何将FLEX(Flash Flex)与JSP(JavaServer Pages)结合,以及如何利用HTTPService和XML进行通信。这个过程涉及到多个步骤,包括项目设置、库的集成以及配置文件的调整。 首先,我们需要创建...