1.JSP ä¸ä¼ ä¸è½½ä»£ç
2.StringUtilså¨commons-lang3åcommons-langä¸çåºå«
3.你知道ApacheCommon包中isNumeric方法是坑吗?
4.程序员的福音 - Apache Commons Lang
5.commons-collections4-4.1-javadoc.jaråcommons-collections4-4.1.jarçåºå«
6.求shop++的源代码
JSP ä¸ä¼ ä¸è½½ä»£ç
æç»ä½ æï¼
1.é¦å ä¸è¿ä¸¤ä¸ªå commons-fileupload-1.2.1.jarï¼commons-io-1.3.2.jar
2.ç¼ååå°é¡µé¢
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4. Transitional//EN">
<html>
<body>
<form action="<%=request.getContextPath()%>/UploadServlet" method="post" enctype="multipart/form-data">
username:<input type="text" name="username"><br>
password:<input type="password" name="password"><br>
file:<input type="file" name="file"><br>
<input type="submit" value="submit"><br>
</form>
</body>
</html>
3.ç¼åservlet
package cn.jci.upload.servlet;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet..jci.upload.servlet.UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
5.åå¸
okäº
è¿æ¯æåå§çä¸ä¼ æ件çåæ³ï¼ç°å¨struts2ä¸ä¼ çè¯ï¼å°±è¦è½»æ¾å¥½å¤
StringUtilså¨commons-lang3åcommons-langä¸çåºå«
ï¼1ï¼å ¥åç±»åä¸åcommons.langä¸å ¥å为 Sring str
commons.lang3ä¸å ¥å为 CharSequence cs(éç¨èå´æ´å¹¿)
ï¼2ï¼å ¥åæ°éä¸å
commons.lang3ä¸æ¯æå¤å ¥å
æè¿ç»å¸¸éè¦å¯¹Stringåä¸äºå¤æåå¤çï¼äºæ¯å°±ç¨å°äºApacheæä¾çStringUtilsè¿ä¸ªå·¥å ·ç±»ï¼ç¨çæ¶ååç°æ两个ä¸åççæ¬ï¼ä¸ä¸ªçæ¬ä½äºorg.apache.commons.langä¸é¢ï¼å¦ä¸ä¸ªåä½äºorg.apache.commons.lang3ä¸é¢ã
æ¥äºä¸ä¸èµæï¼lang3æ¯Apache Commons å¢éåå¸çå·¥å ·å ï¼è¦æ±jdkçæ¬å¨1.5以ä¸ï¼ç¸å¯¹äºlangæ¥è¯´å®å ¨æ¯æjava5çç¹æ§ï¼åºé¤äºä¸äºæ§çAPIã该çæ¬æ æ³å ¼å®¹æ§æçæ¬ï¼äºæ¯ä¸ºäºé¿å å²çªæ¹å为lang3ãè¿äºä¸è¥¿å°±ä¸åç»è¯´äºï¼æ们æ¥ççStringUtilsä¸å¸¸ç¨çä¸äºæ¹æ³æä»ä¹æ¹åå§ã
å¯ä»¥çå°è¿å 个æ¹æ³é»è¾æ¯«æ ååï¼åªæ¯åæ°ç±»ååäºï¼ç±Stringå为CharSequenceãé£ä¹è¿ä¸ªCharSequenceæ¯ä»ä¹å¢ï¼æ们ççå®çæºç ï¼
CharSequenceæ¯ä¸ä¸ªå符åºåçæ¥å£ï¼å ¶ä¸å®ä¹äºä¸äºå¸¸ç¨çå¦length()ãsubSequence()çæ¹æ³ï¼Stringä¹å®ç°äºè¿ä¸ªæ¥å£ãå½ç¶å¤§å®¶å¯è½å¨Stringéç¨å°çé½æ¯subString()ï¼å®é ä¸Stringä¹å®ç°äºsubSequence()è¿ä¸ªæ¹æ³ï¼åªæ¯ç´æ¥æåäºsubString()ã
lang3ä¸ä½¿ç¨CharSequenceæ大ç好å¤å°±æ¯ä»¤è¿äºæ¹æ³ç¨å¤æ´å 广æ³ï¼ä¸æ¢å±éäºStringï¼å ¶ä»ä¸äºå®ç°äºè¯¥æ¥å£çç±»ä¹å¯ä»¥ä½¿ç¨StringUtilsä¸çè¿äºæ¹æ³å»è¿è¡ä¸äºæä½ãå¦å¤æåç°å¾å¤nioä¸çç±»é½å®ç°äºè¿ä¸ªæ¥å£ï¼ä¸ªäººçæµå¯è½ä¹æ为nioæå¡çç®çã
å¨langä¸ï¼ç¬¬ä¸æ¥æ¯å å¤æstr1æ¯å¦ä¸ºç©ºï¼èå¨lang3ä¸ï¼ç¬¬ä¸æ¥åæ¯å å¤æ两个对象æ¯å¦ç¸åãè¿ä¸ªä¸é¾ç解ï¼å¦æ两个对象çå°åç¸åï¼é£ä¹å®ä»¬æåçå°±æ¯åä¸ä¸ªå¯¹è±¡ï¼å 容è¯å®ç¸åã
å¨lang3ä¸ï¼è¿å å ¥äºä¸äºåæ¶å¤æå¤ä¸ªåæ°çæ¹æ³ï¼å¯ä»¥çå°å®é ä¸æ¯å°åæ°å表æ¾å ¥ä¸ä¸ªCharSequenceæ°ç»ä¸ï¼ç¶åéåè°ç¨ä¹åçisEmptyçæ¹æ³ãå¤æblankä¹æ类似çæ¹æ³ã
å¯è½æ人ä¼è§å¾ï¼å¾å¤æ¹æ³Stringæ¬èº«å°±æåï¼ä¸ºä»ä¹è¿è¦ç¨StringUtilsæä¾çå¢ï¼æå¼åæ°ç±»åä¸è°ï¼æ们å¯ä»¥çå°ï¼StringUtilsä¸çæ¹æ³å¤§å¤é½åäºç©ºæ ¡éªï¼å¦æ为空æ¶ä¼è¿åNullæè 空串ï¼èStringæ¬èº«çæ¹æ³å¨å¾å¤ä¼ å ¥åæ°æ对象æ¬èº«ä¸ºç©ºçæ¶åé½ä¼æ¥ç©ºæéé误ã
åèå°åï¼ StringUtilså¨commons-lang3åcommons-langä¸çåºå«
你知道ApacheCommon包中isNumeric方法是坑吗?
使用的Apache-Common包的版本是commons-lang-2.6.jar
本文就来分享一个这个坑的情况,以免其它tx也掉坑中
费话不多说,来看代码: package chapter4; import org.apache.commons.lang.StringUtils; /** * Created by MyWorld on /3/. */ public class StringUtilsIsNumericChecker { public static void main(String[] args) { System.out.println(StringUtils.isNumeric("1")); System.out.println(StringUtils.isNumeric("-1")); } }
围观的tx,认为上面api的输出结果会是什么呢?两个true? 好吧,执行一行看看结果: true false
什么情况,-1不是同城源码移动版数字吗? 为什么是false呢 来分析下源码: public static boolean isNumeric(String str) { if (str == null) { return false; } int sz = str.length(); for (int i = 0; i sz; i++) { if (Character.isDigit(str.charAt(i)) == false) { return false; } } return true; }
源码中判断是否数字的依据是JDK的API: java.lang.Character.isDigit(str.charAt(i)) 看看个API的源码: public static boolean isDigit(char ch) { return isDigit((int)ch); }
看看isDigit(int codePoint)的源码: public static boolean isDigit(int codePoint) { boolean bDigit = false; if (codePoint = MIN_CODE_POINT codePoint = FAST_PATH_MAX) { bDigit = CharacterDataLatin1.isDigit(codePoint); } else { int plane = getPlane(codePoint); switch(plane) { case(0): bDigit = CharacterData.isDigit(codePoint); break; case(1): bDigit = CharacterData.isDigit(codePoint); break; case(2): bDigit = CharacterData.isDigit(codePoint); break; case(3): // Undefined case(4): // Undefined case(5): // Undefined case(6): // Undefined case(7): // Undefined case(8): // Undefined case(9): // Undefined case(): // Undefined case(): // Undefined case(): // Undefined case(): // Undefined bDigit = CharacterDataUndefined.isDigit(codePoint); break; case(): bDigit = CharacterData0E.isDigit(codePoint); break; case(): // Private Use case(): // Private Use bDigit = CharacterDataPrivateUse.isDigit(codePoint); break; default: // the argument's plane is invalid, and thus is an invalid codepoint // bDigit remains false; break; } } return bDigit; }
下面还有更深的调用,貌似还涉及到ASCII码了。 水太深,就不继续看了。 有一点是肯定的,这个API不是通过类似Regex expression的方式来判断是数字,而通过每个字符的ASCII的值类确定的 回到API的isNumeric(String str), 看看Doc是源码中国源码网怎么说的: /** * pChecks if the String contains only unicode digits. * A decimal point is not a unicode digit and returns false./p * * pcodenull/code will return codefalse/code. * An empty String (length()=0) will return codetrue/code./p * * pre * StringUtils.isNumeric(null) = false * StringUtils.isNumeric("") = true * StringUtils.isNumeric(" ") = false * StringUtils.isNumeric("") = true * StringUtils.isNumeric(" 3") = false * StringUtils.isNumeric("ab2c") = false * StringUtils.isNumeric("-3") = false * StringUtils.isNumeric(".3") = false * /pre * * @param str the String to check, may be null * @return codetrue/code if only contains digits, and is non-null */
看完上面的Doc,感觉水好深。 这个API的方法名直接命名为isInt不就完了。方法名很容易误导人 这也是给开发的tx敲了一个警钟, api使用之前一定要确认清楚,至少看看Doc文档吧
程序员的福音 - Apache Commons Lang
此文为系列文章的后续篇章,欲了解更多前文内容,源码站 源码请点击链接查阅。
Apache Commons Lang是对Java标准库java.lang的扩展,在commons工具包中,Lang包是最常用的。
目前Lang包包括commons-lang3和commons-lang两个版本。Lang的WordPress源码交易源码最新版本为2.6,适用于Java1.2及以上环境,但官方已不再维护。Lang3的最新版本为3..0,适用于Java8及以上环境,完全支持Java8的特性,并废弃了一些旧的thinkphp源码下载源码API。由于版本不兼容,Lang3更名为lang3以避免冲突。
推荐Java8以上的用户使用lang3代替lang。以下内容以lang3 - 3..0版本为例进行说明。
以下是整体结构:
以下仅列举其中常用功能进行说明,其余功能可自行查阅源码研究。
. 日期相关:在Java8之前,日期处理主要依赖于java.util.Date和java.util.Calendar类,但这两个API存在线程安全问题且不够便捷。Java8推出了新的日期API。如果仍在使用旧的日期API,可以使用DateUtils和DateFormatUtils工具类进行转换和计算。
. 字符串相关:字符串是Java中最常用的类型,相关工具类也最为常用。以下列举了一些常用功能:
1. 字符串判空
2. 字符串去空格
3. 字符串分割
4. 取子字符串
5. 其他功能
6. 随机字符串
. 反射相关:反射是Java的重要特性,Lang包中的反射工具类可以方便地实现反射功能。以下列举了一些常用功能:
1. 属性操作
注:方法名含Declared的只会在当前类实例上寻找,不包含Declared的在当前类上找不到则会递归向父类上一直查找。
2. 获取注解方法
3. 方法调用
其他还有ClassUtils,ConstructorUtils,TypeUtils等,不是很常用,有需求的可以现查阅类的源码。
. 系统相关:主要获取操作系统和JVM的一些信息。
. 总结:除了以上介绍的工具类外,还有其他不常用的工具类。感兴趣的用户可以自行查阅源码研究。
commons-collections4-4.1-javadoc.jaråcommons-collections4-4.1.jarçåºå«
åé¢æ¯apiææ¡£åæºç ï¼åé¢æ¯ç¼è¯å¥½çjarå ãåè ç¨æ¥å¨ideéæclassæ¾ç¤ºæ代ç ï¼åé¢æ¯ç´æ¥è°ç¨ç
求shop++的源代码
主要库
spring-aop-4.0.9.RELEASE
spring-beans-4.0.9.RELEASE
spring-context-4.0.9.RELEASE
spring-context-support-4.0.9.RELEASE
spring-core-4.0.9.RELEASE
spring-expression-4.0.9.RELEASE
spring-jdbc-4.0.9.RELEASE
spring-orm-4.0.9.RELEASE
spring-test-4.0.9.RELEASE
spring-tx-4.0.9.RELEASE
spring-web-4.0.9.RELEASE
spring-webmvc-4.0.9.RELEASE
hibernate-core-4.3.9.Final
hibernate-jpa-2.1-api-1.0.0.Final
hibernate-entitymanager-4.3.9.Final
hibernate-validator-5.1.3.Final
hibernate-search-orm-4.5.3.Final
lucene-core-3.6.2
freemarker-2.3.
ehcache-core-2.6.
ehcache-web-2.0.4
shiro-core-1.2.3
shiro-web-1.2.3
c3p0-0.9.2.1
commons-lang-2.6
commons-beanutils-1.9.2
commons-collections-3.2.1
commons-io-2.4
commons-net-3.3
commons-fileupload-1.3.1
commons-codec-1.
commons-email-1.3.3
commons-compress-1.9
junit-4.
httpclient-4.3.5
httpcore-4.3.2
slf4j-api-1.7.7
jcl-over-slf4j-1.7.7
logback-core-1.1.2
logback-classic-1.1.2
dom4j-1.6.1
jackson-core-2.4.3
jackson-databind-2.4.3
jackson-annotations-2.4.3
IKAnalyzer_u6