JSP文件上传代码
元组类型,即 Tuple 常在脚本语言中出现,例如 Scala 的 ("Unmi", "china@qq.com", "blahbla")。元组可认为是象数组一样的容器,它的目的是让你方便构造和引用,例如 Pair 可认为是一个只能存两个元素的元组,像是个 Map; 真正的元组应该是可以任意多个元素的容器,绕来绕去,它还是数组,或列表,所以我们实现上还是要借助于数组或是列表。
先看 Scala 中什么是元组:
val tuple = ("Unmi", "fantasia@sina.com", "blahblah...")
println(tuple._1) //输出 Unmi
Scala 中访问从 1 开始,用 ._1 方式来访问其中的元素。
场景:当在一个方法中, 你需要返回几个对象,这几个对象的类型一致,你可以返回一个数组;如果几个对象的类型不同呢,当然你可以返回一个Object[]数组,可是这样在使用结果数组的时候,就需要强转对象的类型,会导致类型不安全;也可以定义一个dto,当多个场景下需要使用的不同,需要定义多个dto,这样会类爆炸,而且重用率极低;在非常接近Java语言的Scala里有元组的定义:val t = (1, 3.14, "Fred"),就是一个不同类型的数据放到一个线性集合里,在Java里我们可以模拟出一个类似的结构,以适合上面的场景。
示例一:
参照于此,写出一个 Java 版本的 Tuple,为增长你的键盘的使用寿命,我们把方法名也缩短了,例如 make 缩写为 mk,引用元素的方法名为 _,仍然保持 Java 的习惯,索引从 0 开始:
package com.sf.tuple; /**
* A simple java tuple
*/
public class Tuple<A> { /**
* 静态方法
*
* @param args
* @return
*/
public static <A> Tuple mk(A... args) {
return new Tuple(args);
} private A[] items; /**
* 私有构造函数
*
* @param items
*/
private Tuple(A[] items) {
this.items = items;
} public A _(int index) {
if (index < 0 || items == null || index > items.length - 1) {
return null;
}
return items[index];
} public static void main(String[] args) {
Tuple<String> t = Tuple.mk("Unmi", "china@qq.com");
System.out.println(t._(0)); // 输出 Unmi
System.out.println(t._(1)); // 输出 china@qq.com
}
}
结果:
Unmi
china@qq.com
代码间加了一个 main 测试方法,上面的代码输出什么无需多说了。
这样就实现了 Tuple.mk() 后接任意多个参数来构造一个 Tuple 对象。
示例二:
package com.sf;
import com.google.common.base.Optional;
abstract class Tuple {
public static void main (String[] args) {
Tuple tuple2 = Tuple.<String, Integer>of("hello", 1);
Tuple tuple3 = Tuple.<String, Integer, String>of("hello", 1, "hi");
System.out.println(tuple2._1().get() + "|" + tuple2._2().get());
System.out.println(tuple3._1().get() + "|" + tuple3._2().get() + "|" + tuple3._3().get());
}
public static <E, T> Tuple of (E e, T t) {
return new Tuple2(e, t);
}
public static <E, T, K> Tuple of (E e, T t, K k) {
return new Tuple3(e, t, k);
}
public abstract <E> Optional<E> _1 ();
public abstract <E> Optional<E> _2 ();
public abstract <E> Optional<E> _3 ();
}
class Tuple2<E, T> extends Tuple {
private E e;
private T t;
Tuple2 (E e, T t) {
this.e = e;
this.t = t;
}
@Override
public Optional<E> _1 () {
return Optional.of(e);
}
@Override
public Optional<T> _2 () {
return Optional.of(t);
}
@Override
public <E> Optional<E> _3() {
return Optional.absent();
}
}
class Tuple3<E, T, K> extends Tuple {
private E e;
private T t;
private K k;
Tuple3 (E e, T t, K k) {
this.e = e;
this.t = t;
this.k = k;
}
public Optional<E> _1 () {
return Optional.of(e);
}
public Optional<T> _2 () {
return Optional.of(t);
}
public Optional<K> _3 () {
return Optional.of(k);
}
}
结果:
hello|1
hello|1|hi
上面的代码中定义了三个类,父类为抽象类Tuple,此父类就是定义了一些模板方法,方法名有点不像Java方法名的命名规范,那是模仿scala里的方法命名,Tuple类没有其他作用,只是提供静态方法,创建Tuple的之类充当容器,提供多个容器的入口;
Tuple2<E,T>可以充当两个对象的容器,该容器内保持两个对象的引用,通过方法_1(), _2()获取第一个和第二个对象的值,在此并没有直接返回对象,而是返回一个Optional对象,这是提醒使用返回值的方法做非Null检查;
Tuple3<E,T,K>原理类似Tuple2,类似的可以做针对4个以及更多的对象容器,作为方法返回参数类型。
JSP文件上传代码的更多相关文章
- jsp文件上传
整理了一下jsp的上传下载,由客户端到服务端,包括一些常规的业务 一客户端 先看最基本的情况 1 在表单设置multipart/form-data,通过提交键把数据和附件一次性提交的.服务器更多的是对 ...
- JSP-Runoob:JSP 文件上传
ylbtech-JSP-Runoob:JSP 文件上传 1.返回顶部 1. JSP 文件上传 JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图 ...
- 不用外部JAR包,自己实现JSP文件上传!
看书上(JSP应用与开发技术)使用JSP文件上传,写了个真无语,压根就有很多问题,上传500KB的文件传过去后只剩350KB,而且编码必须是GBK.GB2312,否则传过去的文件都数据截取不正确. 琢 ...
- JSP 文件上传下载系列之二[Commons fileUpload]
前言 关于JSP 文件上传的基础和原理在系列一中有介绍到. 这里介绍一个很流行的组件commons fileupload,用来加速文件上传的开发. 官方的介绍是: 让添加强壮,高性能的文件到你的se ...
- servlet3.0获取参数与文件上传代码示例
转: servlet3.0获取参数与文件上传代码示例 2018年08月26日 20:25:35 苏凯勇往直前 阅读数:98 package com.igeek.servlet; import ...
- php文件上传代码解析
php文件上传代码解析 is_uploaded_file() //函数判断指定的文件是否是通过 HTTP POST 上传的,返回一个布尔值. $_FILES['upfile']['tmp_name' ...
- JSP 文件上传
JSP 文件上传 JSP可以通过HTML的form表单上传文件到服务器. 文件类型可以是文本文件.二进制文件.图像文件等其他任何文档. 创建文件上传表单 接下来我们使用HTML标签来创建文件上传表单, ...
- JSP文件上传--Smartupload组件
把smartupload.jar copy到D:\apache-tomcat-7.0.57\lib下. 创建htm上传文件:smartupload_demo01.htm 由于是上传文件,需要对表单进行 ...
- 实现Magento多文件上传代码功能开发
在Magento中上传单个文件很简单,可以直接在继承的Mage_Adminhtml_Block_Widget_Form类中直接添加如下组件Field: 对于图片: $fieldset->a ...
随机推荐
- C# DateTime和DateTime?格式化时间
DateTime: <%= Model.CreateTime.ToString("yyyy年MM月dd日 H时m分s秒")%> DateTime?: <%= ...
- SQL SERVER数据导入
我的博客已好久没有文字方面的记载了,好歹昨天已经结束软件设计师的考试了,今天怎么说也需要锻炼自己的写作能力.不然真怕自己又像上一年一样,一停就一年多了. 想好好学习数据库(SQL SERVER)方面的 ...
- NOI2015考试小结
这次NOI2015有幸获得金牌考进了国家集训队,意味着我的OI退役时间既省选之后有延迟了好几个月,又有了新的目标吧. 先说一下考试之外的感受吧,学军宿舍很牛X,接待NOIers而不提供插座,唯一可以用 ...
- JSP中脚本、声明和表达式的本质区别
JSP脚本元素 使用JSP脚本元素可以将Java代码嵌入到JSP页面里,这些Java代码将出现在由当前JSP页面生成的Servlet中,使JSP将静态内容与动态内容分离出来.脚本元素包含: 1. ...
- Akka Stream文档翻译:Quick Start Guide: Reactive Tweets
Quick Start Guide: Reactive Tweets 快速入门指南: Reactive Tweets (reactive tweets 大概可以理解为“响应式推文”,在此可以测试下GF ...
- 安卓 DevOps:从一次推送命令到生产
DevOps 是一种广为人知的活动,其主要目的是使软件交付自动化.的确,DevOps 的目标是持续测试.代码质量.功能开发和更轻松地进行维护更新.因此,DevOps 的终极目标之一是让开发者可以执行快 ...
- IDS 日志分析
[http://blog.csdn.net/cnbird2008/article/details/5792626] General Approach通用方法1. Identify which log ...
- SDUT2191Calendar
http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2191 题意:给你两个年月日,让你算出其中经历了 ...
- spring的组成
① Spring Core:核心容器,BeanFactory提供了组件生命周期的管理,组件的创建,装配,销毁等功能 SpringContext:ApplicationContext,扩展核心容器,提供 ...
- linux动态库默认搜索路径设置的三种方法
众所周知, Linux 动态库的默认搜索路径是 /lib 和 /usr/lib .动态库被创建后,一般都复制到这两个目录中.当程序执行时需要某动态库, 并且该动态库还未加载到内存中,则系统会自动到这两 ...