Util

 

Constant.java

public class Constant {
 //提高可读性
 public static final int  NORMAL_LEVEL = 1;//普通
 public static final int  HIGHT_LEVEL = 2;//高级
 public static final int  VIP_LEVEL = 3;//VIP
 //处理结果
 public static final int  EXECUTE_OK = 0; //成功
 public static final int  EXECUTE_FAIL = 1; //失败
 
 //向Session存放的key,避免冲突
 public static final String USER_KEY =
        "com.dang.user";
 public static final String CART_KEY =
        "com.dang.cart";
 
}

=================================================

VerifyCodeUtils.java 文件

package org.dang.action.util;

import java.util.UUID;

/**
 * 邮箱验证码工具类
 * @author Administrator
 *
 */
public class VerifyCodeUtils {
 /**
  * 生成UUID
  * @return
  */
 public static String generateCode() {
  UUID uuid = UUID.randomUUID();
  return uuid.toString() ;
 }

 /**
  * 获取邮箱验证码的UUID部分
  * @param input
  * @return
  */
 public static String getUUID(String input) {
  if (input == null)
   return null;
  if (input.lastIndexOf("_") < 0)
   return null;
  return input.substring(0, input.lastIndexOf("_"));
 }
 
 /**
  * 获取用户ID
  * @param input
  * @return
  */
 public static Integer getUserId(String input) {
  if (input == null)
   return null;
  if (input.lastIndexOf("_") < 0)
   return null;
  return Integer.valueOf(input.substring(input.lastIndexOf("_") + 1));
 }
 
 public static void main(String[] args){
  System.out.println(generateCode());
  System.out.println(generateCode());
 }
}

=================================================

MD5加密算法

MD5Utils.java

public class MD5Utils {
 public static String md5(String str) {
  try {
   //首先利用MD5算法将密码加密,变成等长字节
   MessageDigest md = MessageDigest.getInstance("MD5");
   byte[] b1 = md.digest(str.getBytes());
   //将等长字节利用Base64算法转换成字符串
   BASE64Encoder encoder = new BASE64Encoder();
   return encoder.encode(b1);
  } catch (Exception e) {
   return null;
  }

 }
 

===============================================

EmailUtils.java 文件

public class EmailUtils {
 public static int sendEmail(String code,String email){
  System.out.println("给"+email+"发送了邮箱验证码");
  System.out.println("验证码为:"+code);
  //TODO 邮件发送
  return Constant.EXECUTE_OK;
 }
}

 

 ================================================

DBUtil.java 连接池

import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

 

public class DBUtil {
 //连接池对象
 private static DataSource dataSource;
 //负责将connection与当前执行线程绑定
 private static ThreadLocal<Connection> connLocal= new ThreadLocal<Connection>();
 
