ext2.0+java 文件上传
文件上传其实是一个很基本的页面操作,以前也做过。在jsp+servlet时,关键点是只要指定jsp用于提交上传文件资源的form的enctype属性为multipart/form- data即可。这个属性 其实是设置了提交的内容是以数据流的方式提交给servlet的。当然也包含了文件的流,这样在servlet里利用common- fileupload.jar里的接口方法,解析这个流,就可以获得上传的文件的信息。
今天在利用ext的js代替了jsp时,却碰到了点小麻烦。现在总结如下。
其实利用ext实现的原理是一样的,只是编写js的过程中要主要,当发送ajax请求时,要保证所发的请求是在enctype为multipart/form-data的form中,否则,后台无法解析上传文件信息。
对于表单的定义可以采用如下方法:
var uploadForm = new Ext.form.FormPanel({ url: "AuthManager.do?action=addCertificate",//ajax请求的地址 rame:true,//要设为true fileUpload:true,//一定要这一项,表明这个表单是做文件上传所用 id:'uploadForm', height:130, labelAlign: 'right', bodyStyle:'padding:6px 5px 0', //enctype : 'multipart/form-data', //其实这一项是没有用的,fileUpload:true的令一层意思也就是这个 items: new Ext.form.TextField({ xtype: 'textfield', //style:'margin-top:15px ', id:'upload_filepath', name:'file', allowBlank:false, fieldLabel:'选择文件', inputType:'file' //文件的形式 }) })
在需要完成提价功能的时候,可以这么调用uploadForm.getForm().submit();
这里需要指出的是,有一种做法会导致上传失败的:form依旧是如上的写法,只是里面没有url这一个属性,form是在发送ajax请求时调用的:
var uploadWin = new Ext.Window({ title:'<span style="\" mce_style="\""font-size:12px\">上传文件</span>', width:400, height:130, items:[uploadForm],//引入了上传文件的表单 buttonAlign :'center', buttons:[{ text:'<span style="\" mce_style="\""font-size:12px\">上传</span>', handler:uploadFile//调用函数完成提交动作 }] }); //导入证书函数function uploadFile(){
Ext.Ajax.request({ url: "AuthManager.do?action=addCertificate",
....})
}
这样发出的请求跟第一种是一模一样的,但是却会导致上传的失败。从抛出的异常:
相关文档:
在进入我们今天的话题前,先来看看下面这段代码,你知道它的结果吗?
程序代码
public class StringTest1{
public static void main(String[] args) {
String str1 = "abc";
String str2 = "abc";
&nbs ......
Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生。
一、从根本上认识java.lang.String类和String池
首先,我建议先看看String类的源码实现,这是从本质上认识String类的根本出发点。从中可以看到:
1、String类是final的,不可被继承。publ ......
一、理解多线程
多线程是这样一种机制,它允许在程序中并发执行多个指令流,每个指令流都称为一个线程,彼此间互相独立。
线程又称为轻量级进程,它和进程一样拥有独立的执行控制,由操作系统负责调度,区别在于线程没有独立的存储空间,而是和所属进程中的其它线程共享一个存储空间,这使得线程间的通信 ......
Map存储的是key->value的值对,key的值是唯一的,而value的值可以重复。通常使用的是HashMap或TreeMap,如果考虑性能,使用HashMap。TreeMap使用红黑树实现,保留有key值顺序性,会自动按照key值排序。
默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数 ......