05.小工具收集

项目总结

一、工具类篇

1. 根据计算机Mac地址获取全球唯一标识码UuidUtil

import java.util.UUID;

/**
 * 产生UUID随机字符串工具类
 */
public final class UuidUtil {
    private UuidUtil(){}
    public static String getUuid(){
        return UUID.randomUUID().toString().replace("-","");
    }
    /**
     * 测试
     */
    public static void main(String[] args) {
        System.out.println(UuidUtil.getUuid());
        System.out.println(UuidUtil.getUuid());
        System.out.println(UuidUtil.getUuid());
        System.out.println(UuidUtil.getUuid());
    }
}

2. 密码的MD5加密Md5Util

import java.security.MessageDigest;

/**
 * 写一个MD5算法,运行结果与MySQL的md5()函数相同
 * 将明文密码转成MD5密码
 * 123456->e10adc3949ba59abbe56e057f20f883e
 */
public final class Md5Util {
    private Md5Util(){}
    /**
     * 将明文密码转成MD5密码
     */
    public static String encodeByMd5(String password) throws Exception{
        //Java中MessageDigest类封装了MD5和SHA算法,今天我们只要MD5算法
        MessageDigest md5 = MessageDigest.getInstance("MD5");
        //调用MD5算法,即返回16个byte类型的值
        byte[] byteArray = md5.digest(password.getBytes());
        //注意:MessageDigest只能将String转成byte[],接下来的事情,由我们程序员来完成
        return byteArrayToHexString(byteArray);
    }
    /**
     * 将byte[]转在16进制字符串
     */
    private static String byteArrayToHexString(byte[] byteArray) {
        StringBuffer sb = new StringBuffer();
        //遍历
        for(byte b : byteArray){//16次
            //取出每一个byte类型,进行转换
            String hex = byteToHexString(b);
            //将转换后的值放入StringBuffer中
            sb.append(hex);
        }
        return sb.toString();
    }
    /**
     * 将byte转在16进制字符串
     */
    private static String byteToHexString(byte b) {//-31转成e1,10转成0a,。。。
        //将byte类型赋给int类型
        int n = b;
        //如果n是负数
        if(n < 0){
            //转正数
            //-31的16进制数,等价于求225的16进制数
            n = 256 + n;
        }
        //商(14),数组的下标
        int d1 = n / 16;
        //余(1),数组的下标
        int d2 = n % 16;
        //通过下标取值
        return hex[d1] + hex[d2];
    }
    private static String[] hex = {"0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"};
    /**
     * 测试
     */
    public static void main(String[] args) throws Exception{
        String password = "123456";
        String passwordMD5 = Md5Util.encodeByMd5(password);
        System.out.println(password);
        System.out.println(passwordMD5);
    }
}

3.邮件发送MailUtil

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Properties;

/**
 * 发邮件工具类
 */
public final class MailUtils {
    private static final String USER = "shangjin_qingnian@163.com"; // 发件人称号,同邮箱地址
    private static final String PASSWORD = "itcast123"; // 如果是qq邮箱可以使户端授权码,或者登录密码

    /**
     *
     * @param to 收件人邮箱
     * @param text 邮件正文
     * @param title 标题
     */
    /* 发送验证信息的邮件 */
    public static boolean sendMail(String to, String text, String title){
        try {
            final Properties props = new Properties();
            props.put("mail.smtp.auth", "true");
            //props.put("mail.smtp.host", "smtp.qq.com");
            props.put("mail.smtp.host", "smtp.163.com");

            // 发件人的账号
            props.put("mail.user", USER);
            //发件人的密码
            props.put("mail.password", PASSWORD);

            // 构建授权信息用于进行SMTP进行身份验证,
            Authenticator authenticator = new Authenticator() {
                @Override
                protected PasswordAuthentication getPasswordAuthentication() {
                    // 用户名、密码
                    String userName = props.getProperty("mail.user");
                    String password = props.getProperty("mail.password");
                    return new PasswordAuthentication(userName, password);
                }
            };
            // 使用环境属性和授权信息,创建邮件会话
            Session mailSession = Session.getInstance(props, authenticator);
            // 创建邮件消息
            MimeMessage message = new MimeMessage(mailSession);
            // 设置发件人
            String username = props.getProperty("mail.user");
            InternetAddress form = new InternetAddress(username);
            message.setFrom(form);

            // 设置收件人
            InternetAddress toAddress = new InternetAddress(to);
            message.setRecipient(Message.RecipientType.TO, toAddress);

            // 设置邮件标题
            message.setSubject(title);

            // 设置邮件的内容体
            message.setContent(text, "text/html;charset=UTF-8");
            // 发送邮件
            Transport.send(message);
            return true;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) throws Exception { // 做测试用
        MailUtils.sendMail("tanshuai@itcast.cn","你好,这是一封测试邮件,无需回复。","测试邮件");
        System.out.println("发送成功");
    }

}

二、JQuery操作补充

1. JQuery去除字符串前后空格

$.trim($("选择器").val())

2. 跳转页面

location.href = "url"

3.【重要】,获取地址栏参数

var variable = location.search;

# 可以封装成一个函数
function getParameter(name) {
    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)","i");
    var r = location.search.substr(1).match(reg);
    if (r!=null) return (r[2]); return null;
}

