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.郵件發(fā)送MailUtil

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

/**
 * 發(fā)郵件工具類
 */
public final class MailUtils {
    private static final String USER = "shangjin_qingnian@163.com"; // 發(fā)件人稱號,同郵箱地址
    private static final String PASSWORD = "itcast123"; // 如果是qq郵箱可以使戶端授權碼,或者登錄密碼

    /**
     *
     * @param to 收件人郵箱
     * @param text 郵件正文
     * @param title 標題
     */
    /* 發(fā)送驗證信息的郵件 */
    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");

            // 發(fā)件人的賬號
            props.put("mail.user", USER);
            //發(fā)件人的密碼
            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);
                }
            };
            // 使用環(huán)境屬性和授權信息,創(chuàng)建郵件會話
            Session mailSession = Session.getInstance(props, authenticator);
            // 創(chuàng)建郵件消息
            MimeMessage message = new MimeMessage(mailSession);
            // 設置發(fā)件人
            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");
            // 發(fā)送郵件
            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("發(fā)送成功");
    }

}

二、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);
            }
        }
);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 發(fā)現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 15,376評論 4 61
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML標準。 注意:講述HT...
    kismetajun閱讀 28,819評論 1 45
  • 誓言是一種美麗的語言,有一種讓人沉迷其中的力量,在眩暈的時刻能騰云駕霧,帶你進入奇妙絕倫的仙境。誓言也許有一種堅定...
    新文藝青年閱讀 497評論 7 4
  • 男女之間的愛情,有時候就像一場博弈。 愛情是必須的,愛情是庸常疲憊生活的最后棲息地。每個人都對愛情有著自己的想象與...
    內河an閱讀 2,467評論 0 0
  • 項目中有監(jiān)控網卡的需求,但是一般的方法都需要指定某個網卡,然后返回網卡狀態(tài),另外如何從所有網卡中過濾出物理網卡也是...
    hoxis閱讀 2,873評論 0 4

友情鏈接更多精彩內容