- 浏览: 53282 次
- 性别:
- 来自: 北京
文章分类
1.ftp工具类:
/* * Copyright 2008 Digital Video Networks (Beijing) Co., Ltd. All rights reserved. */ package com.dvnchina.itv.advert.utils.ftp; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.URL; import java.util.LinkedList; import java.util.List; import java.util.Properties; import org.apache.commons.lang.StringUtils; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger; import com.dvnchina.itv.advert.utils.config.ConfigureProperties; /** * * <p> * Title:FTP 工具类 * </p> * <p> * Description:用于上传或下载文件 * </p> * * @author lester * @version 1.0 * @since 2012-03-05 */ public class FtpUtils { private static Logger logger = Logger.getLogger(FtpUtils.class); private static ConfigureProperties configureProperties = ConfigureProperties .getInstance(); // 二进制模式 此种类型在传输过程中大小不会发生变化 public static final int BINARY_FILE_TYPE = FTP.BINARY_FILE_TYPE; // ASCII模式 此种类型在传输过程中大小会发生变化 public static final int ASCII_FILE_TYPE = FTP.ASCII_FILE_TYPE; // 盘符分隔符 private static String SEPARATOR = System.getProperty("file.separator"); // 从配置文件中获取FTP的IP private String ftpIp = null; // 从配置文件中读取连接FTP超时信息 private Integer timeout = null; // ftp用户名 private String ftpUserName = null; // ftp密码 private String ftpPassWord = null; // ftp端口 private Integer ftpPort = null; // 显示执行过程开关 private String showOperationCommandKey = null; private FTPClient ftpClient = null; /** * 初始化一些连接参数 * * @author lester */ public FtpUtils() { ftpClient = new FTPClient(); // 重新获取配置文件中的参数值 ftpIp = configureProperties.get("ftpIp"); ftpUserName = configureProperties.get("ftpUserName"); ftpPassWord = configureProperties.get("ftpPassWord"); try { ftpPort = Integer.parseInt(configureProperties.get("ftpPort")); } catch (Exception e) { logger.error("从配置文件中获取端口时发生异常,请检查配置", e); } try { timeout = Integer.parseInt(configureProperties.get("ftpTimeout")) * 1000; } catch (Exception e) { logger.error("从配置文件中获取超时时间时时发生异常,请检查配置", e); } //showOperationCommandKey = getPropertiesFromConfiguration("showOperationCommand"); if (StringUtils.isNotBlank(showOperationCommandKey) && showOperationCommandKey.equalsIgnoreCase("yes")) { // 设置将过程中使用到的命令输出到控制台 /*this.ftpClient.addProtocolCommandListener(new PrintCommandListener( new PrintWriter(System.out)));*/ } } /** * 构造方法2 * @author lester * @param ip * @param port * @param userName * @param passWord * @param timeOut */ public FtpUtils(String ip,int port, String userName,String passWord ,int timeOut) { ftpClient = new FTPClient(); ftpIp = ip; ftpUserName = userName; ftpPassWord = passWord; ftpPort = port; timeout = timeOut; } /** * 从配置文件中获取相应属性值,适用于参数需要经常修改的情况 * * @param key * 待获取属性值的key * @author lester */ @SuppressWarnings("unused") private String getPropertiesFromConfiguration(String key) { String localConfigPath = System.getProperty("user.dir") + SEPARATOR + "webapp" + SEPARATOR + "WEB-INF" + SEPARATOR + "classes" + SEPARATOR + "configuration.properties"; File f = new File(localConfigPath); Properties properties = null; FileInputStream fileInputStream = null; String returnValue = null; if (StringUtils.isNotBlank(key)) { try { fileInputStream = new FileInputStream(f); properties = new Properties(); properties.load(fileInputStream); } catch (IOException e) { logger.error("读取本地" + localConfigPath + "文件失败", e); } finally { try { if (fileInputStream != null) { fileInputStream.close(); } } catch (IOException e) { logger.error("读取配置文件时,关闭输出流出现异常", e); } } returnValue = properties.getProperty(key); } else { logger.info("传入的参数为空"); } return returnValue; } /** * 替换路径头尾特殊字符以及分隔符处理 * * @param path * @author lester */ public String getRegularPath(String path) { int length; if (StringUtils.isNotBlank(path)) { length = path.length(); if (length <= 0) return path; char ch = path.charAt(0); while (ch == '/' || ch == '\\') { try { path = path.substring(1, length); } catch (Exception e) { logger.error("字符串截取时发生异常", e); return path; } length = path.length(); if (length <= 0) return path; try { ch = path.charAt(0); } catch (Exception e) { logger.error("字符串截取时发生异常", e); return path; } } try { ch = path.charAt(length - 1); } catch (Exception e) { logger.error("字符串截取时发生异常", e); } while (ch == '/' || ch == '\\') { length = path.length(); if (length <= 0) { return path; } try { path = path.substring(0, length - 1); ch = path.charAt(length - 2); } catch (Exception e) { logger.error("字符串截取时发生异常", e); return path; } } if (path.contains("\\")) { path = path.replace("\\", "/"); } path = path.replaceAll("//", "/"); path = path.replaceAll("///", "/"); path = path.replaceAll("////", "/"); path = path.replaceAll("/////", "/"); } return path; } /** * 创建FTP连接,创建连接相关参数从配置文件中获取 * * @author lester */ public boolean connectionFtp() { boolean flag = true; int reply; try { ftpClient.setControlEncoding("GBK"); ftpClient.connect(ftpIp); ftpClient.login(ftpUserName, ftpPassWord); ftpClient.setDefaultPort(ftpPort); ftpClient.setBufferSize(1024); ftpClient.setFileType(FtpUtils.BINARY_FILE_TYPE); ftpClient.setDataTimeout(timeout); reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); flag = false; logger.warn("FTP 服务拒绝连接"); } // 设置被动模式 ftpClient.enterLocalPassiveMode(); } catch (Exception e) { flag = false; // logger.error("连接FTP时出现异常", e); logger.info("连接FTP时出现异常,请检查ftp的连接配置"); } return flag; } /** * 创建FTP连接 * * @param ftpIp * FTP ip地址 * @param port * FTP 端口号 * @param username * FTP 用户名 * @param password * FTP 密码 * @param timeout * FTP 超时时间 单位秒 * @return true- 成功 false-失败 */ public boolean connectionFtp(String ftpIp, int port, String username, String password, Integer timeout) { boolean flag = false; this.ftpIp = ftpIp; this.ftpPort = port; this.ftpUserName = username; this.ftpPassWord = password; this.timeout = timeout; flag = connectionFtp(); if (flag) { logger.info("FTP连接成功"); } else { logger.info("FTP连接失败"); } return flag; } /** * 关闭FTP连接 * @author lester */ public void closedFtp() { if (ftpClient != null && ftpClient.isConnected()) { try { ftpClient.logout(); ftpClient.disconnect(); } catch (IOException e) { logger.error("关闭FTP连接时出现异常", e); } } } /** * 进入到服务器的某个目录下 * @param directory * @author lester */ public boolean changeWorkingDirectory(String directory) { boolean flag = false; try { flag = ftpClient.changeWorkingDirectory(directory); } catch (IOException e) { logger.error("切换目录失败", e); } return flag; } /** * 创建或者切换目录 * @param ftpDirectory * 远程ftp路径 * @author lester */ public boolean changeAndCreateWorkingDirectory(String ftpDirectory) { String[] remoteDirectory = null; boolean createFlag = false; boolean channelFlag = false; if (StringUtils.isNotBlank(ftpDirectory)) { ftpDirectory = getRegularPath(ftpDirectory); if (ftpDirectory.contains("/")) { remoteDirectory = ftpDirectory.split("/"); } try { if (!ftpClient.changeWorkingDirectory(ftpDirectory)) { if (remoteDirectory != null) { for (int i = 0; i < remoteDirectory.length; i++) { if (!ftpClient .changeWorkingDirectory(remoteDirectory[i])) { createFlag = ftpClient .makeDirectory(remoteDirectory[i]); channelFlag = ftpClient .changeWorkingDirectory(remoteDirectory[i]); } } } else { createFlag = ftpClient.makeDirectory(ftpDirectory); channelFlag = ftpClient .changeWorkingDirectory(ftpDirectory); } if (createFlag) { logger.warn("创建目录" + ftpDirectory + "成功"); } else { logger.warn("创建目录" + ftpDirectory + "失败"); } } else { channelFlag = true; } } catch (Exception e) { logger.error("创建或者切换目录" + ftpDirectory + "失败", e); } } else { logger.info("所传入的ftp路径为空"); } return channelFlag; } /** * 上传单个文件 * @param localFilePath * 待上传本地文件 * @param remoteDirectoryPath * 远程目录 * @param remoteFileName * 上传后的文件名称 若没有则取原有文件名称 * @author lester */ public boolean uploadSimpleFile(String localFilePath, String remoteDirectoryPath, String remoteFileName) { @SuppressWarnings("unused") Integer flag = null; File localFile = null; FileInputStream fis = null; boolean uploadFlag = false; boolean renameFlag = false; String localFileName = null; // 1、检查传入参数是否为空 if (StringUtils.isNotBlank(localFilePath)) { localFile = new File(localFilePath); if (localFile.isFile()) { try { localFileName = localFile.getName(); fis = new FileInputStream(localFile); if (StringUtils.isNotBlank(remoteDirectoryPath)) { remoteDirectoryPath = getRegularPath(remoteDirectoryPath); if (!changeAndCreateWorkingDirectory(remoteDirectoryPath)) { logger.warn("创建或者切换目录失败,请检查ftp用户访问权限"); } } else { logger.info("远程目录为空,文件将被传到用户宿主目中"); } if (StringUtils.isNotBlank(remoteFileName)) { uploadFlag = ftpClient.storeFile(remoteFileName + ".bak", fis); if (uploadFlag) { logger.info(remoteFileName + ".bak文件上传成功"); renameFlag = ftpClient.rename(remoteFileName + ".bak", remoteFileName); if (renameFlag) { logger.info(remoteFileName + "文件重命名成功"); } } } else { uploadFlag = ftpClient.storeFile( localFileName + ".bak", fis); if (uploadFlag) { renameFlag = ftpClient.rename(localFileName + ".bak", localFileName); if (renameFlag) { logger.info(localFileName + "文件重命名成功"); } } } ftpClient.changeWorkingDirectory("~/"); } catch (Exception e) { logger.error("读取本地文件失败!", e); } finally { if (fis != null) { try { fis.close(); } catch (IOException e) { logger.error("读取本地文件后,关闭IO时发生异常", e); } } } } else { logger.info("传入不合法的本地文件地址"); } } else { logger.info("传入的本地文件地址为空"); } return renameFlag; } /** * 上传远程http文件到ftp指定目录中 * @param remoteFileLinkPath 远程文件链接 * @param remoteDirectory 远程FTP目录 * @author lester */ public boolean uploadHttpFile(String remoteFileLinkPath, String remoteDirectory) { String fileName = null; URL url = null; InputStream inputStream = null; boolean flag = false; if (StringUtils.isNotBlank(remoteFileLinkPath) && (remoteFileLinkPath.startsWith("http://") || remoteFileLinkPath .startsWith("HTTP://"))) { try { url = new URL(remoteFileLinkPath); inputStream = url.openStream(); } catch (Exception e) { logger.error("从" + remoteFileLinkPath + "读取文件失败", e); } fileName = remoteFileLinkPath.substring(remoteFileLinkPath .lastIndexOf("/") + 1); if (StringUtils.isNotBlank(remoteDirectory)) { remoteDirectory = getRegularPath(remoteDirectory); if (!changeAndCreateWorkingDirectory(remoteDirectory)) { logger.info("创建或者切换目录" + remoteDirectory + "失败,请检查ftp用户访问权限"); } } else { logger.info("远程目录为空,文件将被传到用户宿主目中"); } if (inputStream != null) { try { flag = ftpClient.storeFile(fileName + ".bak", inputStream); flag = ftpClient.rename(fileName + ".bak", fileName); } catch (Exception e) { flag = false; logger.error("上传文件失败", e); } } else { logger.info("从连接地址" + remoteFileLinkPath + "获取的输入流为空,文件将不予上传"); } } else { logger.info("传入的" + remoteFileLinkPath + "地址有误,将不予上传"); } return flag; } /** * 上传单个文件夹 * * @param localDirectoryPath * 本地文件夹地址 * @param localDirectoryRootPath * 本地文件夹的主参考地址 * @param remoteFilePath 文件要存放的远程FTP路径 * @author lester */ public void uploadSimpleFolder(String localDirectoryPath, String localDirectoryRootPath, String remoteFilePath) { logger.debug("uploadSimpleFolder"); File localDirectoryPathFile = null; String remoteFilePathBackup = null; String localFilePath = null; File[] localDirectorylistFile = null; if (StringUtils.isNotBlank(localDirectoryPath) && StringUtils.isNotBlank(localDirectoryRootPath)) { remoteFilePathBackup = remoteFilePath; localDirectoryPathFile = new File(localDirectoryPath); if (localDirectoryPath.contains(localDirectoryRootPath)) { localDirectorylistFile = localDirectoryPathFile.listFiles(); if (localDirectorylistFile != null && localDirectorylistFile.length > 0) { for (int i = 0; i < localDirectorylistFile.length; i++) { if (localDirectorylistFile[i].isDirectory()) { uploadSimpleFolder(localDirectorylistFile[i] .getAbsolutePath(), localDirectoryRootPath, remoteFilePath); } else { localFilePath = localDirectorylistFile[i] .getAbsolutePath(); remoteFilePathBackup = localDirectorylistFile[i] .getAbsolutePath(); remoteFilePathBackup = remoteFilePathBackup .substring(remoteFilePathBackup .indexOf(localDirectoryRootPath) + localDirectoryRootPath.length() + 1); remoteFilePathBackup = getRegularPath(remoteFilePathBackup); remoteFilePathBackup = remoteFilePathBackup .substring(0, remoteFilePathBackup .lastIndexOf("/")); remoteFilePathBackup = remoteFilePath + "/" + getRegularPath(remoteFilePathBackup); uploadSimpleFile(localFilePath, remoteFilePathBackup, localDirectorylistFile[i].getName()); } } } } else { logger.info("所给文件夹路径有误或为文件路径"); } } else { logger.info("所需【上传本地文件夹地址】或【本地文件夹的主参考地址】为空"); } logger.debug("uploadSimpleFolder"); } /** * 删除一个FTP服务器上的目录(如果为空) * * @param path * 目录路径 * @author lester */ public boolean removeDirectory(String path) { boolean flag = false; if (ftpClient == null) { connectionFtp(); } try { flag = ftpClient.removeDirectory(path); } catch (Exception e) { logger.error("删除目录时出现异常,具体目录路径为:" + path, e); } return flag; } /** * 删除一个FTP服务器上的目录 * @param path * 目录路径 * @param isAll * 是否递归删除所有子目录和文件 true 递归 false 不递归 * @author lester */ public boolean removeDirectory(String path, boolean isAll) { // 遍历子目录和文件 FTPFile[] ftpFileArr = null; if (StringUtils.isNotBlank(path)) { logger.info("递归参数为true,将递归删除文件夹中内容"); path = getRegularPath(path); if (!isAll) { return removeDirectory(path); } try { ftpFileArr = ftpClient.listFiles(path); } catch (Exception e) { logger.error("获取路径下文件列表时出现异常,具体路径为:" + path, e); } if (ftpFileArr == null || ftpFileArr.length == 0) { return removeDirectory(path); } for (int i = 0; i < ftpFileArr.length; i++) { FTPFile ftpFile = ftpFileArr[i]; if (ftpFile != null) { String name = ftpFile.getName(); if (ftpFile.isDirectory() && !".".equals(name) && !"..".equals(name)) { removeDirectory(path + "/" + name, true); } else if (ftpFile.isFile() && !".".equals(name) && !"..".equals(name)) { deleteFile(path + "/" + name); } else if (ftpFile.isSymbolicLink()) { } else if (ftpFile.isUnknown()) { } } } } else { logger.info("传入的待删除路径为空!"); } return removeDirectory(path); } /** * 删除一个文件 * @param filename 待删除的文件名称 * @author lester */ public boolean deleteFile(String filename) { boolean flag = true; try { flag = ftpClient.deleteFile(filename); if (flag) { logger.info("删除文件成功!"); } else { logger.info("删除文件失败!"); } } catch (IOException ioe) { logger.error("", ioe); } return flag; } /** * 返回远程FTP给定目录下的文件列表--所有的 * @param path FTP 文件目录 * @param resultList 文件夹树下的所有叶子(文件) * @author lester * @return */ public List<String> getFileList(String path, List<String> resultList) { FTPFile[] ftpFiles = null; List<String> list = null; try { if (StringUtils.isNotBlank(path)) { path = getRegularPath(path); logger.info("上传到FTP服务的目录:###"+path); if (changeWorkingDirectory(path)) { ftpFiles = ftpClient.listFiles(); if (resultList == null) { list = new LinkedList<String>(); } if (ftpFiles == null || ftpFiles.length == 0) { return resultList; } for (int i = 0; i < ftpFiles.length; i++) { FTPFile ftpFile = ftpFiles[i]; if (ftpFile != null && ftpFile.isFile() && !".".equals(ftpFile.getName()) && !"..".equals(ftpFile.getName())) { if (resultList!=null) { resultList.add(ftpFile.getName()); }else{ list.add(ftpFile.getName()); } } else if (ftpFile != null && ftpFile.isDirectory() && !".".equals(ftpFile.getName()) && !"..".equals(ftpFile.getName())) { changeWorkingDirectory("~/"); if (resultList!=null) { getFileList(path + SEPARATOR + ftpFile.getName(), resultList); }else{ getFileList(path + SEPARATOR + ftpFile.getName(), list); } } } } else { logger.info("切换目录失败,请检查路径"); } } else { logger.info("所查询的条件为空,将不予查询"); } } catch (Exception e) { logger.error("获取路径" + path + "时出现异常!", e); } return list; } /** * 下载文件至本地目录中 * @param remoteFileName * 远程文件名 * @param localFileName * 本地文件名 * @param remoteDirectory 远程FTP目录 * @param localDirectory 本地目录 * @return 返回操作结果 * @author lester */ public boolean download(String remoteFileName, String localFileName,String remoteDirectory,String localDirectory) { boolean flag = false; File outfile = null; OutputStream outputStream = null; if (StringUtils.isNotBlank(remoteFileName)&&remoteFileName.contains(".")) { if (StringUtils.isNotBlank(localDirectory)) { if (StringUtils.isNotBlank(remoteDirectory)) { remoteDirectory = getRegularPath(remoteDirectory); if (!changeWorkingDirectory(remoteDirectory)) { logger.info("切换远程目录失败,请检查所传路径是否正确,具体路径为" + remoteDirectory); return flag; } } else { logger.info("传入的远程路径为空,将在FTP宿主目录中寻找文件"); } if (StringUtils.isNotBlank(localFileName)) { outfile = new File(localDirectory+SEPARATOR+localFileName); } else { outfile = new File(localDirectory+SEPARATOR+remoteFileName); } try { outputStream = new FileOutputStream(outfile); flag = ftpClient.retrieveFile(remoteFileName, outputStream); } catch (IOException e) { logger.error("下载文件时出现IO异常,远程路劲为:" + remoteFileName, e); flag = false; } finally { try { if (outputStream != null) { outputStream.close(); } } catch (IOException e) { logger.error("关闭输出流时出现异常!", e); flag = false; } } }else{ logger.info("传入的本地路径为空,将不予下载"); } }else{ logger.info("远程文件名为空或者不是文件类型,将不予下载"); } return flag; } public static void main(String[] args) { FtpUtils ftpUtil = new FtpUtils(); //ftpUtil.connectionFtp(); ftpUtil.connectionFtp("127.0.0.1", 21, "cnd", "cnd", 21000); // ftpUtil.uploadSimpleFile("E:\\小图片\\upload\\1\\1.txt", // "1234/123213","3.txt"); // ftpUtil.uploadHttpFile("http://www.google.com.hk/images/nav_logo105.png","uploadHttpFile"); // ftpUtil.uploadHttpFile("http://www.google.com.hk/images/nav_logo105.png",""); // ftpUtil.uploadSimpleFolder("E:\\小图片\\upload\\1","E:\\小图片\\upload","uploadSimpleFolder"); // ftpUtil.deleteFile("/1/01/logo.png"); // ftpUtil.removeDirectory("test",true); ftpUtil.removeDirectory("/test"); List<String> list = ftpUtil.getFileList("/test",null); for (String string : list) { System.out.println(string); } // ftpUtil.download("5.txt","22.txt", "start/1/2/3/4/5","J:\\"); ftpUtil.closedFtp(); } }
2.Freemarker 模版
alert("now in adConfig.js"); var advConfig = true; var isHD = true ; if(System.isHDPlatform == 4 || System.isHDPlatform == 3 || System.isHDPlatform == 1 || System.isHDPlatform == false)isHD = false ; alert("in adConfig.js System.isHDPlatform is " + System.isHDPlatform) ; var advInfo = [ <#list channelList as channelItem > {serviceId:${channelItem},locationVar:"locationVar_${channelItem}"}<#if channelItem_has_next>, <#else> </#if></#list> ]; <#assign index = 0> <#list channelList as item> <#assign key = channelList[index]> <#assign datas = resultMap[key]> <#assign positionlist = datas> <#-- 通过频道的内广告位列表 --> var locationVar_${key}=[ <#list datas as posItem> {position:${posItem.flag?default('')},imgSrc:${posItem.materials?default('')}<#if posItem_has_next>}, <#else>}</#if> </#list> ]; <#assign index = index+1 > </#list> alert("now out adConfig.js");
3.工具类还包括:FTP文件上传、Freemarker、文件操作等等工具类日期类型和String与Long之间的转换、汉字转拼音、解析xml、json字符串的转换、假分页、Freemarker模版的工具类,字符串处理等等.
真是懒得拷贝了 ,还是放到压缩包内吧。
- utils-chennaidong.zip (109 KB)
- 下载次数: 4
- pinyin4j-2.5.0.jar (184.5 KB)
- 下载次数: 3
- quartz-1.6.0.jar (411.7 KB)
- 下载次数: 2
- antlr-2.7.6.jar (433 KB)
- 下载次数: 2
- freemarker-2.3.13.jar (849.9 KB)
- 下载次数: 2
- aspectjweaver-1.5.2a.jar (1.8 MB)
- 下载次数: 3
- c3p0-0.9.1.2.jar (596.5 KB)
- 下载次数: 2
- cglib-nodep-2.1_3.jar (316.6 KB)
- 下载次数: 3
- commons-beanutils-1.7.0.jar (184.2 KB)
- 下载次数: 2
- commons-collections-3.2.1.jar (561.9 KB)
- 下载次数: 2
- commons-configuration-1.2.jar (160 KB)
- 下载次数: 1
- commons-fileupload-1.2.1.jar (56.4 KB)
- 下载次数: 0
- commons-io-1.3.2.jar (85.7 KB)
- 下载次数: 1
- commons-lang.jar (237.3 KB)
- 下载次数: 1
- commons-logging-1.1.jar (51.7 KB)
- 下载次数: 1
- commons-net-1.4.1.jar (176.6 KB)
- 下载次数: 1
- dom4j-1.6.1.jar (306.5 KB)
- 下载次数: 1
- jakarta-oro-2.0.8.jar (63.7 KB)
- 下载次数: 1
- jaxen-1.1-beta-9.jar (226.6 KB)
- 下载次数: 1
- json.jar (92.1 KB)
- 下载次数: 1
- json-lib-2.1.jar (122 KB)
- 下载次数: 1
- jstl-1.2.jar (404.5 KB)
- 下载次数: 1
- jta.jar (8.6 KB)
- 下载次数: 1
- junit-3.8.1.jar (118.2 KB)
- 下载次数: 1
- log4j-1.2.15.jar (382.7 KB)
- 下载次数: 1
- log4j-over-slf4j-1.5.0.jar (9 KB)
- 下载次数: 1
- mina-core-2.0.0-M1.jar (522.2 KB)
- 下载次数: 1
- mina-integration-beans-2.0.2.jar (39.2 KB)
- 下载次数: 1
- ognl-2.6.11.jar (164.1 KB)
- 下载次数: 1
- ojdbc14.jar (1.5 MB)
- 下载次数: 1
- pinyin4j-2.5.0.jar (184.5 KB)
- 下载次数: 1
- quartz-1.6.0.jar (411.7 KB)
- 下载次数: 1
- servlet-api.jar (83.3 KB)
- 下载次数: 1
- slf4j-api-1.5.0.jar (16.2 KB)
- 下载次数: 1
- slf4j-nop-1.5.0.jar (6 KB)
- 下载次数: 1
- spring.jar (2.8 MB)
- 下载次数: 1
- spring-beans.jar (476.8 KB)
- 下载次数: 1
- spring-context.jar (465.8 KB)
- 下载次数: 1
- spring-context-support.jar (90.7 KB)
- 下载次数: 1
- spring-core.jar (278.8 KB)
- 下载次数: 1
- spring-mock-2.0.jar (97 KB)
- 下载次数: 1
- spring-test-2.5.6.jar (176.7 KB)
- 下载次数: 1
- standard.jar (286.9 KB)
- 下载次数: 1
- struts2-core-2.1.6.jar (719.4 KB)
- 下载次数: 1
- struts2-spring-plugin-2.1.6.jar (9.3 KB)
- 下载次数: 1
- xwork-2.1.2.jar (2.2 MB)
- 下载次数: 2
发表评论
-
内容发布管理系统
2012-05-03 15:58 0在线编辑:Ckedit -
SEO调研报告
2012-05-03 15:54 0SEO 调研报告,大家分享下。 1、给我感觉,SEO真 ... -
基于lucene和数据库的搜索系统--分页:(3)
2012-05-03 15:17 0四、Lucene的搜素结果的数据分页: 代码片段: p ... -
基于lucene和数据库的搜索系统:(2)
2012-05-03 15:12 0Lucene的搜索功能非常强大,提供可扩展的过滤器,复杂的查询 ... -
广告项目:(5) 解析XMl-<1> dom4j解析
2012-05-03 14:56 10551:代码 package com.dvnchina.i ... -
基于lucene和数据库的搜索系统:(1)
2012-05-02 17:31 0一、lucene搜索系统:系 ... -
广告项目:(4) jquery树
2012-05-03 13:50 999<%@ page language="java ... -
广告项目:(2)spring的动态设置定时任务执行时间
2012-05-03 13:50 17701.定时器: 1.1 先看看配置文件:quartz. ... -
广告项目:(1 )文件上传
2012-05-03 13:49 995文件上传: Struts文件上传心得: 1.使 ...
相关推荐
本项目涉及的是在SpringBoot项目中使用Maven插件来调用Gradle任务生成文件,并且支持将生成的文件上传到FTP服务器或者保存在本地。下面将详细介绍这个过程中的关键知识点。 1. **SpringBoot**: SpringBoot是由...
redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级jdk1.8 jetty9.2.4 web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 ...
redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级jdk1.8 jetty9.2.4 web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 ...
redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级jdk1.8 jetty9.2.4 web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 ...
redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级jdk1.8 jetty9.2.4 web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 ...
redis 加锁,redis升级成2.8.2 freemarker工具类 1.1.6 spring websocket 实现在线聊天 maven升级jdk1.8 jetty9.2.4 web升级jdk1.7 tomcat7 1.1.7(maven only) 包名修改 从此不再支持web版本,只支持maven版本 ...
3. **注解驱动开发**:SpringMVC支持多种注解,如@Controller、@RequestMapping、@GetMapping、@PostMapping等,这些注解简化了配置,使得开发者可以直接在方法上定义路由和HTTP操作。 4. **文件上传**:在...
#### Ftp工具类 - **实现方式**:基于Apache FTPServer组件实现。 - **配置**:通过`user.properties`文件进行配置。 #### 常用工具类 - **Groovy**: - Groovy是一种运行于Java平台上的动态编程语言,兼容Java...
开发者或系统管理员会使用这个工具来学习如何在实际项目中整合SSH和Struts,实现安全的远程管理功能。 总的来说,SSH和Struts是两个在IT行业中至关重要的工具。SSH提供了安全的远程访问和文件传输,而Struts则简化...
- **文件读写**:掌握Properties类的使用方法,实现属性文件的读写操作。 ##### 实践项目 - **操作系统模拟**:设计一个简单的操作系统模型,实现进程调度、内存管理等功能。 - **飞机大战游戏**:开发一款简单的...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
5. 文件存储:可能集成阿里云OSS或FTP服务器,处理上传下载的文档。 6. 日志管理:通过Log4j或SLF4J记录系统运行日志,便于排查问题。 在开发过程中,AptechOA可能会遵循Maven或Gradle的构建工具,以管理项目的依赖...
- **文档管理**:存储和检索文档,可能采用文件系统、FTP或云存储服务。 - **通知提醒**:发送电子邮件或消息通知,可能集成SMTP或消息队列服务。 - **报表与数据分析**:可能包含BI(商业智能)组件,如ECharts...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...