- 浏览: 221461 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
andy1015:
请教下楼主rtx问题 ,可以么
用HttpClient实现同步RTX -
cgp17:
请教:Chukwa支持Push数据吗?目前看到的都是Polli ...
基于Hadoo的日志收集框架---Chukwa的源码分析(适配器、代理) -
jimmee:
尼玛, 现在iteye的质量下降到何种水准了.
Mahout协同过滤框架Taste的源码分析 -
aubdiy:
aubdiy 写道我擦。。。。 这你叫分析才看到, 还有个 “ ...
Mahout协同过滤框架Taste的源码分析 -
aubdiy:
我擦。。。。 这你叫分析
Mahout协同过滤框架Taste的源码分析
接上篇
webserver使用的是resin3.1.9,首先在web.xml中配置invoker方式来处理请求
<?xml version="1.0" encoding="UTF-8"?> <web-app> <classpath id='WEB-INF/classes' source='WEB-INF/src' compile='false'/> <classpath id='WEB-INF/lib' library-dir='true'/> <servlet-mapping url-pattern='/servlet/*' servlet-name='invoker'/> </web-app>
然后写一个search.jsp,选择开始、结束日期后,将提交到UpdateServlet来处理
<form name="form" method="post" action="/servlet/com.swfml.update.action.UpdateServlet"> ...... </form>
然后来写UpdateServlet,根据不同的action执行不同的操作
public void doPost(HttpServletRequest request, HttpServletResponse response) { String defaultAction = ""; String url = actionMap(request, response, defaultAction); if ((url.length() > 0) && (!response.isCommitted())) { try { response.sendRedirect(URLDecoder.decode(url)); } catch (IOException e) { e.printStackTrace(); } } }
private String actionMap(HttpServletRequest request, HttpServletResponse response, String defaultAction) { String action = defaultAction; String url = ""; if ((request.getParameter("action") != null) && (request.getParameter("action").length() > 0)) { action = request.getParameter("action").trim(); } if(action.equals("search")) { doSearch(request, response); } else if(action.equals("create")) { doCreate(request, response); } else if(action.equals("upload")){ doUpload(request, response); } else if(action.equals("unzip")){ doUnzip(request, response); } else if(action.equals("update")){ doUpdate(request, response); } return url; }
然后来处理检索
private void doSearch(HttpServletRequest request, HttpServletResponse response) { String startDate = request.getParameter("startDate"); String endDate = request.getParameter("endDate"); String searchDir = getServletContext().getRealPath("/"); searchDir = searchDir.substring(0, searchDir.length() - 1); ArrayList updateFileList = ProUpdate.searchFile(searchDir, startDate, endDate); request.setAttribute("updateFileList", updateFileList); request.getSession().setAttribute("updateFileList", updateFileList); request.setAttribute("updateMessage", ProUpdate.updateMessage); try { RequestDispatcher rd = request.getRequestDispatcher("/update/search.jsp"); rd.forward(request, response); } catch (Exception e) { e.printStackTrace(); } }
其它处理类似,包含的功能有:
文件检索、生成zip包,解压zip包、备份替换文件、servlet实现上传下载
生成zip包
/** * 将更新文件列表打包到输出文件 * @param outFile * @param updateFileList * @throws FileNotFoundException */ public static void createZip(String zipFile, ArrayList updateFileList) throws FileNotFoundException { String searchDir = getSearchDir(updateFileList); File outfile; if(zipFile.length() > 0) { outfile = new File(zipFile); } else { outfile = new File(updateFile); } ZipOutputStream outputStream = new ZipOutputStream(new FileOutputStream(outfile)); byte[] b = new byte[1024]; int read = 0; StringBuffer strBuffer = new StringBuffer(); try { for(int i = updateFileList.size() - 1; i >=0; i --) { File file = (File)updateFileList.get(i); String filePath = ""; if(file.getPath().length() > searchDir.length()) { filePath = file.getPath().substring(searchDir.length() + 1) + (file.isDirectory() ? "/" : ""); } else { filePath = "/"; } filePath = filePath.replace('\\', '/'); if(!pathIsExit(filePath)) { outputStream.putNextEntry(new ZipEntry(filePath)); } if(file.isFile()) { strBuffer.append("/" + filePath + "\r\n"); FileInputStream inputStream = new FileInputStream(file); while((read = inputStream.read(b)) != -1) { outputStream.write(b, 0, read); } inputStream.close(); } } outputStream.putNextEntry(new ZipEntry(msgFileName)); outputStream.write(strBuffer.toString().getBytes()); outputStream.closeEntry(); printZipMessage(outfile.getPath()); } catch(Exception e) { e.printStackTrace(); } finally { try { outputStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
解压zip包
/** * 解压文件到指定目录 * @param zipFilePath * @throws FileNotFoundException */ public static String unZip(String outputPath, String zipFilePath) throws FileNotFoundException { ZipInputStream inputStream = new ZipInputStream(new FileInputStream(zipFilePath)); ZipEntry entry; Date date = new Date(); if(outputPath.length() > 0) { outputDir = outputPath; } outputDir = outputDir + File.separator + timeDateFormat.format(date); File outputFile = new File(outputDir); outputFile.mkdirs(); String updateMesaage = outputDir + "!"; try { while((entry = inputStream.getNextEntry()) != null) { if(entry.isDirectory()) { File file = new File(outputDir + File.separator + entry.getName().substring(0, entry.getName().length() - 1)); file.mkdirs(); } else { File file = new File(outputDir + File.separator + entry.getName()); System.out.println(file.getPath()); if(!file.getParentFile().exists()) { file.getParentFile().mkdirs(); } file.createNewFile(); FileOutputStream outputStream = new FileOutputStream(file); byte[] b = new byte[1024]; int read = 0; while((read = inputStream.read(b)) != -1) { outputStream.write(b, 0, read); } outputStream.close(); if(file.getName().equals(msgFileName)) { BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String s = ""; while((s = reader.readLine()) != null) { updateMesaage += s + "#"; } } } } inputStream.close(); } catch(Exception e) { e.printStackTrace(); } return updateMesaage; }
下载更新包
/** * 生成更新包 * @param request * @param response */ private void doCreate(HttpServletRequest request, HttpServletResponse response) { ArrayList updateFileList = new ArrayList(); String zipFile = getServletContext().getRealPath("/") + File.separator + "update.zip"; if(request.getSession().getAttribute("updateFileList") != null) { updateFileList = (ArrayList)request.getSession().getAttribute("updateFileList"); ProUpdate.createUpdateFile(zipFile, updateFileList); } response.setContentType("text/html"); try { response.sendRedirect("/update.zip"); } catch (IOException e) { e.printStackTrace(); } }
上传更新包
/** * 上传更新包 * @param request * @param response */ private void doUpload(HttpServletRequest request, HttpServletResponse response) { try { File updatefile = new File(getServletContext().getRealPath("/") + File.separator + "WEB-INF" + File.separator + "update" + File.separator + "update.zip"); File tempFile = new File(getServletContext().getRealPath("/") + File.separator + "WEB-INF" + File.separator + "update" + File.separator + "update.temp.txt"); if(!tempFile.exists()) { tempFile.createNewFile(); } RandomAccessFile raFile = new RandomAccessFile(tempFile, "rw"); ServletInputStream inputStream = request.getInputStream(); FileOutputStream outputStream = new FileOutputStream(updatefile); byte[] b = new byte[1024]; int read = 0; while((read = inputStream.read(b)) != -1) { raFile.write(b, 0, read); } inputStream.close(); raFile.close(); raFile = new RandomAccessFile(tempFile, "r"); String startFlag = raFile.readLine(); String endFlag = startFlag + "--"; String line = null; raFile.seek(0); long startIndex = 0; long endIndex = 0; while((line = raFile.readLine()) != null) { if(line.equals(startFlag) && !line.equals(endFlag)) { startIndex = raFile.getFilePointer() - (startFlag.length() + 2); } else if(line.equals(endFlag)){ endIndex = raFile.getFilePointer() - (endFlag.length() + 2); } } raFile.seek(0); raFile.seek(startIndex); raFile.readLine(); raFile.readLine(); raFile.readLine(); raFile.readLine(); while(raFile.getFilePointer() < endIndex) { outputStream.write(raFile.readByte()); } outputStream.close(); raFile.close(); if(tempFile.exists()) { tempFile.delete(); } request.setAttribute("updatefilepath", updatefile.getPath()); RequestDispatcher rd = request.getRequestDispatcher("/update/uploadResult.jsp"); rd.forward(request, response); } catch(Exception e) { e.printStackTrace(); } }
具体请参见代码,欢迎拍砖!
- updatetest.zip (147.8 KB)
- 下载次数: 182
评论
4 楼
SavageGarden
2010-03-01
ahpo 写道
很不错的收藏了,项目中应该会很有用,楼主是这是历年项目经验啊。
惭愧,惭愧
3 楼
SavageGarden
2010-03-01
whiteface999 写道
项目中也需要类似的东西,感谢楼主啊。过滤的地方可以改进一下。
File[] files = rootDir.listFiles(getFileRegexFilter("\\.svn"));
public static FilenameFilter getFileRegexFilter(String regex) {
final String regex_ = regex;
return new FilenameFilter() {
public boolean accept(File file, String name) {
boolean ret = name.matches(regex_);
return !ret;
}
};
}
File[] files = rootDir.listFiles(getFileRegexFilter("\\.svn"));
public static FilenameFilter getFileRegexFilter(String regex) {
final String regex_ = regex;
return new FilenameFilter() {
public boolean accept(File file, String name) {
boolean ret = name.matches(regex_);
return !ret;
}
};
}
恩,这个工具的核心就是检索文件,所以想提高效率也就是在这里优化
2 楼
whiteface999
2010-02-26
项目中也需要类似的东西,感谢楼主啊。过滤的地方可以改进一下。
File[] files = rootDir.listFiles(getFileRegexFilter("\\.svn"));
public static FilenameFilter getFileRegexFilter(String regex) {
final String regex_ = regex;
return new FilenameFilter() {
public boolean accept(File file, String name) {
boolean ret = name.matches(regex_);
return !ret;
}
};
}
File[] files = rootDir.listFiles(getFileRegexFilter("\\.svn"));
public static FilenameFilter getFileRegexFilter(String regex) {
final String regex_ = regex;
return new FilenameFilter() {
public boolean accept(File file, String name) {
boolean ret = name.matches(regex_);
return !ret;
}
};
}
1 楼
ahpo
2010-02-26
很不错的收藏了,项目中应该会很有用,楼主是这是历年项目经验啊。
发表评论
-
基于Hadoo的日志收集框架---Chukwa的源码分析(数据处理)
2012-03-06 18:12 36791.工具类、接口简介 (1) // 用于对数据进行分 ... -
基于Hadoo的日志收集框架---Chukwa的源码分析(收集器)
2012-03-06 17:46 25981.接口、实现类简介 org.apache.hado ... -
Java串口编程----使用SMSLib发送手机短信
2010-02-25 22:43 7319完整日志: SLF4J: Class path contai ... -
超级简单、超级实用的版本升级小工具----功能预览
2010-02-23 17:15 1265项目做久了, ... -
以多线程、断点续传方式下载文件的实现
2009-12-22 16:16 2601以多线程、断点续传方式下载文件,经常出现下载下来的文件大小和服 ... -
Swing JTable 渲染器 进度条 事件线程 观察者模式
2009-12-07 13:48 3462Swing编程中JTable应该是个经常被用到的组件,进度条也 ... -
用swing做界面,写了个支持断点续传的ftp客户端
2009-12-03 15:47 2088最近在写一个支持多线程、断点续传方式(需要服务器支持)下 ... -
JPA的OneToMany和ManyToOne
2008-09-04 22:43 7131在appfuse2下写个测试,用到了一对多,看看了资料 ... -
用HttpClient实现同步RTX
2008-08-12 18:04 2186持续加班,到现在都还没有缓过劲来,每天下班回来基本上就 ... -
公交车报站类
2008-07-16 21:46 1148****到了,去往****的乘客,请您前后门下车,下车请走好, ...
相关推荐
《JDY-24M超级蓝牙手册-V1.721版本》是一份详细的技术文档,专门针对JDY-24M型号的超级蓝牙模块。这份手册是为开发者、电子爱好者以及任何对蓝牙技术感兴趣的人群准备的,旨在提供全面且深入的指导,帮助他们理解和...
9. **自动更新与版本控制**:为了方便维护和升级,Super-EC5.5可能集成了自动更新和版本控制功能,使得开发者能够轻松管理和分发程序的不同版本。 10. **文档与示例**:通常,这样的高级模块会附带详尽的使用文档和...
在微信小程序开发领域,"超级跑腿一体包案例源码"是一个典型的移动开发项目,它提供了从订单创建、任务分配到完成配送的全套解决方案。这个压缩包文件包含了开发者进行微信小程序构建所需的所有必要文件,旨在帮助...
《叮咚-超级外卖餐饮小程序V6.2.8》是一款专为餐饮行业设计的微信小程序,致力于提供全面且便捷的外卖服务。该版本号V6.2.8表明这是一个经过多次迭代和优化的成熟产品,它在原有基础上进一步提升了用户体验和系统...
在"超级加解密转换工具"中,ZdxPro.dll可能包含了加密和解密算法的核心实现,这些算法可能包括对称加密(如AES、DES)、非对称加密(RSA、ECC)等,用于对用户的数据进行高强度的安全处理。 SuperSoft.exe 是主执行...
总的来说,《志汇-超级外卖点餐小程序5.6.5开源可用版》是一款综合性的餐饮解决方案,它结合了现代科技与餐饮服务,为商家提供了一套高效、灵活且可定制的点餐工具。通过深入理解和充分利用其特点,商家能够提升服务...
2. `悦me贝尔 E-140W-P 悦Me EPON1.2s 版本升级地址.txt` 这个文本文件很可能包含了固件升级的具体URL或步骤,用户可以通过读取这个文件来获取详细的升级指南。 总的来说,升级固件是为了提升设备的稳定性和安全性...
描述中的“hg8145c v超级密码获取工具”进一步确认了这一点,表明这是一个特定版本的工具,可能包含了针对 HG8145C 版本的优化或更新。 标签“hg8145c”和“hg8145v”可能指的是 HG8145C 和 HG8145V 这两种不同的...
《超级模块8.0完整源代码》集合了多种版本的解密实现,是开发者们深入理解和运用该模块的重要参考资料。这个资源包含了从基础到高级的全方位功能,为开发者提供了丰富的学习和实践素材。以下是关于“超级模块8.0”...
在软件开发中,"patch"通常指的是一个小型的代码修改或升级,用于解决已知问题或引入小规模改进。这里提到的"patch5"可能表示这是针对GCC8.4.0的第五个补丁,修复了一些已知问题或增强了对RISC-V和ESP平台的支持。 ...
产品名称:天鹰超级卫士(Skeagle Super Guard) ------------------------------------------------------------------------------------ 【V2.91 Build2012112802 更新说明】-- 2012年11月28日 1. 新功能: 1.1 ...
同时,小程序支持热更新,可以在不打扰用户的情况下进行版本升级。 通过研究这个超级外卖一体包的源码,开发者不仅可以了解到外卖业务的常见功能实现,如订单管理、商品展示、用户评论、支付流程等,还能深入学习到...
总的来说,"超级模块免费版本"对于易语言的学习者和开发者来说是一份宝贵的资源,它提供了强大的工具,使得开发过程更加高效和便捷。通过深入学习和实践,用户可以充分利用这个模块,开发出功能丰富的应用程序。同时...
"超级灰色按钮克星升级版"这一名称可能暗示了该工具最初的用途是为了绕过某些软件的限制或保护机制,比如取消或禁用特定的功能,但这同时也可能涉及到了合法性问题。因此,在使用此类工具时,开发者必须确保其行为...
【超级单片机小开发工具】是一款专为单片机开发者设计的实用工具集合,它集成了多种功能,旨在简化单片机编程、调试和测试的过程。作为一个专业的IT大师,我将详细介绍这款工具可能包含的关键知识点。 1. **单片机...
此次重大版本升级不影响以前的源代码(.e)和模块(.ec)。只要代码或模块中未用到“不支持静态编译”的支持库、COM/OCX等,都可以静态编译。以前编译好的模块(.ec)甚至不需要重新编译即可直接支持静态编译。 支持库...
【志汇叮咚超级外卖小程序6.4.3全开源+前端.zip】是一个包含微信小程序模板源码的压缩包,适用于开发外卖应用。这个版本号(6.4.3)表明这是一个更新迭代过的版本,通常意味着它包含了之前版本的修复、优化以及可能...
4. **代码兼容性检查**:在升级或迁移项目时,如果旧版本的API文档不足,反编译可以揭示接口的具体实现,以确保兼容性。 然而,值得注意的是,反编译可能涉及法律和道德问题。在未获得授权的情况下,反编译他人的...
10. **全开源版**:此版本的超级跑腿小程序提供全部源代码,意味着开发者可以查看和修改所有代码,这对于学习、研究或者定制化开发来说非常有价值。你可以深入理解其架构设计、业务逻辑,甚至可以根据自己的需求进行...
"超级兔子升级天使"是一款备受用户喜爱的软件工具,它主要致力于帮助用户便捷地管理和升级他们的计算机系统。这款软件在IT行业中被广泛视为一款必备工具,尤其对于那些希望保持电脑性能最佳状态的用户来说,它提供了...