 static {
  try {
  Properties props = new Properties();
  props.load(DBUtil.class.getClassLoader().getResourceAsStream("dbcp.properties"));
   dataSource = BasicDataSourceFactory.createDataSource(props);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 
 public static Connection openConnection()throws SQLException{
  Connection conn = connLocal.get();
  if(conn == null){
   conn = dataSource.getConnection();
   connLocal.set(conn);
  }
  return conn;
 }
 
 public static void closeConnection() throws SQLException{
  Connection conn = connLocal.get();
  connLocal.set(null);
  if(conn != null && !conn.isClosed()){
   conn.close();
  }
 }
 
 
 
 
}

 

07-23
<think>我们正在讨论JavaScript中的util工具库或常用方法。根据提供的引用,我们可以总结出一些常见的util工具方法和库。 引用[1]提到了一系列JavaScript工具类,包括cookie缓存、本地存储、数据类型判断、字符串处理、数字处理、数组处理、对象处理、日期处理、base64编码解码、浏览器/移动端类型判断、表单验证、URL路径处理、JSON处理等。这些可以视为一个util工具库的常见功能。 引用[2]提到了Node.js中的util模块,特别是`util.inherits`方法,用于实现对象间的原型继承。Node.js的util模块还提供了其他实用函数,如格式化字符串、类型检查等。 引用[3]展示了一个下载文件的util方法,通过动态创建iframe来实现文件下载。 因此,我们可以将JavaScript中的util工具方法分为两类: 1. 浏览器环境下的工具方法(如处理DOM、BOM、浏览器存储等) 2. Node.js环境下的工具方法(如处理文件路径、继承、流等) 下面我将分别介绍这两类环境中常见的util工具方法,并给出示例。 ## 一、浏览器环境下的常用util方法 ### 1. 数据类型判断 ```javascript function isString(value) { return typeof value === 'string'; } function isArray(value) { return Array.isArray(value); } function isObject(value) { return Object.prototype.toString.call(value) === '[object Object]'; } function isFunction(value) { return typeof value === 'function'; } ``` ### 2. 字符串处理 例如:去除字符串空格 ```javascript function trim(str) { return str.replace(/^\s+|\s+$/g, ''); } ``` ### 3. 本地存储操作(localStorage, sessionStorage) ```javascript const storage = { set: (key, value) => { localStorage.setItem(key, JSON.stringify(value)); }, get: (key) => { const value = localStorage.getItem(key); return value ? JSON.parse(value) : null; }, remove: (key) => { localStorage.removeItem(key); } }; ``` ### 4. Cookie操作 ```javascript const cookie = { set: (name, value, days) => { let expires = ""; if (days) { const date = new Date(); date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); expires = "; expires=" + date.toUTCString(); } document.cookie = name + "=" + (value || "") + expires + "; path=/"; }, get: (name) => { const nameEQ = name + "="; const ca = document.cookie.split(';'); for (let i = 0; i < ca.length; i++) { let c = ca[i]; while (c.charAt(0) === ' ') c = c.substring(1, c.length); if (c.indexOf(nameEQ) === 0) return c.substring(nameEQ.length, c.length); } return null; }, remove: (name) => { document.cookie = name + '=; Max-Age=-99999999;'; } }; ``` ### 5. URL处理 例如:解析URL参数 ```javascript function getUrlParams(url) { const queryString = url.split('?')[1]; if (!queryString) return {}; const params = {}; queryString.split('&').forEach(pair => { const [key, value] = pair.split('='); params[key] = decodeURIComponent(value); }); return params; } ``` ### 6. 下载文件(如引用[3]所示) ```javascript function download(filePath) { const url = `${window.location.origin}${window.location.pathname}${filePath}`; try { const elemIF = document.createElement("iframe"); elemIF.src = url; elemIF.style.display = "none"; document.body.appendChild(elemIF); } catch (e) { console.error("下载失败", e); } } ``` ## 二、Node.js环境下的util模块常用方法 Node.js内置了`util`模块,无需安装即可使用。 ```javascript const util = require('util'); ``` ### 1. 类型判断 ```javascript util.types.isDate(new Date()); // true util.types.isMap(new Map()); // true ``` ### 2. 格式化字符串 ```javascript console.log(util.format('%s:%s', 'foo', 'bar')); // 'foo:bar' ``` ### 3. 回调函数转Promise(promisify) ```javascript const fs = require('fs'); const readFile = util.promisify(fs.readFile); async function main() { const data = await readFile('./file.txt'); console.log(data); } ``` ### 4. 继承(util.inherits,不推荐,建议使用ES6 class extends) ```javascript // 引用[2]中的例子 var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello = function() { console.log('Hello ' + this.name); }; } Base.prototype.showName = function() { console.log(this.name); }; function Sub() { this.name = 'sub'; } util.inherits(Sub, Base); // Sub继承Base的原型方法 var objSub = new Sub(); objSub.showName(); // 输出: sub // objSub.sayHello(); // 错误,因为sayHello是Base的实例方法,不是原型方法 ``` 注意:`util.inherits`只继承原型方法,不继承实例属性(在构造函数中定义的属性)。在ES6中,我们可以直接使用`class`和`extends`关键字。 ### 5. 调试工具(util.debuglog) ```javascript const debuglog = util.debuglog('foo'); debuglog('hello from foo'); // 当程序以NODE_DEBUG=foo node script.js运行时才会输出 ``` ## 三、流行的第三方工具库 除了自己编写util方法,还可以使用成熟的第三方工具库: 1. **Lodash**:提供了大量函数式编程的工具方法,如数组、对象、字符串操作等。 - 安装:`npm install lodash` - 使用: ```javascript const _ = require('lodash'); _.chunk([1,2,3,4], 2); // [[1,2],[3,4]] ``` 2. **Underscore.js**:类似Lodash,但功能稍少。 - 安装:`npm install underscore` 3. **RxJS**:响应式编程工具库,处理异步事件流。 4. **Moment.js**(或Day.js):日期处理工具库。 5. **Axios**:HTTP客户端,用于浏览器和Node.js。 6. **Validator.js**:字符串验证和过滤。 7. **Platform.js**:检测浏览器和操作系统信息。 ## 四、完整示例:一个简单的util.js 以下是一个简单的util.js示例,包含一些常用的工具方法: ```javascript // util.js const utils = { // 数据类型判断 isString: value => typeof value === 'string', isNumber: value => typeof value === 'number', isArray: Array.isArray, isObject: value => Object.prototype.toString.call(value) === '[object Object]', isFunction: value => typeof value === 'function', // 字符串处理 trim: str => str.replace(/^\s+|\s+$/g, ''), // 存储操作 storage: { set: (key, value) => localStorage.setItem(key, JSON.stringify(value)), get: key => { const value = localStorage.getItem(key); return value ? JSON.parse(value) : null; }, remove: key => localStorage.removeItem(key) }, // 下载文件 download: filePath => { const url = `${window.location.origin}${window.location.pathname}${filePath}`; try { const elemIF = document.createElement('iframe'); elemIF.src = url; elemIF.style.display = 'none'; document.body.appendChild(elemIF); } catch (e) { console.error('下载失败', e); } } }; export default utils; // 或者 module.exports = utils; (CommonJS) ``` ## 五、使用建议 1. 在浏览器环境中,避免使用Node.js的util模块(因为不可用)。 2. 在Node.js环境中,优先使用内置的util模块,再考虑第三方库。 3. 第三方库如Lodash提供了非常全面的工具方法,建议在大型项目中使用。 以上内容涵盖了JavaScript中util工具库的常见方法和使用场景。根据实际需求,可以选择合适的工具方法或库。 §§相关问题§§ 1. JavaScript中如何实现深拷贝? 2. Lodash和Underscore.js有什么区别? 3. 如何在Node.js中使用util.promisify处理回调函数?</think>以下是关于 JavaScript `util` 工具库及常用方法的系统整理,结合浏览器和 Node.js 环境的核心功能: --- ### 一、核心工具方法分类 #### 1. **数据类型判断** ```javascript // 判断数据类型 function getType(obj) { return Object.prototype.toString.call(obj).slice(8, -1); } // 示例 getType([]); // "Array" getType({}); // "Object" getType(null); // "Null" ``` #### 2. **对象属性操作** ```javascript // 深拷贝对象 function deepClone(obj) { return JSON.parse(JSON.stringify(obj)); } // 对象合并 function mergeObjects(...objs) { return Object.assign({}, ...objs); } ``` #### 3. **字符串处理** ```javascript // 生成随机字符串 function randomString(len = 8) { return Math.random().toString(36).substr(2, len); } // HTML转义(防XSS攻击) function escapeHTML(str) { return str.replace(/[&<>"']/g, m => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' }[m])); } ``` #### 4. **浏览器存储工具** ```javascript // 封装LocalStorage const storage = { set(key, value) { localStorage.setItem(key, JSON.stringify(value)); }, get(key) { return JSON.parse(localStorage.getItem(key)); }, remove(key) { localStorage.removeItem(key); } }; ``` #### 5. **URL参数处理** ```javascript // 解析URL参数 function parseQueryParams() { return Object.fromEntries( new URLSearchParams(window.location.search) ); } // 示例:?name=John → { name: "John" } ``` --- ### 二、Node.js 专属工具方法 #### 1. **实用工具模块** ```javascript const util = require('util'); // 回调转Promise const fs = require('fs'); const readFileAsync = util.promisify(fs.readFile); // 类型检查 util.isArray([]); // true util.isDate(new Date()); // true ``` #### 2. **继承工具** ```javascript // 原型继承(传统方式) function Animal() {} function Dog() {} util.inherits(Dog, Animal); // Dog继承Animal[^2] ``` --- ### 三、流行工具库推荐 1. **Lodash** - 提供 200+ 工具函数 - 示例:深拷贝 `_.cloneDeep()`,防抖 `_.debounce()` ```bash npm install lodash ``` 2. **Underscore.js** - 轻量级替代方案(类似 Lodash) - 函数式编程支持:`_.map()`, `_.reduce()` 3. **RxJS** - 响应式编程库 - 处理异步事件流 --- ### 四、完整工具类示例 ```javascript // util.js export default { // 数据类型判断 isFunction(obj) { return typeof obj === 'function'; }, // 下载文件(浏览器环境) downloadFile(url) { const iframe = document.createElement('iframe'); iframe.style.display = 'none'; iframe.src = url; document.body.appendChild(iframe); setTimeout(() => iframe.remove(), 1000); }, // [^3] // 格式化日期 formatDate(date, fmt = 'YYYY-MM-DD') { const d = new Date(date); return fmt.replace(/YYYY/g, d.getFullYear()) .replace(/MM/g, (d.getMonth() + 1).toString().padStart(2, '0')); } }; // 使用示例 import utils from './util.js'; utils.downloadFile('/report.pdf'); ``` --- ### 五、使用建议 1. **浏览器环境**:优先使用原生 API(如 `URLSearchParams`),复杂操作选 Lodash 2. **Node.js 环境**:内置 `util` 模块解决 80% 需求 3. **安全提示**:处理用户输入时务必转义(如 `escapeHTML()`)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ITdada

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值