項目啟動前,對不熟悉領域進行技術穿刺:優先找成熟開源組件,否則自研輕量方案。本文解決:
/username 或 username.xkland.com)JDK MessageDigest 產出 byte[],轉十六進制字符串:
public class StringUtil {
private static final char[] HEX = '0123456789ABCDEF'.toCharArray();
public static String toMD5String(String input) {
if (input == null) throw new NullPointerException();
MessageDigest md = MessageDigest.getInstance('MD5');
byte[] bytes = md.digest(input.getBytes());
char[] out = new char[32];
for (int i=0; i<bytes.length; i++) {
out[2*i] = HEX[(bytes[i] & 0xF0) >> 4];
out[2*i+1] = HEX[bytes[i] & 0x0F];
}
return new String(out);
}
}
測試:abc → 900150983CD24FB0D6963F7D28E17F72。
Spring 管理的 Bean,可配置屬性:
sourceDir、destinationDirwidth、heightmode:ScaleOnly(等比縮放)或 ClipAndScale(居中裁剪後縮放,適合列表整齊)characterStorage:驗證碼字符庫核心邏輯:
BufferedImage,獲取原寬高validateStringSpring 配置:
<bean id="imageUtil" class="com.xkland.util.ImageUtil">
<property name="sourceDir" value="E:\\"/>
<property name="destinationDir" value="F:\\"/>
<property name="width" value="100"/>
<property name="height" value="100"/>
<property name="mode" value="ScaleOnly"/>
<property name="characterStorage" value="ABCDEFGHIJKLMNOPQRSTUVWXYZ北冥有魚..."/>
</bean>
初嘗 Servlet 映射失敗,後悟:Filter 才是正道(Struts 2.x 亦改用 Filter)。核心邏輯:攔截請求,解析 URL,重寫至內部路徑(如 /index.jsp?username=xxx),轉發。字符串分析替換,靈活可控。
技術穿刺不求大而全,只解當前問題。自研輕量工具類,既避免整合開源組件的繁瑣,又能深化技術內功。會者不難,難者不會——想不到的才做不到。