著作權聲明:轉載時請以超連結形式標明文章原始出處和作者資訊及本聲明
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();
}
}