4. 分页器核心代码实现

// 3. 渲染生成分页条,最多10条,前五后四当前中!
var currentPage = data.currentPage; // 当前页码
var totalPage = data.totalPage;     // 最大页码

// 3.1 记录分页器的起始位置
var begin;
var end;

// 逻辑判断
if(totalPage <= 10) {
    begin = 1;
    end = totalPage;
} else {
    if(currentPage <= 6) {
        begin = 1;
        end = 10;
    } else if(currentPage >= totalPage - 4) {
        begin = totalPage - 9;
        end = totalPage;
    } else {
        begin = currentPage - 5;
        end = currentPage + 4;
    }
}

5. 当前操作需要跳转到登录,登录成功后回到之前操作页码的技巧

在跳转路径后面加上当前路径以及相关参数,登录页实现登录后根据地址栏的参数实现跳转;当然,也可以用这种方式实现参数的传递

  1. 跳转页核心代码如下案例
location.href = "login.html?nowpage.html?var=" + variable;
  1. 登录页核心代码
location.href = location.search.substring(1)
/* substring(1)的作用是去掉问号 */

三、编码问题

解决tomcat7等get/post中文编码问题,思路是在Filter中使用代理器增强getParameterMap等对应的方法

6.地址栏获取参数,解决中文乱码踩的坑

假如地址栏没有“varable”这个参数,返回null,但是decodeURIComponent会将其转换为字符串形式的"null";如果后台收到这个字符串的"null",一般情况下就懵逼了!所以得判断!

var varable = decodeURIComponent(getParameter("varable"));

# 此时 varable == "null";应该加入以下判断!
if(varable == "null")
    varable = null;

Filter下的doFilter方法中

// 使用代理模式,增强返回值,解决tomcat7带来的中文乱码问题!
HttpServletRequest request = (HttpServletRequest)Proxy.newProxyInstance(
        req.getClass().getClassLoader(),
        req.getClass().getInterfaces(),
        (proxy, method, args) -> {

            if("getParameterMap".equals(method.getName())) {
                Map<String, String[]> map = (Map<String, String[]>)method.invoke(req, args);
                Map<String, String[]> newMap = new HashMap<>();

                for (String s : map.keySet()) {
                    String[] temp = map.get(s);
                    for (int i = 0; i < temp.length; i++) {
                        // 解决tomcat7中文乱码问题!
                        if(temp[i] != null) {
                            temp[i] = new String(temp[i].getBytes("iso-8859-1"), "utf-8");
                        }
                    }
                    newMap.put(s, temp);
                }
                map = null;
                return newMap;
            } else {
                return method.invoke(req, args);
            }
        }
);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,870评论 4 61
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,725评论 1 45
  • 誓言是一种美丽的语言,有一种让人沉迷其中的力量,在眩晕的时刻能腾云驾雾,带你进入奇妙绝伦的仙境。誓言也许有一种坚定...
    新文艺青年阅读 489评论 7 4
  • 男女之间的爱情,有时候就像一场博弈。 爱情是必须的,爱情是庸常疲惫生活的最后栖息地。每个人都对爱情有着自己的想象与...
    内河an阅读 2,449评论 0 0
  • 项目中有监控网卡的需求,但是一般的方法都需要指定某个网卡,然后返回网卡状态,另外如何从所有网卡中过滤出物理网卡也是...
    hoxis阅读 2,868评论 0 4

友情链接更多精彩内容