版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://ejb3.blogbus.com/logs/33647479.html
Actionscript与Web程序通信,跟浏览器和服务器的原理一样。Flash本身可以运行在浏览器中,所以可以把它当做浏览器客户端看待,遵循的是HTTP协议。这里的Web程序可以是JSP、PHP、ASP等。
在HTTP协议中,客户端发送一个request,服务器端接受request处理后返回一个response。在ActionScript 就是通过这种原理。在AS的flash.net包里主要由URLRequest,URLLoader,URLVariables这三个类负责处理通信任务。URLRequest类相当于request,URLLoader相当于response,只不过这里的request是由客户端发出,response由客户端接收,与服务器端相反,形成互通。而URLVariables则是作为发送数据的参数对象。
Actionscrip代码:
package {
import flash.display.Sprite;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLRequestMethod;
import flash.net.URLVariables;
public class Main extends Sprite {
private var request:URLRequest;
private var loader:URLLoader;
private var variable:URLVariables;
public function Main() {
request = new URLRequest("http://localhost:8080/flash/login");
variable = new URLVariables();
variable.username = "zhang";
request.method = URLRequestMethod.GET;
request.data = variable;
loader = new URLLoader();
loader.load(request);
}
}
}
以上代码只是向服务器发送一个request,并没有捕获服务端返回来的response;如要捕获,还需要对loader添加一个监听器
public function Main() {
request = new URLRequest("http://localhost:8080/flash/login");
variable = new URLVariables();
variable.username = "zhang";
request.method = URLRequestMethod.GET;
request.data = variable;
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE,onLoad)
loader.load(request);
}
private function onLoad(e:Event):void {
trace(loader.data);
}
服务器端:
public class Login extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public Login() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
System.out.println(username);
PrintWriter out = response.getWriter();
out.print("your username is"+username);
out.flush();
out.close();
}
}