`
兩ting
  • 浏览: 78431 次
  • 性别: Icon_minigender_2
  • 来自: 成都
社区版块
存档分类
最新评论

Flex与Severlet(Jsp)通信传递中文参数乱码问题的解决

    博客分类:
  • flex
阅读更多

 

Java代码
  1. var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp? musicname="+music_name.text+"
  2. &singername="+singer_name.text;
  1. var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp? musicname="+music_name.text+"
  2. &singername="+singer_name.text;
var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp? musicname="+music_name.text+"
&singername="+singer_name.text; 

 

 

 

显然这里是上传音乐过程,顺便把音乐名及歌手名上传上去,其中音乐名与哥手名是中文,我用自己的机子开启TOMCAT做服务器,然后开启本地浏览器登陆,上传音乐,没一点问题,中文可以在后台打印出来.但是通过IP访问我的服务器时,就出现问题了,浏览器将"musicname="+music_name.text+"&singername="+singer_name.text"

两个参数musicname与singername解析成了一个参数,于是后者在JSP中用request.getParameter("singername");

其结果为null所以就报了空指针错误.自然上传过程中也会报错.那么我是怎么解决的呢?用代码来说明问题.

FLEX中代码如下:

 

 

var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp? musicname="+

encodeURIComponen(music_name.text) +"&singername="+

encodeURIComponent (singer_name.text);

var request:URLRequest = new URLRequest(url); request.method="post";

大家注意看,第二次代码与第一次代码中URL的不同,见红色部分.这里就是对中文参数进行编码,在FLEX中默认编码方式为

UTF-8,这里是对中文参数用UTF-8进行编码,那么在后台我们要对其行进解码.

JSP中,核心代码如下:

 

 

 

String mp3name=new String(musicname.getBytes("ISO8859-1"),"utf-8");

String mp3singer=new String(singername.getBytes("ISO8859-1"),"utf-8");

这是一个解码的过程.

然后经过印,就可得到我们梦寐以求的浏览器传过来的中文参数了.到此,FLEX中上传文件,附代中文参数的问题得到解决.

有些朋友照上面进行操作还可能出现乱码问题,原因可能如下:

即在你的FLEX页面中有如下设置:

System.useCodePage=true;

 

 

System.useCodePage=true;是用你浏览器的编码方式来解行编码,那么你在后台用UTF-8,或者gbk解码都可能出现乱码问题,甚至出现解析参数出错.我们提供的解决方法如下

或者将 System.useCodePage=false;

或者将这句话注释即可(默认为false).

这个问题困惑了我两天,今天终于解决,希望有同样困惑的朋友能早日解决其问题.

下面附上完整代码:

Flex:(附中文参数文件上传部份,这里只写了函数部份,触发函数的组件大家可以自己写)

 

Java代码
  1. //上传音乐部份
  2. public var myFileReference:FileReference = new FileReference();
  3. public var mp3Type:FileFilter=new FileFilter("MP3(*.mp3)","*.mp3");
  4. public var allowType:Array=new Array(mp3Type);
  5. private function uploadMP3():void{
  6. // System.useCodePage=false;//GBK
  7. var musicname:String=music_name.text;
  8. var singername:String=singer_name.text;
  9. if(musicname==""){
  10. mx.controls.Alert.show("音乐名称不能为空");
  11. }elseif(singername==""){
  12. mx.controls.Alert.show("歌手不能为空");
  13. }elseif(musci_sName.text==""){
  14. mx.controls.Alert.show("上传音乐不能为空");
  15. }else{
  16. // Alert.show("歌手名:"+singername);
  17. // Alert.show("歌曲名"+musicname);
  18. var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp?musicname="+encodeURIComponent(music_name.text)+"&singername="+encodeURIComponent(singer_name.text);
  19. var request:URLRequest = new URLRequest(url);
  20. request.method="post";
  21. try
  22. {
  23. //上传文件
  24. myFileReference.upload(request);
  25. CursorManager.setBusyCursor();
  26. // showDetail.text = "upload";
  27. }catch (error:Error){
  28. cursorManager.removeBusyCursor();
  29. removeAllEvent();
  30. mx.controls.Alert.show("上传出错");
  31. }
  32. }
  33. }
  34. public function browse():void{
  35. //浏览本地本地文件
  36. myFileReference.browse(allowType);
  37. //为打开选择框定义事件处理
  38. myFileReference.addEventListener(Event.SELECT, selectHandler);
  39. //在上传过程中触发的事件处理
  40. myFileReference.addEventListener(ProgressEvent.PROGRESS, onProcess);
  41. // myFileReference.addEventListener(Event.COMPLETE, onComplete);
  42. //在上传过程中出错处理
  43. myFileReference.addEventListener(IOErrorEvent.IO_ERROR,ioErrerHandler);
  44. //处理返回信息
  45. myFileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,returnmsgHandler);
  46. }
  47. //先择文件
  48. public function selectHandler(event:Event):void{
  49. musci_sName.text=myFileReference.name;
  50. }
  51. //取消文件上传
  52. public function uploadCancel():void{
  53. myFileReference.cancel();
  54. CursorManager.removeBusyCursor();
  55. removeAllEvent();
  56. }
  57. //上传过程中的事件
  58. public function onProcess():void{
  59. mx.managers.CursorManager.setBusyCursor();
  60. }
  61. import mx.managers.CursorManager;
  62. public function returnmsgHandler(event:DataEvent):void{
  63. CursorManager.removeBusyCursor();
  64. var result:Boolean=event.data.toString() as Boolean;
  65. mx.controls.Alert.show("上传成功");
  66. sendRequestToGetMusicInfo();
  67. }
  68. //上传过程中出错处理
  69. public function ioErrerHandler(event:IOErrorEvent):void{
  70. removeAllEvent();
  71. CursorManager.removeBusyCursor()
  72. Alert.show("上传出错","错误");
  73. }
  74. //remove all the listerners
  75. public function removeAllEvent():void{
  76. myFileReference.removeEventListener(Event.SELECT, selectHandler);
  77. //在上传过程中触发的事件处理
  78. myFileReference.removeEventListener(ProgressEvent.PROGRESS, onProcess);
  79. // myFileReference.removeEventListener(Event.COMPLETE, onComplete);
  80. myFileReference.removeEventListener(IOErrorEvent.IO_ERROR,ioErrerHandler);
  81. myFileReference.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,returnmsgHandler);
  82. }
  1. //上传音乐部份
  2. public var myFileReference:FileReference = new FileReference();
  3. public var mp3Type:FileFilter=new FileFilter("MP3(*.mp3)","*.mp3");
  4. public var allowType:Array=new Array(mp3Type);
  5. private function uploadMP3():void{
  6. // System.useCodePage=false;//GBK
  7. var musicname:String=music_name.text;
  8. var singername:String=singer_name.text;
  9. if(musicname==""){
  10. mx.controls.Alert.show("音乐名称不能为空");
  11. }elseif(singername==""){
  12. mx.controls.Alert.show("歌手不能为空");
  13. }elseif(musci_sName.text==""){
  14. mx.controls.Alert.show("上传音乐不能为空");
  15. }else{
  16. // Alert.show("歌手名:"+singername);
  17. // Alert.show("歌曲名"+musicname);
  18. var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp?musicname="+encodeURIComponent(music_name.text)+"&singername="+encodeURIComponent(singer_name.text);
  19. var request:URLRequest = new URLRequest(url);
  20. request.method="post";
  21. try
  22. {
  23. //上传文件
  24. myFileReference.upload(request);
  25. CursorManager.setBusyCursor();
  26. // showDetail.text = "upload";
  27. }catch (error:Error){
  28. cursorManager.removeBusyCursor();
  29. removeAllEvent();
  30. mx.controls.Alert.show("上传出错");
  31. }
  32. }
  33. }
  34. public function browse():void{
  35. //浏览本地本地文件
  36. myFileReference.browse(allowType);
  37. //为打开选择框定义事件处理
  38. myFileReference.addEventListener(Event.SELECT, selectHandler);
  39. //在上传过程中触发的事件处理
  40. myFileReference.addEventListener(ProgressEvent.PROGRESS, onProcess);
  41. // myFileReference.addEventListener(Event.COMPLETE, onComplete);
  42. //在上传过程中出错处理
  43. myFileReference.addEventListener(IOErrorEvent.IO_ERROR,ioErrerHandler);
  44. //处理返回信息
  45. myFileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,returnmsgHandler);
  46. }
  47. //先择文件
  48. public function selectHandler(event:Event):void{
  49. musci_sName.text=myFileReference.name;
  50. }
  51. //取消文件上传
  52. public function uploadCancel():void{
  53. myFileReference.cancel();
  54. CursorManager.removeBusyCursor();
  55. removeAllEvent();
  56. }
  57. //上传过程中的事件
  58. public function onProcess():void{
  59. mx.managers.CursorManager.setBusyCursor();
  60. }
  61. import mx.managers.CursorManager;
  62. public function returnmsgHandler(event:DataEvent):void{
  63. CursorManager.removeBusyCursor();
  64. var result:Boolean=event.data.toString() as Boolean;
  65. mx.controls.Alert.show("上传成功");
  66. sendRequestToGetMusicInfo();
  67. }
  68. //上传过程中出错处理
  69. public function ioErrerHandler(event:IOErrorEvent):void{
  70. removeAllEvent();
  71. CursorManager.removeBusyCursor()
  72. Alert.show("上传出错","错误");
  73. }
  74. //remove all the listerners
  75. public function removeAllEvent():void{
  76. myFileReference.removeEventListener(Event.SELECT, selectHandler);
  77. //在上传过程中触发的事件处理
  78. myFileReference.removeEventListener(ProgressEvent.PROGRESS, onProcess);
  79. // myFileReference.removeEventListener(Event.COMPLETE, onComplete);
  80. myFileReference.removeEventListener(IOErrorEvent.IO_ERROR,ioErrerHandler);
  81. myFileReference.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,returnmsgHandler);
  82. }
//上传音乐部份
		    
		    public var myFileReference:FileReference = new FileReference();
	        public var mp3Type:FileFilter=new FileFilter("MP3(*.mp3)","*.mp3");
	        public var allowType:Array=new Array(mp3Type);
	          
		    private function uploadMP3():void{
		    // 	   System.useCodePage=false;//GBK
		   	   var musicname:String=music_name.text;
		   	   var singername:String=singer_name.text;
		   	   
		   	   if(musicname==""){
		   	      mx.controls.Alert.show("音乐名称不能为空");
		   	   }else if(singername==""){
		   	      mx.controls.Alert.show("歌手不能为空");
		   	   }else if(musci_sName.text==""){
		   	      mx.controls.Alert.show("上传音乐不能为空");
		   	   }else{
		   	  // 	Alert.show("歌手名:"+singername);
		   	   //	Alert.show("歌曲名"+musicname);
		   	     var url:String="http://202.197.108.65:8080/Flex/uploadmp3.jsp?musicname="+encodeURIComponent(music_name.text)+"&singername="+encodeURIComponent(singer_name.text);
		         
		         var request:URLRequest = new URLRequest(url);
		         request.method="post";
		         
		         try
	             {
		      	  //上传文件
		          myFileReference.upload(request);
		          CursorManager.setBusyCursor();
		          //  showDetail.text = "upload";
	           }catch (error:Error){
	           	  cursorManager.removeBusyCursor();
	           	  removeAllEvent();
		          mx.controls.Alert.show("上传出错");
		          
	           }
		   	   }
		    }
	      
	        public function browse():void{
	        //浏览本地本地文件
	        myFileReference.browse(allowType);
	        //为打开选择框定义事件处理
	        myFileReference.addEventListener(Event.SELECT, selectHandler);
	        //在上传过程中触发的事件处理
	        myFileReference.addEventListener(ProgressEvent.PROGRESS, onProcess);
	        //  myFileReference.addEventListener(Event.COMPLETE, onComplete);
	        //在上传过程中出错处理
	        myFileReference.addEventListener(IOErrorEvent.IO_ERROR,ioErrerHandler);
	        //处理返回信息
	        myFileReference.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,returnmsgHandler);
                   
	        }    
	       
	        //先择文件   
	        public function selectHandler(event:Event):void{ 
	            musci_sName.text=myFileReference.name; 
	        }
	        
	        //取消文件上传
	        public function uploadCancel():void{
	            myFileReference.cancel();
	            CursorManager.removeBusyCursor();
	            removeAllEvent();
	        }
	        
	        //上传过程中的事件
	        public function onProcess():void{
	          mx.managers.CursorManager.setBusyCursor();
	        }
	        

	      import mx.managers.CursorManager;
	      public function returnmsgHandler(event:DataEvent):void{
	      	     CursorManager.removeBusyCursor();
	             var result:Boolean=event.data.toString() as Boolean;
	             mx.controls.Alert.show("上传成功");
	             sendRequestToGetMusicInfo();
	      }
	      
	        //上传过程中出错处理
	      public function ioErrerHandler(event:IOErrorEvent):void{
	          removeAllEvent();
	          CursorManager.removeBusyCursor()
	          Alert.show("上传出错","错误");
	      }
	      
	      //remove all the listerners
	        public function removeAllEvent():void{
	        myFileReference.removeEventListener(Event.SELECT, selectHandler);
	        //在上传过程中触发的事件处理
	        myFileReference.removeEventListener(ProgressEvent.PROGRESS, onProcess);
	       // myFileReference.removeEventListener(Event.COMPLETE, onComplete);
	        myFileReference.removeEventListener(IOErrorEvent.IO_ERROR,ioErrerHandler);
	        myFileReference.removeEventListener(DataEvent.UPLOAD_COMPLETE_DATA,returnmsgHandler);
	     }
		    

 

 

后代JSP中代码如下:

 

Java代码
  1. String musicname = request.getParameter("musicname");
  2. String singername = request.getParameter("singername");
  3. String mp3name=new String(musicname.getBytes("ISO8859-1"),"utf-8");
  4. String mp3singer=new String(singername.getBytes("ISO8859-1"),"utf-8");
  5. System.out.println("the muicsname:---"+mp3name);
  6. System.out.println("the singer name:++++++++"+mp3singer);

 

来自as3 文档
一个布尔值,它告诉 Flash Player 使用哪个代码页来解释外部文本文件。 当该属性设置为 false 时,Flash Player 使用 Unicode 解释外部文本文件。 (保存这些文件时,必须使用 Unicode 对其进行编码。) 当该属性设置为 true 时,Flash Player 使用运行播放器的操作系统的传统代码页来解释外部文本文件。 useCodePage 的默认值是 false。
分享到:
评论

相关推荐

    jsp + severlet +中文api

    jsp + severlet +中文api jsp、servlet 和中文 API 是 web 开发中的三个重要概念,它们之间存在着紧密的联系。jsp 是一种基于 Java 的服务器端脚本语言,servlet 是 Java 中的一种服务器端组件,而中文 API 则是指...

    宠物医院jsp+severlet

    【宠物医院jsp+severlet】项目是一个基于Java Web技术实现的在线宠物医疗服务系统。这个系统采用JavaServer Pages (JSP) 和Servlet技术构建,旨在为用户提供关于宠物医疗的便捷服务,如预约挂号、在线咨询、病例记录...

    java中级笔记+severlet jsp 分页 ajax等技术的笔记

    Java中级笔记涵盖了多个关键的Web开发技术,包括Servlet、JSP、分页和Ajax。这些技术在构建动态、交互式的Web应用程序中起着至关重要的作用。 1. **Servlet**:Servlet是Java EE平台中的核心组件,它是一个Java类,...

    severlet与Jsp的web组件开发

    ### Servlet与JSP Web组件开发概述 在现代Web开发领域,Servlet与JSP是构建动态网页和Web应用程序的两大核心技术。它们共同构成了Java Web开发的基础,使得开发者能够创建功能丰富的Web应用,处理复杂的用户请求,...

    JSP+SEVERLET+JAVABEAN实现登录

    在实际应用中,Servlet会通过JDBC(Java Database Connectivity)与MySQL数据库进行通信,查询用户凭据的有效性。 ### 安全性和用户体验 在登录过程中,安全性是至关重要的。在前端,通过JavaScript函数`...

    jsp与severlet课程设计——在线考试系统

    1. **JSP与Servlet基础** JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,使得页面具有动态内容生成的能力。Servlet则是一个Java类,用于处理HTTP请求并生成响应。在JSP中,Servlet是幕后工作的...

    JSP(severlet,MySQL数据库)简单增删改查

    JSP简单的增删改查,对简单一张student表,通过JSP界面对数据库进行操作的例子,很不错,对初学者来说很有用处。 其中severlet已经配置好了,百度文库里也有类似的资源,但那里面配置的是错的。

    就业直通车severlet和jsp考试

    3. **请求处理与响应**:试题可能涉及到HttpServletRequest和HttpServletResponse接口的使用,如何获取和设置请求参数,以及如何构造响应内容。 4. **会话管理**:Servlet和JSP提供了一套机制来跟踪用户的会话,...

    severlet

    ### Servlet 与 JSP 的比较 `Servlet` 和 JSP(Java Server Pages)都是 Java Web 开发中的重要组成部分,但它们之间也存在明显的区别: - **代码结构**:`Servlet` 主要负责业务逻辑处理,而 JSP 更侧重于视图层...

    图书管理系统(jsp+spring+mysql+severlet+hiberate)

    【图书管理系统(jsp+spring+mysql+severlet+hibernate)】 图书管理系统是一个常见的IT项目,尤其在教育环境中,常被用作学生或教师的期末作业来实践Web开发技术。这个系统的核心是整合了多种技术,包括JSP(Java...

    JSP severlet 动态 base64 编码 图片 显示处理

    ### JSP Servlet 动态 Base64 编码图片显示处理 #### 为什么需要使用 Base64 图片信息 在 Web 开发过程中,有时需要将图片等二进制数据转换为文本格式进行传输或存储。Base64 是一种常见的编码方式,它能够将任意...

    javaweb+jsp+severlet computer-grede-system

    综上所述,"javaweb+jsp+severlet computer-grede-system"是一个综合运用JavaWeb技术的项目,涉及到后端开发、数据库操作、用户认证、前端交互等多个环节,对于学习和提升JavaWeb开发技能具有很好的实践价值。

    JSP题库与试卷自动生成系统. (JSP+Servlet+SQL 2008+Tomcat)

    自己做的,毕业设计。能够根据教师的考试指令...在线利用JS评出选择填空判断的成绩。 后期再由教师评卷,给出简答题 分数,以致最后得出一个学生的分数。...文件内有任务书 如果资源无法打开,请在rar前面手动添加个1....

    Jsp 页面注册与登录实现

    这种实现方式虽然简单明了,但在实际生产环境中还需考虑更多的安全性和性能问题,例如SQL注入防范、密码加密存储等。此外,随着技术的发展,目前更多的项目可能会采用更加现代化的框架和技术栈来实现此类功能。不过...

    jsp+servlet+jdbc案例

    在`jsp`中,`servlet`常用于实现控制器的角色,负责接收请求,调用业务逻辑,然后将结果传递给`jsp`页面进行渲染。 `mvc`架构模式是软件设计中的一个经典模式,主要用于分离应用程序的不同部分,包括模型(Model)...

    Servlet实现增删改查功能_+jsp登录页面.

    "Servlet实现增删改查功能_+jsp登录页面" 本文将从 Servlet 实现增删改查功能和 jsp 登录页面两个方面对知识点进行总结和解释。 MVC 模式 MVC 模式是一种软件架构模式,它将应用程序分为三个基本组件:模型...

    jsp-api.jar和servlet-api依赖包

    **JSP(JavaServer Pages)API 和 Servlet API 知识详解** JSP(JavaServer Pages)和Servlet是Java EE(Enterprise Edition)中的两个核心技术,它们主要用于构建动态Web应用程序。这两个API,即`jsp-api.jar`和`...

    severlet实现web人员管理,mysql数据库

    总结,通过Servlet与MySQL的结合,我们可以构建一个功能完善的Web人员管理系统,处理用户的请求,与数据库进行交互,实现人员信息的CRUD操作。同时,理解并掌握Servlet的生命周期、HTTP请求处理以及JDBC数据库操作是...

    hr.rar_hr数据库_java 后台 oracle_jsp hr_oracle_severlet

    在这个HR系统中,JSP页面负责展示数据,与用户交互,同时通过内置的Action或Tag库与后台Servlet进行通信。开发者可以通过EL(Expression Language)和JSTL(JavaServer Pages Standard Tag Library)简化页面逻辑,...

    网上商城jsp+servlet+javabean

    它们包含了属性(如用户名、商品ID、价格)以及对应的getter和setter方法,使得数据可以在JSP、Servlet之间传递和共享,提高了代码的可读性和可维护性。 在实际开发中,JSP、Servlet和JavaBean的配合工作流程如下:...

Global site tag (gtag.js) - Google Analytics