Code
package
{
//用于与网页通信的东西
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.events.*;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.*;
public class Connection extends EventDispatcher
{
public function Connection()
{
}
public function sendMessage(para:URLVariables,Myurl:String,type:String="post",format:String="VARIABLES"):void
{//设置发送数据的变量
//设置发送数据的方式
var request:URLRequest=new URLRequest();
request.data=para;
request.url=Myurl;
switch (type)
{
case "post" :
request.method=URLRequestMethod.POST;//发送的方式
break;
case "get" :
request.method=URLRequestMethod.GET;//发送的方式
break;
}
//发送数据
var loader:URLLoader=new URLLoader();
switch (format)
{
case "VARIABLES" :
loader.dataFormat=URLLoaderDataFormat.VARIABLES;//发送数据的格式
break;
case "BIN" :
loader.dataFormat=URLLoaderDataFormat.BINARY;//发送数据的格式
break;
case "TEXT" :
loader.dataFormat=URLLoaderDataFormat.TEXT;//发送数据的格式
break;
}
loader.addEventListener(Event.COMPLETE,completeHandler);
loader.addEventListener(IOErrorEvent.IO_ERROR ,IoHandler);
try
{
loader.load(request);
}
catch (e:Error)
{
trace("失败");
}
}
private function completeHandler(e:Event):void
{
//处理返回的结果,如果插入数据库成功那么就可以
var evt:ConnectionEvent=new ConnectionEvent(ConnectionEvent.COMPLETE);
evt.data=URLLoader(e.target);
this.dispatchEvent(evt);
}
private function IoHandler(e:Event):void
{
this.dispatchEvent(new ConnectionEvent(ConnectionEvent.WRONG));
}
}
}
我们的目的是写一个类,用于与Jsp进行交互的类,这个类当中可以进行发送信息,以及可以进行信息返回处理。
接下来我们
写一个事件链接类,用于监听成功和错误的情况,它带有三个参数,和三个属性。
Code
package
{
import flash.events.Event;
import flash.net.*;
public class ConnectionEvent extends Event
{
public static const COMPLETE:String="complete";
public var data:URLLoader;
public static const WRONG:String="wrong";
public function ConnectionEvent(type:String,bubbles:Boolean=false,cancelable:Boolean=false)
{
super(type,false,false);
}
override public function clone():Event
{
return new ConnectionEvent(LoadEvent.LOADXML);
}
}
}
有了上面的类,我们进行了一个简单的测试:做一个简单的留言板:
这个留言板:带五个参数:姓名,性别,邮件,电话,信息等五个参数,如下
问题:我们现在所做的事情就是发送这些数据到后台当中。通过后台处理和数据库进行交互
在as3.0,当中使用这个方法绑定一些变量。如
var para:URLVariables=new URLVariables();
para.Name=Name.text;
para.sex=Sex.text;
para.mail=Mail.text;
para.telephone=Telephone.text;
para.msg=Msg.text
通过绑定了这些参数,我们就可以使用我们封装好的类进行发上数据了
conn=new Connection();
conn.addEventListener(ConnectionEvent.COMPLETE,completeHander);
conn.addEventListener(ConnectionEvent.WRONG,wrongHandler);
conn.sendMessage(para,ConnectionUrl.Liuyanurl);
这样我们就可以发送一个绑定后的url编码了。ConnectionUrl.Liuyanurl 就是我们url地址
package
{
public final class ConnectionUrl
{
public static const Liuyanurl:String="http://localhost:8080/Liuyan/Liuyan.jsp";
}
}
这样就可以实现了简单的发送了。这个类同样可以与php和其他asp进行交互。
Code
用法:下面是一个简单的留言板功能。可以发送信息给jsp文件。通过jsp文件和mysql进行数据插入。
package
{
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.text.*;
import flash.utils.ByteArray;
public class Liuyan extends MovieClip
{
private var para:URLVariables;
private var conn:Connection;
public function Liuyan()
{
SendBtn.addEventListener(MouseEvent.MOUSE_DOWN,onDown);
CancelBtn.addEventListener(MouseEvent.MOUSE_DOWN,onCancel);
}
private function onCancel(event:MouseEvent):void
{
Name.text="";
Sex.text="" ;
Mail.text="" ;
Telephone.text="";
Msg.text="";
}
private function onDown(event:MouseEvent):void
{
Send();
}
private function Send():void
{
if (Name.text!="" && Sex.text!="" && Mail.text!="" && Telephone.text!="" && Msg.text!="")
{
var para:URLVariables=new URLVariables();
para.name=Name.text;
para.sex=Sex.text;
para.mail=Mail.text;
para.telephone=Telephone.text;
para.msg=Msg.text;
conn=new Connection();
conn.addEventListener(ConnectionEvent.COMPLETE,completeHander);
conn.addEventListener(ConnectionEvent.WRONG,wrongHandler);
conn.sendMessage(para,ConnectionUrl.Liuyanurl);
}
else
{
var worngMsg:TextField=new TextField();
worngMsg.text="对不起,信息错误";
worngMsg.x=400;
worngMsg.y=190;
worngMsg.textColor=0xffffff;
addChild(worngMsg);
}
}
private function completeHander(event:ConnectionEvent):void
{
var para:URLLoader=event.data;//返回的信息处理
trace(para.data);
trace(para.data.success);
}
private function wrongHandler(event:ConnectionEvent):void
{
throw new Error("cuowu");
}
}
}
写一个jsp的页面:这个页面接受flash客户端传过来的参数,我们使用request.getParameter 方法接受客户端发送的url编码
通过接收后,使用一个数据库插入的语句把相关的变量插入到数据表当中
Code
<%@ page language="java" pageEncoding="UTF-8" import="java.sql.*"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<jsp:useBean id="bean" class="com.ConnectServer"></jsp:useBean>
<%
Connection conn=bean.getConnection();
String name=request.getParameter("name");
String sex=request.getParameter("sex");
String mail=request.getParameter("mail");
String telephone=request.getParameter("telephone");
String msg=request.getParameter("msg");
System.out.println(name);
String sql="insert into liuyan2(name,sex,mail,telephone,msg) values('"+name+"','"+sex+"','"+mail+"','"+telephone+"','"+msg+"')";
int cout= bean.executeUpdate(sql);
if(cout>0)
{
out.clear();
out.print("success="+"ok");
}
else
{
out.print("success="+"fail");
}
%>
问题:Flash 如何接受jsp返回的数据?
通过jsp out.print 的方法进行输出页面,这样子就可以输出后台,客户端就可以接收返回信息
Code
这里要注意一个地方:out.clear();
out.print("success="+"ok");
我们希望通过返回jsp输出内容让flash player 获取到,但是如果没有out.clear()这一行我们会经常出现变量为undefine
这个让我困惑了很久,在网上找到一个关于flash 获取jsp返回变量出现undefine的情况。我按照它的做法,可以解决到我的问题。但是至于为什么,这真的是很迷惑。
剩下的发布一个javabean封装的操作类,可以通过这个类进行一些数据库的操作:这里使用的mysql数据库进行连接操作
里面封装了连接,查询,插入,释放等操作。可以直接使用。如果不是mysql仅仅可以修改下面的类
Code
package com;
import java.sql.*;
public class ConnectServer {
private Connection con;
private ResultSet rs;
private static String url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=GB2312";
private static String usernamer="root";
private static String password="123";
private static String diver="com.mysql.jdbc.Driver";//加载mysql的驱动
public static Connection getConnection() throws SQLException{
try
{
Class.forName(diver);
}
catch(ClassNotFoundException e)
{
e.printStackTrace();
return null;
}
return DriverManager.getConnection(url,usernamer,password);
}
public ResultSet executeQuery(String sql){
try
{
con=ConnectServer.getConnection();
Statement statement=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
rs=statement.executeQuery(sql);
}
catch(SQLException e)
{
e.printStackTrace();
}
return rs;
}
public int executeUpdate(String sql){
int count=0;
Statement statement=null;
try
{
con=ConnectServer.getConnection();
statement=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
count=statement.executeUpdate(sql);
}
catch(SQLException e)
{
e.printStackTrace();
}
finally
{
try
{
if(statement!=null)
statement.close();
if(con!=null)
con.close();
}
catch(SQLException ex)
{
ex.printStackTrace();
}
}
return count;
}
public void freeRset(ResultSet rset){
try
{
if(rs!=null)
{
rs.close();
con.close();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}