}
以上代码需要注意的几个地方:
注释1:由于使用了multipart/form-data协议, 这里获取请求中的信息必须使用fu. getParameter() 方法,而不能使用 request.getParameter() 方法,否则不能得到filedesc的值!
注释2:使用uploadFiles方法上传accessory1和accessory2中的文件,同时返回保存在ImageFile 表中的文件基本信息的键值imagefileid,可以将这个imagefileid记录到其它地方以便今后调用。
注释3:使用getFileNames方法获取上传文件的真实名称(包括后缀名)
将代码保存到 /src/weaver/test/MutiFileUpload.java 文件中。访问
FileUploadTest.htm 来测试一下,看看日志文件中的记录是否正确。页面提交,文件上传完毕后将再次返回FileUploadTest.htm页面。你可以查看ImageFile表来检查文件的具体存放位置等信息。
小秘密:
文件的存放位置在系统设置模块中设置,如果没有设置,将存放在系统运行目录下的 filesystem 目录下。
21 泛微网络有限公司 www.weaver.com.cn
3.7 如何访问已经上传的文件
在jsp页面或者html页面中访问已经上传的文件非常简单,只需要调用
weaver.file.FileDownload类,并传递需要访问的文件id ,这个文件id,就是在文件上传中返回的 imagefileid。
访问上传的文件有两种方式,一种是非下载方式,这种方式如果浏览器能够显示访问的文件类型,那么就会在浏览器中直接显示。另一种是下载方式,无论访问的文件是什么类型,都使用弹出下载窗口的形式下载。
对非下载方式的链接访问
对下载方式的链接访问
如果知道要访问的文件是图片,并需要在浏览页面中直接显示这个图片,可以使用下面的代码访问
22 泛微网络有限公司 www.weaver.com.cn
3.8 如何使用缓存提高系统效率
对于一些常用的信息,比如人员的名称,如果每次访问的时候都查询数据库来获取,将极大的影响系统的性能。我们可以将这些信息放到系统的缓存中,在用到的时候,从系统缓存中获取。
系统提供了 weaver.general.StaticObj 类来保存这些信息。
weaver.general.StaticObj 类使用 HashTable 来管理缓存信息,其主要的方法如下:
StaticObj将数据库中常用的数据放入缓存中,以加快系统的反应速度。客户程序可以调用getInstance()方法访问本类的唯一实例。
StaticObj有两层缓存,分别为 mainKey - value 和 mainKey - subkey – value,由 mainKey 可以取得第一层的对象,由 mainKey - subkey 可以取得第二层的值,在第二层的值存在的情况下,第一层的值为 Hashtable。 /**
* 返回唯一实例.如果是第一次调用此方法,则创建实例 *
* @return StaticObj 唯一实例 */
public static StaticObj getInstance() /**
* 获取 mainKey 对应的第一层对象值 *
* @param key 主键名称
* @return Object 对于的第一层对象值 */
public Object getObject(String key) /**
* 设置 mainKey 对应的第一层对象值 *
* @param key 主键名称
* @param obj mainKey 对应的第一层对象值 */
public void putObject(String key, Object obj) /**
* 从缓存中清除 mainKey 对应的第一层对象值 *
* @param key 主键名称 */
public void removeObject(String key)
23 泛微网络有限公司 www.weaver.com.cn
/**
* 获取 mainKey - subkey 对应的第二层对象值 *
* @param HashKey 主键名称 * @param RecKey 子主键名称
* @return Object 对于的第二层对象值 */
public Object getRecordFromObj (String HashKey, String RecKey) /**
* 设置 mainKey - subkey 对应的第二层对象值 *
* @param HashKey 主键名称 * @param RecKey 子主键名称
* @param obj mainKey - subkey对于的第二层对象值 */
public void putRecordToObj (String HashKey, String RecKey, Object obj) /**
* 从缓存中清除 mainKey - subkey 对应的第二层对象值 *
* @param HashKey 主键名称 * @param RecKey 子主键名称 */
public void removeRecordFromObj (String HashKey, String RecKey) /**
* 从缓存中清除 所有对象值 * */
public void clearRecord()
运用这些方法,我们可以构造所需要的缓存类,使用这些缓存类来对其它模块和功能提供缓存信息的接口,这些缓存类在系统中的命名为 XXXComInfo,其中XXX为相应缓存信息的名称。参考如下的人力资源缓存类:weaver.hrm.resource.ResourceComInfo。
ResourceComInfo 类主要提供人力资源信息中常用的一些信息的缓存,比如人员名称,所在部门。对于这些信息,都需要一个键值。常见的键值是这些信息在数据库表中的Primary Key,比如人力资源ID,其它模块和功能在关联人力资源信息的时候,只记录人力资源的ID,当需要获取人力资源的其它信息,如人员名称,所在部门的时候,从ResourceComInfo类提供的统一接口中获取。
24 泛微网络有限公司 www.weaver.com.cn
weaver.hrm.resource.ResourceComInfo 的代码:
package weaver.hrm.resource;
import java.util.*; import weaver.conn.*; import weaver.general.*; /**
* Title: 人力资源缓存信息接口类
* Description: 对其它模块和功能提供统一的获取人力资源信息的接口 * Copyright: Copyright (c) 2002 * Company: weaver * @author liuyu * @version 1.0 */
public class ResourceComInfo extends BaseBean {
/* 1 */
private ArrayList ids = null; // 保存人力资源键值 ID 队列 private ArrayList loginids = null; // 保存人力资源登录名 队列 private ArrayList lastnames = null; // 保存人力资源名称 队列 private ArrayList departmentids = null; // 保存人力资源部门 队列 private ArrayList seclevels = null; // 保存人力资源安全级别 队列 private ArrayList statuses = null; // 保存人力资源状态 队列
private StaticObj staticobj = null; // 公共缓存类
/* 2 */
private int current_index = -1; // 当前人力资源记录的指针 private int array_size = 0; // 人力资源记录的数量
/**
* 人力资源缓存信息接口类构造方法
* 构造方法中将获取公共缓存类的唯一实例,并调用getResourceInfo 方法获取缓存信息,
* 同时赋值人力资源记录的数量 * */
public ResourceComInfo() throws Exception{ staticobj = StaticObj.getInstance(); getResourceInfo() ;
25 泛微网络有限公司 www.weaver.com.cn
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库Ecology系统程序员开发指南(5)在线全文阅读。
相关推荐: