`
sungang_1120
  • 浏览: 310960 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
收藏列表
标题 标签 来源
maven pom.xml配置及其一些插件配置 maven
//===================================maven 将jar打包进去======================================
<build>
     <plugins>
          <plugin>
               <artifactId>maven-assembly-plugin</artifactId>
               <configuration>
                    <archive>
                         <manifest>
                              <mainClass>org.shirdrn.solr.cloud.index.hadoop.SolrCloudIndexer</mainClass>
                         </manifest>
                    </archive>
                    <descriptorRefs>
                         <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
               </configuration>
               <executions>
                    <execution>
                         <id>make-assembly</id>
                         <phase>package</phase>
                         <goals>
                              <goal>single</goal>
                         </goals>
                    </execution>
               </executions>
          </plugin>
     </plugins>
</build>



//===================================jetty 配置======================================
<plugin>
				<groupId>org.mortbay.jetty</groupId>
				<artifactId>maven-jetty-plugin</artifactId>
				<version>6.1.8</version>
				<configuration>
					<contextPath>/</contextPath>
					<scanIntervalSeconds>10</scanIntervalSeconds>
					<stopPort>9966</stopPort>
					<stopKey>foo</stopKey>
					<connectors>
						<connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
							<port>8888</port>
							<maxIdleTime>60000</maxIdleTime>
						</connector>
					</connectors>
				</configuration>
			</plugin>

//===================================maven-war-plugin 配置======================================
<plugin>
				<inherited>true</inherited>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<warName>blank</warName>
					<webappDirectory>${project.build.directory}/custom-mvc</webappDirectory>
				</configuration>
				<executions>
					<execution>
						<phase>install</phase>
						<goals>
							<goal>war</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

//===================================maven-Spring 配置======================================

<spring.version>3.2.8.RELEASE</spring.version>
<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc-portlet</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jms</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
			<scope>test</scope>
		</dependency>


//===================================maven- 其他 Jar 配置======================================

<!-- �?用于 自动生成 getter �?setter方法 直接 �?@Setter -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>0.11.4</version>
		</dependency>
<!-- Aspectj -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.7.0</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.7.0</version>
		</dependency>
	<!-- log base JAR -->
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.17</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>1.7.7</version>
		</dependency>


		<dependency>
			<groupId>com.thoughtworks.xstream</groupId>
			<artifactId>xstream</artifactId>
			<version>1.4.7</version>
		</dependency>

		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient</artifactId>
			<version>4.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpclient-cache</artifactId>
			<version>4.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore</artifactId>
			<version>4.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpcore-nio</artifactId>
			<version>4.2.3</version>
		</dependency>
		<dependency>
			<groupId>org.apache.httpcomponents</groupId>
			<artifactId>httpmime</artifactId>
			<version>4.2.3</version>
		</dependency>

		<dependency>
			<groupId>com.mortennobel</groupId>
			<artifactId>java-image-scaling</artifactId>
			<version>0.8.5</version>
		</dependency>

		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.20</version>
		</dependency>

		<dependency>
			<groupId>oro</groupId>
			<artifactId>oro</artifactId>
			<version>2.0.8</version>
		</dependency>

		<dependency>
			<groupId>net.sf.json-lib</groupId>
			<artifactId>json-lib</artifactId>
			<version>2.2.2</version>
			<classifier>jdk15</classifier>
		</dependency>

		<dependency>
			<groupId>com.google.guava</groupId>
			<artifactId>guava</artifactId>
			<version>16.0.1</version>
		</dependency>

		<dependency>
			<groupId>javax.mail</groupId>
			<artifactId>mail</artifactId>
			<version>1.4.7</version>
		</dependency>
spring-security-3.1
//Spring 配置

<?xml version="1.0" encoding="UTF-8"?>

<beans:beans xmlns="http://www.springframework.org/schema/security"
	xmlns:b="http://www.springframework.org/schema/beans" xmlns:beans="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
                        http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd">
                        
                        
                        
                        
	<http pattern="/manager/login.jsp*" security="none"/>
	<http pattern="/manager/loggedout.jsp" security="none"/>
	<!--<http pattern="/manager/addAdmin" security="none"/>-->
	
	<http access-denied-page="/manager/login.jsp?errorcode=true">
		<!-- 则表示只有拥有对应的角色才能访问. -->
		<intercept-url pattern="/manager/**" access="ROLE_ADMIN,ROLE_USER_ENABLE,ROLE_USER_RESETPWD,ROLE_ADMIN_UPDATE,ROLE_USER_DISABLE,ROLE_ADMIN_DELETE,ROLE_ADMIN_ADD,ROLE_GROUP_UPDATE,ROLE_GROUP_DELETE,ROLE_GROUP_BATCHDELETE,ROLE_GROUP_ADD,ROLE_SETTINGS,ROLE_ASSIGNROLE,ROLE_STATION_MANAGER_LOOK,ROLE_STATION_MANAGER_SELECT,ROLE_STATION_MANAGER_ADD,ROLE_STATION_MANAGER_UPDATE,ROLE_STATION_MANAGER_DELETE,ROLE_EQUIPMENT_MANAGER_LOOK,ROLE_EQUIPMENT_MANAGER_SELECT,ROLE_EQUIPMENT_MANAGER_ADD,ROLE_EQUIPMENT_MANAGER_UPDATE,ROLE_EQUIPMENT_MANAGER_DELETE,ROLE_STATUS_LOOK,ROLE_STATUS_BASEDATA_LOOK,ROLE_STATUS_BASEEM_LOOK,ROLE_STATUS_CTRL_COMMAND_LOOK,ROLE_STATUS_BASEDATA_SELECT,ROLE_STATUS_BASEDATA_REMOTE_ON,ROLE_STATUS_BASEDATA_REMOTE_OFF,ROLE_STATUS_BASEDATA_AC1_ON,ROLE_STATUS_BASEDATA_AC1_OFF,ROLE_STATUS_BASEDATA_JN_ON,ROLE_STATUS_BASEDATA_JN_OFF,ROLE_STATUS_BASEDATA_FAN1_ON,ROLE_STATUS_BASEDATA_FAN1_OFF,ROLE_STATUS_BASEDATA_COLLECT,ROLE_STATUS_BASEEM_SELECT,ROLE_STATUS_CTRL_COMMAND_SELECT,ROLE_STATUS_CTRL_COMMAND_DELETE,ROLE_JN_POLICY_LOOK,ROLE_JN_POLICY_STATION_SELECT,ROLE_JN_POLICY_STATION_ADD,ROLE_JN_POLICY_STATION_EXECUTE,ROLE_JN_POLICY_STATION_UPDATE,ROLE_JN_POLICY_MANAGER_UPDATE,ROLE_JN_POLICY_MANAGER_ADD,ROLE_JN_POLICY_MANAGER_SELECT,ROLE_JN_POLICY_ALLOCATION_LOOK,ROLE_JN_POLICY_STATION_LOOK,ROLE_JN_POLICY_MANAGER_LOOK,ROLE_JN_POLICY_ALLOCATION_SELECT,ROLE_WARN_MANAGER_LOOK,ROLE_WARN_NEW_LOOK,ROLE_WARN_HISTORY_LOOK,ROLE_WARN_NEW_SELECT,ROLE_WARN_NEW_DETAIL,ROLE_WARN_HISTORY_SELECT,ROLE_WARN_HISTORY_DETAIL,ROLE_WARN_NOTIFY_LOOK,ROLE_WARN_NOTIFY_SELECT,ROLE_WARN_NOTIFY_SET,ROLE_WARN_NOTIFY_BATCH_DELETE,ROLE_WARN_NOTIFY_UPDATE,ROLE_WARN_NOTIFY_RECEIVER_LOOK,ROLE_WARN_NOTIFY_RECEIVER_SELECT,ROLE_WARN_NOTIFY_RECEIVER_ADD,ROLE_WARN_NOTIFY_RECEIVER_UPDATE,ROLE_WARN_NOTIFY_RECEIVER_DELETE,ROLE_COUNT_LOOK,ROLE_COUNT_SUM,ROLE_COUNT_ACCOUNTING,ROLE_COUNT_TREND,ROLE_COUNT_YOY,ROLE_COUNT_TOP,ROLE_COUNT_EFFECT,ROLE_WARN_COUNT_LOOK,ROLE_WARN_BATCH_DELETE"/>
		<!-- 表示通过 /manager/login.jsp  这个映射进行登录 -->
		<!-- 如果验证失败则返回一个URL:/manager/login.jsp?error=true  -->
		<!-- 如果登录成功则默认指向:/manager/welcome.jsp -->
		<form-login login-page="/manager/login.jsp" login-processing-url="/j_spring_security_check" default-target-url="/manager/welcome.jsp"
			authentication-failure-url="/manager/login.jsp?error=true"/>
			
		 <!-- 自定义过滤器,FORM_LOGIN_FILTER 别名 对应类 UsernamePasswordAuthenticationFilter;
		  该过滤器会覆盖掉 http/form-login 中的 authentication-failure-url 和 default-target-url 这两个属性 -->  
		<custom-filter before="FORM_LOGIN_FILTER" ref="authenticationProcessingFilter"/>
		<!-- 开启session 失效功能  -->
		<!-- 注销URL为:/logout  -->
		<!-- 注销成功后转向:/manager/loggedout.jsp -->
		<logout logout-success-url="/manager/loggedout.jsp" logout-url="/logout" delete-cookies="JSESSIONID"/>
		 <!-- 会话管理,设置最多登录异常,error-if-maximum-exceeded = false为第二次登录就会使前一个登录失效 -->  
		<session-management invalid-session-url="/manager/welcome.jsp">
			<concurrency-control  max-sessions="1" error-if-maximum-exceeded="false" />
		</session-management>
	</http>
	
	
	<global-method-security secured-annotations="enabled"></global-method-security>
	<!-- 认证管理的几种方式 -->
	<!-- 配置认证管理器 --> 
	<authentication-manager alias="authenticationManager">
		<authentication-provider>
		 <!-- 密码加密方式. 常用的有md5 和 sha -->
			<password-encoder hash="md5">
				<salt-source user-property="username"/>
			</password-encoder>
			<!-- 注入dataSource验证数据库中的用户名.密码 和 权限相关 -->
			<jdbc-user-service data-source-ref="dataSource"
				group-authorities-by-username-query="SELECT 
												 g.id,g.groupname,
												 role.role
												 FROM t_group AS g 
												 LEFT OUTER JOIN t_group_role AS grouprole ON (g.id = grouprole.groupid)
												 LEFT OUTER JOIN t_role AS role ON (role.id = grouprole.roleid)
												 LEFT OUTER JOIN t_group_user AS groupuser on (g.id = groupuser.groupid)
												 LEFT OUTER JOIN t_admin ON (t_admin.id = groupuser.userid)
												 WHERE t_admin.nickname = ?"
												 
												 
				users-by-username-query="SELECT t_admin.nickname AS username,t_admin.passwd as password,'true' AS enabled
										 FROM t_admin
										 WHERE t_admin.nickname = ?"
										 
										 
				authorities-by-username-query="SELECT t_admin.nickname AS username,role.role as authorities
											   FROM t_admin 
											   LEFT OUTER JOIN t_user_role AS userrole ON(t_admin.id = userrole.userid)
											   LEFT OUTER JOIN t_role AS role ON (userrole.roleid = role.id)
											   WHERE t_admin.nickname = ?" />
											   
											   <!--     使用固定的用户名和密码及权限来做验证.   
					                				<user-service>  
					                					<user name="admin" password="admin" authorities="ROLE_USER, ROLE_ADMIN" />  
					                					<user name="user" password="user" authorities="ROLE_USER" />  
					              				    </user-service>  
          									  -->  
		</authentication-provider>
	</authentication-manager>

	<!-- 自定义消息 -->
	<b:bean id="messageSource"
		class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<b:property name="basename"
			value="classpath:messages_zh_CN" />
	</b:bean>
	
	
	<beans:bean id="authenticationProcessingFilter" class="com.supinfo.jieneng.aop.LoginUsernamePasswordAuthenticationFilter">  
      <beans:property name="authenticationSuccessHandler" ref="loginSuccessHandler"/>  
      <beans:property name="authenticationFailureHandler" ref="authenticationFailureHandler"/>  
      <beans:property name="authenticationManager" ref="authenticationManager"/>  
	</beans:bean>
	
	<!-- 过滤 成功 -->
	<beans:bean id="loginSuccessHandler" class="com.supinfo.jieneng.aop.LoginSuccessHandler">
		<b:property name="defaultTargetUrl">
			<b:value>/manager/welcome.jsp</b:value>
		</b:property>
	</beans:bean>
	<!-- 过滤 失败 -->
	<beans:bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler">  
    	<beans:property name="defaultFailureUrl">  
        	<beans:value>/manager/login.jsp?error=true</beans:value>  
    	</beans:property>
  	</beans:bean>
	
</beans:beans>

//====================================LoginSuccessHandler================================

package com.supinfo.jieneng.aop;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler;

import com.supinfo.core.base.ServiceManager;
import com.supinfo.jieneng.domains.Admin;
import com.supinfo.jieneng.domains.Log;
/**
 * 处理管理员登录日志
 * @author 
 *
 */
public class LoginSuccessHandler extends SavedRequestAwareAuthenticationSuccessHandler{
	
	@Autowired
	private ServiceManager serviceManager;
	
	@Override
	public void onAuthenticationSuccess(HttpServletRequest request,
			HttpServletResponse response, Authentication authentication) throws IOException,
			ServletException {
		
		UserDetails userDetails = (UserDetails)authentication.getPrincipal();
		//for(GrantedAuthority obj : userDetails.getAuthorities()){
			//if(obj.getAuthority().equals("ROLE_ADMIN")){
				//System.out.println("管理员 " + userDetails.getUsername() + " 登录");
				Log log = new Log();
				//log.setCreatedate(new Date());
				log.setUserid(loginUserId(userDetails.getUsername()));
				log.setContent("管理员:" + userDetails.getUsername());
				log.setOperation("登录");
				serviceManager.getLogService().log(log);
			//}
		//}
		super.onAuthenticationSuccess(request, response, authentication);
	}
	
	/**
	 * 获取登录用户ID
	 * 
	 * @return
	 */
	private Long loginUserId(String userName) {

		// 根据用户名获取用户ID
		Admin admin = serviceManager.getAdminService().findAdminByNickname(userName);
		return admin.getId();
	}

}

//==================================UsernamePasswordAuthenticationFilter==================================
package com.supinfo.jieneng.aop;

import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;

public class LoginUsernamePasswordAuthenticationFilter extends
		UsernamePasswordAuthenticationFilter {
//	@Override
//	public Authentication attemptAuthentication(HttpServletRequest request,
//			HttpServletResponse response) throws AuthenticationException {
//		try {
//			User user = new User();
//			user.setNickname(request.getParameter("j_username"));
//			user.setPasswd(request.getParameter("j_password"));
//			if (user != null && DataUtil.isNullAndEmpty(user.getNickname())) {
//				/*
//				 * request.getSession().setAttribute("houtaiUser", user);
//				// 后台城市切换
//				String path = getClass().getClassLoader()
//						.getResource("signCity.xml").getPath();
//				Map<String, Object> citys = null;
//				if (DataUtil.isNullAndEmpty(path)) {
//					//citys = UrlUtil.readyCity(path);
//				}
//				request.getSession().setAttribute("houtaiCitys", citys);
//				*/
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//		return super.attemptAuthentication(request, response);
//		
//	}
}




//web.xml
 <!-- Spring Security 过滤器配置 -->
  <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/manager/*</url-pattern>
    <url-pattern>/j_spring_security_check</url-pattern>
    <url-pattern>/logout</url-pattern>
  </filter-mapping>
hadoop,oracle官网下载地址 hadoop
http://mirrors.hust.edu.cn/apache/hadoop/common/

// linux  下载
wget http://mirrors.cnnic.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz
//oracle
http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html
Linux 安装mysql,jdk,nginx一些 环境变量设置 linux
卸载rpm版的jdk:
rpm -qa|grep jdk
显示:jdk-1.6.0_31-fcs
卸载:#rpm -e  --nodeps  jdk-1.6.0_31-fcs

//JDK 
//在/etc/profile文件最后添加

//usr/java/jdk1.7.0_51   jdk安装目录
export JAVA_HOME=/usr/java/jdk1.7.0_51
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

//NGINX
也是在/etc/profile文件最后添加
///usr/local/nginx NGINX安装目录
export NGIINX_HOME=/usr/local/nginx
//中间用:隔开
export PATH=$PATH:$JAVA_HOME/bin:$NGIINX_HOME/sbin


//MYSQL
//在/root/.bash_profile文件最后添加
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin:/usr/local/mysql/lib
export PATH

RunJS一些不错的东东... java
//1,Bootstrap树样式 
http://runjs.cn/detail/jspmxwka


//2,悬浮支持小图标菜单 
http://runjs.cn/detail/5igdlhhz


//3,image hover
http://runjs.cn/detail/0fk8dwbt

//4,仿天猫轮播 
http://runjs.cn/detail/tvqxftuj

//5,Bootstrap做的登录界面。 
http://runjs.cn/detail/f42nfs3g

//6,可拖动布局
http://runjs.cn/detail/dje5kzar

//7,多轴highcharts了。放在runjs感觉还不错 
http://runjs.cn/detail/pld0o7um

//8,jQuery KeyBoard 键盘
http://runjs.cn/detail/ncxf7e1u

//9,多皮肤悬浮QQ在线客服jQuery插件
http://runjs.cn/detail/kgawqf8s

//10,消息发送动画 
http://runjs.cn/detail/sqekys02

//11,2012大记事
http://runjs.cn/detail/2gkexwbq

//12,打飞机 1.0 Javascript版
http://runjs.cn/detail/6cpmot1v

//13,仿优酷视频图片轮转效果
http://runjs.cn/detail/3avdokbi

//14,3D动态玫瑰 
http://runjs.cn/detail/u1wj1jux

//15,FlexJS 丑陋的原生代码开发时钟效果
http://runjs.cn/detail/ofttquye

//16,TAGS 球形旋转
http://runjs.cn/detail/fkkvhvun


通过JDK动态代理和CGLIB动态代理实现springAOP功能 java
package cn.net.sung.test.java.moniAOP;

public interface PersonService {
	
	void save(String name);
	void update(String name,Integer personId);
	String getPersonName(Integer personId);
}

//======================================================
package cn.net.sung.test.java.moniAOP;

public class PersonServiceBean implements PersonService{

	private String user = null;
	
	public PersonServiceBean() {
		super();
	}
	
	public PersonServiceBean(String user) {
		super();
		this.user = user;
	}

	@Override
	public void save(String name) {
		 System.out.println("我是save()方法");
	}

	@Override
	public void update(String name, Integer personId) {
		System.out.println("我是update()方法");
	}

	@Override
	public String getPersonName(Integer personId) {
		System.out.println("我是getPersonName()方法");
        return "get";
	}

	public String getUser() {
		return user;
	}

	public void setUser(String user) {
		this.user = user;
	}
}

//======================================================
package cn.net.sung.test.java.moniAOP;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class JDKProxyFactory implements InvocationHandler {

	// 要代理的原始对象
	private Object targer;

	public Object createProxyInstance(Object targer) {
		this.targer = targer;
		return Proxy.newProxyInstance(this.targer.getClass().getClassLoader(),
				this.targer.getClass().getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;
		PersonServiceBean bean = (PersonServiceBean) this.targer;

		if (bean.getUser() != null) {
			// 前置通知
			doBefore();
			try {
				result = method.invoke(targer, args);
				// 后置通知
				doAfter();
			} catch (Exception e) {
				// 例外通知
				doException();
			} finally {
				// 最终通知
				doFinally();
			}
		}
		return result;
	}

	private void doBefore() {
		System.out.println("我是前置通知");
	}

	private void doAfter() {
		System.out.println("我是后置通知");
	}

	private void doException() {
		System.out.println("我是例外通知");
	}

	private void doFinally() {
		System.out.println("我是最终通知");
	}

}

//======================================================
package cn.net.sung.test.java.moniAOP;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

public class CGlibProxyFactory implements MethodInterceptor {

	private Object target;

	public Object createProxyInstance(Object target) {
		this.target = target;
		Enhancer enhancer = new Enhancer();
		enhancer.setSuperclass(this.target.getClass());// 非final
		enhancer.setCallback(this);
		return enhancer.create();
	}

	@Override
	public Object intercept(Object proxy, Method methodProxy, Object[] args,
			MethodProxy arg3) throws Throwable {

		Object result = null;
		PersonServiceBean bean = (PersonServiceBean) this.target;
		if (bean.getUser() != null) {
			// 前置通知
			doBefore();
			try {
				result = methodProxy.invoke(target, args);
				// 后置通知
				doAfter();
			} catch (Exception e) {
				// 例外通知
				doException();
			} finally {
				// 最终通知
				doFinally();
			}
		}
		return result;
	}

	private void doBefore() {
		System.out.println("我是前置通知");
	}

	private void doAfter() {
		System.out.println("我是后置通知");
	}

	private void doException() {
		System.out.println("我是例外通知");
	}

	private void doFinally() {
		System.out.println("我是最终通知");
	}

}

//======================================================
package cn.net.sung.test.java.moniAOP;

public class AopTest {
	public static void main(String[] args) {
		//porxyTest1();
		porxyTest2();
	}
	
	private static void porxyTest1(){
		JDKProxyFactory jdkProxyFactory = new JDKProxyFactory();
		PersonService personService = (PersonService)jdkProxyFactory.createProxyInstance(new PersonServiceBean("孙刚"));
		personService.getPersonName(1);
	}
	
	private static void porxyTest2(){
		CGlibProxyFactory cGlibProxyFactory = new CGlibProxyFactory();
		PersonServiceBean personServiceBean = (PersonServiceBean)cGlibProxyFactory.createProxyInstance(new PersonServiceBean("孙刚2"));
		personServiceBean.getPersonName(2);
			
	}
}

//======================================================


JAVA调用增删改的存储过程 java
http://www.cnblogs.com/linjiqin/archive/2011/04/17/2019074.html
文件操作工具类 java
package com.ptn.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;


/**
* 文件工具类
*
* @author jiqinlin
*
*/
public class FileTool {
private static final Logger log = Logger.getLogger(FileTool.class);

/**
* 创建目录
*
* @param dir 目录
*/
public static void mkdir(String dir) {
try {
String dirTemp = dir;
File dirPath = new File(dirTemp);
if (!dirPath.exists()) {
dirPath.mkdir();
}
} catch (Exception e) {
log.error("创建目录操作出错: "+e.getMessage());
e.printStackTrace();
}
}


/**
* 新建文件
*
* @param fileName
* String 包含路径的文件名 如:E:\phsftp\src\123.txt
* @param content
* String 文件内容
*
*/
public static void createNewFile(String fileName, String content) {
try {
String fileNameTemp = fileName;
File filePath = new File(fileNameTemp);
if (!filePath.exists()) {
filePath.createNewFile();
}
FileWriter fw = new FileWriter(filePath);
PrintWriter pw = new PrintWriter(fw);
String strContent = content;
pw.println(strContent);
pw.flush();
pw.close();
fw.close();
} catch (Exception e) {
log.error("新建文件操作出错: "+e.getMessage());
e.printStackTrace();
}

}

/**
* 删除文件
*
* @param fileName 包含路径的文件名
*/
public static void delFile(String fileName) {
try {
String filePath = fileName;
java.io.File delFile = new java.io.File(filePath);
delFile.delete();
} catch (Exception e) {
log.error("删除文件操作出错: "+e.getMessage());
e.printStackTrace();
}
}


/**
* 删除文件夹
*
* @param folderPath 文件夹路径
*/
public static void delFolder(String folderPath) {
try {
// 删除文件夹里面所有内容
delAllFile(folderPath);
String filePath = folderPath;
java.io.File myFilePath = new java.io.File(filePath);
// 删除空文件夹
myFilePath.delete();
} catch (Exception e) {
log.error("删除文件夹操作出错"+e.getMessage());
e.printStackTrace();
}
}


/**
* 删除文件夹里面的所有文件
*
* @param path 文件夹路径
*/
public static void delAllFile(String path) {
File file = new File(path);
if (!file.exists()) {
return;
}
if (!file.isDirectory()) {
return;
}
String[] childFiles = file.list();
File temp = null;
for (int i = 0; i < childFiles.length; i++) {
//File.separator与系统有关的默认名称分隔符
//在UNIX系统上,此字段的值为'/';在Microsoft Windows系统上,它为 '\'。
if (path.endsWith(File.separator)) {
temp = new File(path + childFiles[i]);
} else {
temp = new File(path + File.separator + childFiles[i]);
}
if (temp.isFile()) {
temp.delete();
}
if (temp.isDirectory()) {
delAllFile(path + "/" + childFiles[i]);// 先删除文件夹里面的文件
delFolder(path + "/" + childFiles[i]);// 再删除空文件夹
}
}
}


/**
* 复制单个文件
*
* @param srcFile
* 包含路径的源文件 如:E:/phsftp/src/abc.txt
* @param dirDest
* 目标文件目录;若文件目录不存在则自动创建 如:E:/phsftp/dest
* @throws IOException
*/
public static void copyFile(String srcFile, String dirDest) {
try {
FileInputStream in = new FileInputStream(srcFile);
mkdir(dirDest);
FileOutputStream out = new FileOutputStream(dirDest+"/"+new File(srcFile).getName());
int len;
byte buffer[] = new byte[1024];
while ((len = in.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.flush();
out.close();
in.close();
} catch (Exception e) {
log.error("复制文件操作出错:"+e.getMessage());
e.printStackTrace();
}
}

/**
* 复制文件夹
*
* @param oldPath
* String 源文件夹路径 如:E:/phsftp/src
* @param newPath
* String 目标文件夹路径 如:E:/phsftp/dest
* @return boolean
*/
public static void copyFolder(String oldPath, String newPath) {
try {
// 如果文件夹不存在 则新建文件夹
mkdir(newPath);
File file = new File(oldPath);
String[] files = file.list();
File temp = null;
for (int i = 0; i < files.length; i++) {
if (oldPath.endsWith(File.separator)) {
temp = new File(oldPath + files[i]);
} else {
temp = new File(oldPath + File.separator + files[i]);
}

if (temp.isFile()) {
FileInputStream input = new FileInputStream(temp);
FileOutputStream output = new FileOutputStream(newPath
+ "/" + (temp.getName()).toString());
byte[] buffer = new byte[1024 * 2];
int len;
while ((len = input.read(buffer)) != -1) {
output.write(buffer, 0, len);
}
output.flush();
output.close();
input.close();
}
if (temp.isDirectory()) {// 如果是子文件夹
copyFolder(oldPath + "/" + files[i], newPath + "/" + files[i]);
}
}
} catch (Exception e) {
log.error("复制文件夹操作出错:"+e.getMessage());
e.printStackTrace();
}
}

/**
* 移动文件到指定目录
*
* @param oldPath 包含路径的文件名 如:E:/phsftp/src/ljq.txt
* @param newPath 目标文件目录 如:E:/phsftp/dest
*/
public static void moveFile(String oldPath, String newPath) {
copyFile(oldPath, newPath);
delFile(oldPath);
}

/**
* 移动文件到指定目录,不会删除文件夹
*
* @param oldPath 源文件目录 如:E:/phsftp/src
* @param newPath 目标文件目录 如:E:/phsftp/dest
*/
public static void moveFiles(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delAllFile(oldPath);
}

/**
* 移动文件到指定目录,会删除文件夹
*
* @param oldPath 源文件目录 如:E:/phsftp/src
* @param newPath 目标文件目录 如:E:/phsftp/dest
*/
public static void moveFolder(String oldPath, String newPath) {
copyFolder(oldPath, newPath);
delFolder(oldPath);
}

/**
* 解压zip文件
*
* @param srcDir
* 解压前存放的目录
* @param destDir
* 解压后存放的目录
* @throws Exception
*/
public static void jieYaZip(String srcDir, String destDir) throws Exception {
int leng = 0;
byte[] b = new byte[1024*2];
/** 获取zip格式的文件 **/
File[] zipFiles = new FileFilterByExtension("zip").getFiles(srcDir);
if(zipFiles!=null && !"".equals(zipFiles)){
for (int i = 0; i < zipFiles.length; i++) {
File file = zipFiles[i];
/** 解压的输入流 * */
ZipInputStream zis = new ZipInputStream(new FileInputStream(file));
ZipEntry entry=null;
while ((entry=zis.getNextEntry())!=null) {
File destFile =null;
if(destDir.endsWith(File.separator)){
destFile = new File(destDir + entry.getName());
}else {
destFile = new File(destDir + "/" + entry.getName());
}
/** 把解压包中的文件拷贝到目标目录 * */
FileOutputStream fos = new FileOutputStream(destFile);
while ((leng = zis.read(b)) != -1) {
fos.write(b, 0, leng);
}
fos.close();
}
zis.close();
}
}
}

/**
* 压缩文件
*
* @param srcDir
* 压缩前存放的目录
* @param destDir
* 压缩后存放的目录
* @throws Exception
*/
public static void yaSuoZip(String srcDir, String destDir) throws Exception {
String tempFileName=null;
byte[] buf = new byte[1024*2];
int len;
//获取要压缩的文件
File[] files = new File(srcDir).listFiles();
if(files!=null){
for (File file : files) {
if(file.isFile()){
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
if (destDir.endsWith(File.separator)) {
tempFileName = destDir + file.getName() + ".zip";
} else {
tempFileName = destDir + "/" + file.getName() + ".zip";
}
FileOutputStream fos = new FileOutputStream(tempFileName);
BufferedOutputStream bos = new BufferedOutputStream(fos);
ZipOutputStream zos = new ZipOutputStream(bos);// 压缩包

ZipEntry ze = new ZipEntry(file.getName());// 压缩包文件名
zos.putNextEntry(ze);// 写入新的ZIP文件条目并将流定位到条目数据的开始处

while ((len = bis.read(buf)) != -1) {
zos.write(buf, 0, len);
zos.flush();
}
bis.close();
zos.close();

}
}
}
}


/**
* 读取数据
*
* @param inSream
* @param charsetName
* @return
* @throws Exception
*/
public static String readData(InputStream inSream, String charsetName) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = -1;
while( (len = inSream.read(buffer)) != -1 ){
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();
outStream.close();
inSream.close();
return new String(data, charsetName);
}

/**
* 一行一行读取文件,适合字符读取,若读取中文字符时会出现乱码
*
* @param path
* @return
* @throws Exception
*/
public static Set<String> readFile(String path) throws Exception{
Set<String> datas=new HashSet<String>();
FileReader fr=new FileReader(path);
BufferedReader br=new BufferedReader(fr);
String line=null;
while ((line=br.readLine())!=null) {
datas.add(line);
}
br.close();
fr.close();
return datas;
}
}

//=======================测试========================

package juint.test;

import java.io.File;
import java.io.InputStream;
import java.util.Set;

import org.apache.log4j.Logger;
import org.junit.Test;

import com.ptn.utils.FileFilterByExtension;
import com.ptn.utils.FileTool;
import com.ptn.utils.UrlTool;

public class FileToolTest {
private static final Logger log = Logger.getLogger(FileToolTest.class);

/**
* 创建目录
*/
@Test
public void mkdir(){
FileTool.mkdir("e:/ljq");
}

/**
* 新建文件
*/
@Test
public void createNewFile(){
try {
InputStream inStream=FileToolTest.class.getClassLoader().getResourceAsStream("903_13_5990_1001220007.xml");
String data=FileTool.readData(inStream, "UTF-8");
FileTool.createNewFile("e:/ljq.xml", data);
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 删除文件
*
*/
@Test
public void delFile() {
FileTool.delFile(UrlTool.readUrl("dirSrc")+"/123.txt");
}

/**
* 删除文件夹
*
*/
@Test
public void delFolder() {
FileTool.delFolder(UrlTool.readUrl("dirDest"));
}

/**
* 删除文件夹里面的所有文件
*
*/
@Test
public void delAllFile() {
FileTool.delAllFile(UrlTool.readUrl("dirDest"));
}

/**
* 复制文件
*/
@Test
public void copyFile() {
// 获取文件源目录
String dirSrc = UrlTool.readUrl("dirSrc");
// 获取文件目标目录
String dirDest = UrlTool.readUrl("dirDest");
if (dirSrc == null || "".equals(dirSrc)) {
log.error("dirSrc目录不存在");
return;
}
File[] files = new FileFilterByExtension("").getFiles(dirSrc);
if(files!=null){
for(File file:files){
FileTool.copyFile(file.getAbsolutePath(), dirDest);
}
}
}


@Test
public void copyFolder(){
// 获取文件源目录
String dirSrc = UrlTool.readUrl("dirSrc");
// 获取文件目标目录
String dirDest = UrlTool.readUrl("dirDest");
FileTool.copyFolder(dirSrc, dirDest);
}

/**
* 移动文件到指定目录
*/
@Test
public void moveFile(){
FileTool.moveFile(UrlTool.readUrl("dirSrc")+"/abc.txt",
UrlTool.readUrl("dirDest"));
}

/**
* 移动文件到指定目录
*/
@Test
public void moveFolder(){
FileTool.moveFolder(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
}

/**
* 移动文件到指定目录
*/
@Test
public void moveFiles(){
FileTool.moveFiles(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
}

/**
* 解压
*/
@Test
public void jieYaZip(){
try {
FileTool.jieYaZip(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
} catch (Exception e) {
e.printStackTrace();
}
}

/**
* 压缩
*/
@Test
public void yaSuoZip(){
try {
FileTool.yaSuoZip(UrlTool.readUrl("dirSrc"), UrlTool.readUrl("dirDest"));
} catch (Exception e) {
e.printStackTrace();
}
}


@Test
public void readFile() throws Exception{
Set<String> datas=FileTool.readFile("E:\\phsftp\\sql\\ycxk_srm_901_13_R_1103040036_20110419142544.txt");
for(String data:datas){
System.out.println(data);
}
}
}文件操作工具类
RandomStringUtils工具类测试 java
package cn.net.sung.test.java.gongjulei;

import org.apache.commons.lang.RandomStringUtils;

public class RandomStringUtilsTest {
	
	public static void main(String[] args) {
		//产生5位长度的随机字符串,中文环境下是乱码
		String r1 = RandomStringUtils.random(5);
		System.out.println(r1);
		
		//使用指定的字符生成5位长度的随机字符串
		String r2 = RandomStringUtils.random(5, new char[]{'a','b','c','d','e','f', '1', '2', '3'});
		System.out.println(r2);//313af
		

		//生成指定长度的字母和数字的随机组合字符串
		String r3 = RandomStringUtils.randomAlphanumeric(16);
		System.out.println(r3);//XAdAHrDZIYT5Pex6
		
		//生成随机数字字符串
		String r4 = RandomStringUtils.randomNumeric(5);
		System.out.println(r4);//65445
		
		//生成随机[a-z]字符串,包含大小写
		String r5 = RandomStringUtils.randomAlphabetic(5);
		System.out.println(r5);//zOMqg
		
		//生成从ASCII 32到126组成的随机字符串 
		String r6 = RandomStringUtils.randomAscii(4);
		System.out.println(r6);//r['_
	}
}
JAXB操作XML xml, webservice
package cn.cd.sung.xml;

import java.io.StringReader;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

import org.junit.Test;

public class TestJaxb {
	
	@Test
	public void test1() throws JAXBException{
		JAXBContext ctx = JAXBContext.newInstance(Student.class);
		Marshaller marshaller = ctx.createMarshaller();
		Student student = new Student(1, new ClassRoom(1,"10级计算应用技术","2010"), "孙刚", 22);
		marshaller.marshal(student, System.out);
	}
	

       

	@Test
	public void test2() throws JAXBException{
		String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><student><age>22</age><classRoom><grade>2010</grade><id>1</id><name>10级计算应用技术</name></classRoom><id>1</id><name>孙刚</name></student>";
		JAXBContext ctx = JAXBContext.newInstance(Student.class);
		Unmarshaller unmarshaller = ctx.createUnmarshaller();
		Student student = (Student) unmarshaller.unmarshal(new StringReader(xml));
		System.out.println(student.getName() + ", " + student.getClassRoom().getName());
	}
	
}
XML DTD和Schema文件定义 webservice
//===============================DTD:定义=============================

<?xml version="1.0" encoding="UTF-8"?>

<!ELEMENT classroom (name,grade,students+)>
//#REQUIRED必须出现
<!ATTLIST classroom id ID #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT students (student)>
<!ELEMENT student (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>


//============================xml引入DTD文件=================
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">

<classroom id="c1">
	<name>软件技术001</name>
	<grade>201</grade>
	<students>
		<student>
			<id>s1</id>
			<name>孙刚</name>
			<age>20</age>
		</student>
	</students>
	<students>
		<student>
			<id>s2</id>
			<name>孙刚</name>
			<age>20</age>
		</student>
	</students>
</classroom>

//==========================Schema文件定义==================

//下面定义了一些  基本的Schema的 元素 属性等.
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/02"
	xmlns:tns="http://www.example.org/02" elementFormDefault="qualified">

	<element name="books">
		<!-- 复杂类型 -->
		<complexType>
			<!--minOccurs最少出现数   maxOccurs最多出现数 -->
			<sequence minOccurs="1" maxOccurs="unbounded">
				<element name="book">
					<complexType>
						<!-- sequence 代表有顺序的  all可以不用顺序出现 -->
						<sequence minOccurs="1">
                                                        <!--type 普通类型-->
							<element name="bookname" type="string" />
							<element name="content" type="string" />
							<element name="author" type="string" />
							<choice>
								<element name="authors" block="#all">
									<complexType>
										<sequence maxOccurs="3">
											<element name="author" type="string" />
										</sequence>
									</complexType>
								</element>
							</choice>
						</sequence>
						<!-- 定义属性  use 是否必须 optional 有没有都可以  "required" 必须有  属性定义必须在 sequence之后-->
						<attribute name="id" type="int" use="required"/>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

//=======================XML引入Schema文件==================
<?xml version="1.0" encoding="UTF-8"?>

<book:books xmlns:book ="http://www.example.org/02"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:noNamespaceSchemaLocation="02.xsd">
	
	<book:book id="1">
		<book:bookname>JAVA编程思想</book:bookname>
		<book:content>JAVA</book:content>
		<book:author>1</book:author>
		<book:authors>
			<book:author>2</book:author>
		</book:authors>
	</book:book>
	
	<book:book id="2">
			 <book:bookname>SOAP</book:bookname>
			 <book:content>SOAP CONTENT</book:content>
			 <book:author>1</book:author>
			 <book:authors>
			 	<book:author>2</book:author>
			 </book:authors>
	</book:book>
</book:books>


//======================Schema文件定义 2==================
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema 
	xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.example.org/03" 
	xmlns:tns="http://www.example.org/03" 
	elementFormDefault="qualified">
	
	<!-- tns 引入本文件的 Schema 元素 -->
	<!-- 元素最大化 使用  优点:结构清晰  缺点:根源不清晰 books,id,title都可以使用根节点-->
	<xsd:element name="books" type="tns:bookType"/>
	<xsd:element name="id" type="int"/>
	<xsd:element name="title" type="string"/>
	<xsd:element name="contents" type="string"/>
	
	<xsd:complexType name="bookType">
		<xsd:sequence minOccurs="1" maxOccurs="unbounded">
			<xsd:element ref="tns:id"/>
			<xsd:element ref="tns:title"/>
			<xsd:element ref="tns:contents"/>
		</xsd:sequence>
	</xsd:complexType>
	
</xsd:schema>


//======================Schema文件定义 3==================
<?xml version="1.0" encoding="UTF-8"?>
<schema 
	xmlns="http://www.w3.org/2001/XMLSchema" 
	targetNamespace="http://www.example.org/04" 
	xmlns:tns="http://www.example.org/04" 
	elementFormDefault="qualified">
	
	<!--一个 根节点   通过  simpleType 完成重用-->
	<element name="person" type="tns:personType"/>
	
	<complexType name="personType">
		<sequence minOccurs="1" maxOccurs="unbounded">
			<element name="name" type="string"/>
			<element name="age" type="tns:ageType"/>
			<element name="email" type="tns:emailType"/>
		</sequence>
		<attribute name="sex" type="tns:sexType"/>
	</complexType>
	
	<simpleType name="ageType">
		<restriction base="int">
			<!-- 最小包含 1 -->
			<minInclusive value="1"/>
			<maxInclusive value="150"/>
		</restriction>
	</simpleType>
	
	<simpleType name="sexType">
		<restriction base="string">
			<enumeration value="男"/>
			<enumeration value="女"/>
		</restriction>
	</simpleType>
	
	<simpleType name="emailType">
		<restriction base="string">
			<!-- 正则验证 -->
			<pattern value="(\w+\.*)*\w+@\w+\.[A-Za-z]{2,6}"></pattern>
			<!-- 最小长度 -->
			<minLength value="6"/>
			<!-- 最大长度 -->
			<maxLength value="255"/>
		</restriction>
	</simpleType>
</schema>

测试一片文章各个字符出现了多少次 java
String s = "上面各位兄弟说的都对,我这里就总结一下,站在巨人的肩膀上啦,嘿嘿";
		Map<String, Integer> map = new HashMap<String, Integer>();
		for (int i = 0; i < s.length(); i++) {
			char c = s.charAt(i);
			String tempKey = String.valueOf(c);
			if (map.containsKey(tempKey)) {
				Integer tempValue =map.get(tempKey);
				map.put(tempKey, tempValue+1);
			}else {
				map.put(tempKey, 1);
			}
		}
		//第一种
		for (String key : map.keySet()) {
			System.out.println(key + " : " + map.get(key) );
		}
wsdl分析 webservice
This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
 Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<!--
 Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.6 in JDK 6. 
-->
<definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://test.webservice.sung.cd.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://test.webservice.sung.cd.cn/" name="MySeviceImplService">
<types>
<xsd:schema>
<xsd:import namespace="http://test.webservice.sung.cd.cn/" schemaLocation="http://localhost:1234/ns?xsd=1"/>
</xsd:schema>
</types>
<message name="minus">
<part name="parameters" element="tns:minus"/>
</message>
<message name="minusResponse">
<part name="parameters" element="tns:minusResponse"/>
</message>
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>
<portType name="IMyService">
<operation name="minus">
<input message="tns:minus"/>
<output message="tns:minusResponse"/>
</operation>
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse"/>
</operation>
</portType>
<binding name="MySeviceImplPortBinding" type="tns:IMyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="minus">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MySeviceImplService">
<port name="MySeviceImplPort" binding="tns:MySeviceImplPortBinding">
<soap:address location="http://localhost:1234/ns"/>
</port>
</service>
</definitions>


//=========================================节点分析说明==================================================

//types:用来定义访问的类型

<types>
<xsd:schema>
<xsd:import namespace="http://test.webservice.sung.cd.cn/" schemaLocation="http://localhost:1234/ns?xsd=1"/>
</xsd:schema>
</types>

//message:SOAP

<message name="minus">
<part name="parameters" element="tns:minus"/>
</message>
<message name="minusResponse">
<part name="parameters" element="tns:minusResponse"/>
</message>
<message name="add">
<part name="parameters" element="tns:add"/>
</message>
<message name="addResponse">
<part name="parameters" element="tns:addResponse"/>
</message>

//portType:指明服务器的接口,并通过operation 绑定相应的in和out的消息:其中in表示参数,out表示返回值

<portType name="IMyService">
<operation name="minus">
<input message="tns:minus"/>
<output message="tns:minusResponse"/>
</operation>
<operation name="add">
<input message="tns:add"/>
<output message="tns:addResponse"/>
</operation>
</portType>

//binding : 指定传递消息所使用的格式

<binding name="MySeviceImplPortBinding" type="tns:IMyService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="minus">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="add">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>

//service : 指定服务器所发布的名称

<service name="MySeviceImplService">
<port name="MySeviceImplPort" binding="tns:MySeviceImplPortBinding">
<soap:address location="http://localhost:1234/ns"/>
</port>
</service>
JDK 原生webservice实例讲解 webservice
package cn.cd.sung.webservice.test;

import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;


@WebService
public interface IMyService {
	
	@WebResult(name="addResult")
	public int add(@WebParam(name="a")int a,@WebParam(name="b")int b);
	
	@WebResult(name="minusResult")
	public int minus(@WebParam(name="a")int a,@WebParam(name="b")int b);
	
}


//=========================================================================
package cn.cd.sung.webservice.test;

import javax.jws.WebService;


@WebService(endpointInterface="cn.cd.sung.webservice.test.IMyService")
public class MySeviceImpl implements IMyService{

	@Override
	public int add(int a, int b) {
		System.out.println(a + " + " + b + "=" + (a+b));
		return a + b;
	}

	@Override
	public int minus(int a, int b) {
		System.out.println(a + " - " + b + "=" + (a-b));
		return a - b;
	}

}

//=============================发布服务端============================================

package cn.cd.sung.webservice.test;

import javax.xml.ws.Endpoint;

public class MyService {
	public static void main(String[] args) {
		String address = "http://localhost:1234/ns";
		Endpoint.publish(address, new MySeviceImpl());
	}
}

//之后可以直接在浏览器 输入http://localhost:1234/ns

//可以输入http://localhost:1234/ns?wsdl 查看wsdl文件

//=============================main 方法测试============================================

package cn.cd.sung.webservice.test;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class TestClient {
	public static void main(String[] args) throws MalformedURLException {
		URL url = new URL("http://localhost:1234/ns?wsdl");
		QName qName = new QName("http://test.webservice.sung.cd.cn/", "MySeviceImplService");
		Service service = Service.create(url, qName);
		
		IMyService myService = service.getPort(IMyService.class);
		System.out.println(myService.add(2, 3));
	}
}




//=============================通过命令导出============================================
wsimport -d d:/webservice/01/ -keep -verbose http://localhost:1234/ns?wsdl

//-d d:/webservice/01/ : 制定生成目录
//-keep : 指定是否生成.java源代码
//-verbose : 指定生成详细过程
//http://localhost:1234/ns?wsdl : 网络中的wsdl文件




//生成:
Add.java
AddResponse.java
IMyService.java
Minus.java
MinusResponse.java
MySeviceImplService.java
ObjectFactory.java
package-info.java

//直接将此代码  拷贝走实用
//=============================Main 函数测试============================================

package cn.cd.sung.webservice.test;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

public class TestClient {
	public static void main(String[] args) throws MalformedURLException {
		//URL url = new URL("http://localhost:1234/ns?wsdl");
		//QName qName = new QName("http://test.webservice.sung.cd.cn/", "MySeviceImplService");
		//Service service = Service.create(url, qName);
		
		//IMyService myService = service.getPort(IMyService.class);
		//System.out.println(myService.add(2, 3));
		
		
		MySeviceImplService service = new MySeviceImplService();
		IMyService myService = service.getMySeviceImplPort();
		System.out.println(myService.add(1, 3));
	}
}

//一样效果调用服务端 webservice 
node.js
当正常 安装node.js后 

安装supervisor  命令是:cmd 进去 你安装的node.js目录

如:E:\Program Files\Software development\nodejs

进去node_modules\npm

执行:npm install supervisor  -g


安装后编写你的js文件 就会自动编译了  前提是你要用  supervisor  命令 启动该js文件

如在cmd执行 node命令  直接进去编译

>如 执行supervisor  test.js

下次你再修改test.js时  就会自动编译文件了  


安装 express 框架

我们要先配置npm的全局模块的存放路径以及cache的路径,例如我希望将以上两个文件夹放在NodeJS的主目录下,便在NodeJs下建立"node_global"及"node_cache"两个文件夹

npm config set prefix "C:\Program Files\nodejs\node_global"
以及
npm config set cache "C:\Program Files\nodejs\node_cache"

现在我们来装个模块试试,选择express这个比较常用的模块。同样在cmd命令行里面,输入“npm install express -g”(“-g”这个参数意思是装到global目录下,也就是上面说设置的“C:\Program Files\nodejs\node_global”里面。)

npm install -g express@3.5.0安装制定版本

最新express4.0版本中将命令工具分家出来了(项目地址:https://github.com/expressjs/generator),所以我们还需要安装一个命令工具,命令如下:
npm install -g express-generator


Jade —— 源于 Node.js 的 HTML 模板引擎
npm install -g jade

EJS全称是Embedded JavaScript.是著名的javascrip模版之一.
安装:npm install ejs -g

 
Nodejs基础中间件Connect
http://blog.fens.me/nodejs-connect/
安装:npm install connect -g

利用JDK 动态代理实现 拦截器功能 java
package cn.cd.sg.test.proxy;

public interface DynamicProxyFactory {
	/**
	* 描述  : 生成动态代理,并且在调用代理执行函数的时候使用拦截器
	* 方法名: createProxy
	* 创建人:孙刚   
	* 创建时间:2014-5-29 下午01:53:21
	* @param <T>
	* @param target 实现此接口的类  
	* @param interceptor 拦截器  
	* @return :T
	 */
	public <T> T createProxy(T target,Interceptor interceptor);
}

//===================================================================================================


package cn.cd.sg.test.proxy;


public class DynamicProxyFactoryImpl implements DynamicProxyFactory {

	/**
	 * 生成动态代理,并且在调用代理执行函数的时候使用拦截器 Title: createProxy
	 * 
	 * @param target
	 *            需要代理的实例
	 * @param interceptor
	 *            拦截器实现,就是我们希望代理类执行函数的前后, 抛出异常,finally的时候去做写什么
	 * @return
	 */
	@SuppressWarnings("unchecked")
	@Override
	public <T> T createProxy(T target, Interceptor interceptor) {
		// 当前对象的类加载器
		ClassLoader classLoader = target.getClass().getClassLoader();
		// 获取此对象实现的所有接
		Class<?>[] interfaces = target.getClass().getInterfaces();
		DynamicProxyInvocationHandler handler = new DynamicProxyInvocationHandler(
				target, interceptor);
		return (T) handler.getProxy();
	}

}


//==================================================================================================package cn.cd.sg.test.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/*
 * 动态代理的调用处理器 
 */
public class DynamicProxyInvocationHandler implements InvocationHandler {

	private Object target;
	private Interceptor interceptor;

	/*
	 * target: 需要代理的实例 interceptor:拦截器
	 */
	public DynamicProxyInvocationHandler(Object target, Interceptor interceptor) {
		this.target = target;
		this.interceptor = interceptor;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		Object result = null;

		try {
			// 在执行method之前调用interceptor去做什么事
			this.interceptor.before(method, args);
			// 在这里我们调用原始实例的method
			result = method.invoke(target, args);
			// 在执行method之后调用interceptor去做什么事
			this.interceptor.after(method, args);

		} catch (Exception e) {
			// 在发生异常之后调用interceptor去做什么事
			this.interceptor.afterThrowing(method, args, e);
		} finally {
			// 在finally之后调用interceptor去做什么事
			this.interceptor.afterFinally(method, args);
		}
		return result;
	}

	/**
	 * 获取目标对象的代理对象
	 * 
	 * @return 代理对象
	 */
	public Object getProxy() {
		return Proxy.newProxyInstance(Thread.currentThread()
				.getContextClassLoader(), target.getClass().getInterfaces(),
				this);
	}
}

//=============================================================================================
package cn.cd.sg.test.proxy;

import java.lang.reflect.Method;

public interface Interceptor {

	void before(Method method, Object[] args);

	void after(Method method, Object[] args);

	void afterThrowing(Method method, Object[] args, Throwable throwable);

	void afterFinally(Method method, Object[] args);
}



//=============================================================================================
package cn.cd.sg.test.proxy;

import java.lang.reflect.Method;

public class InterceptorImpl implements Interceptor{

	@Override
	public void after(Method method, Object[] args) {
		System.out.println("after invoking method: " + method.getName());   
	}

	@Override
	public void afterFinally(Method method, Object[] args) {
		System.out.println("afterFinally invoking method: " + method.getName());   
	}

	@Override
	public void afterThrowing(Method method, Object[] args, Throwable throwable) {
		System.out.println("afterThrowing invoking method: " + method.getName());   
	}

	@Override
	public void before(Method method, Object[] args) {
		System.out.println("before invoking method: " + method.getName()); 
	}

}


//=============================================================================================
package cn.cd.sg.test.proxy;

public interface Service {
	 public String greet(String name);   
}


//=============================================================================================

package cn.cd.sg.test.proxy;

public class ServiceImpl implements Service{

	@Override
	public String greet(String name) {
		String result = "Hello, " + name;   
		System.out.println(result);   
		return result;   
	}
}	

//=============================================================================================
package cn.cd.sg.test.proxy;

public class TestDynamicProxy {
	
	public TestDynamicProxy(){
		DynamicProxyFactory dynamicProxyFactory = new DynamicProxyFactoryImpl();
		Interceptor interceptor = new InterceptorImpl();
		Service service = new ServiceImpl();
		
		Service service2 = dynamicProxyFactory.createProxy(service, interceptor);
		
		service2.greet("孙刚");
	}
	
	public static void main(String[] args) {
		new TestDynamicProxy();
	}
}


Spring AOP (日志、事务、二级缓存)XML配置 spring
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache-3.1.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
	<!-- 分散配置 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
	<context:component-scan base-package="com.atguigu.surveypark.dao.impl,com.atguigu.surveypark.service.impl,com.atguigu.surveypark.listener,com.atguigu.surveypark.struts2.action" />
	
	<!-- 配置(主库)数据源 -->
	<bean id="dataSource-main" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverclass}" />
		<property name="jdbcUrl" value="${jdbc.url}" />
		<property name="user" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
		
		<property name="maxPoolSize" value="${c3p0.pool.size.max}" />
		<property name="minPoolSize" value="${c3p0.pool.size.min}" />
		<property name="initialPoolSize" value="${c3p0.pool.size.ini}" />
		<property name="acquireIncrement" value="${c3p0.pool.size.increment}" />
	</bean>
	
	<!-- 配置从库数据源 -->
	<bean id="dataSource-1" parent="dataSource-main">
		<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/lsn_surveypark001_1" />
	</bean>
	
	<!-- 数据源路由器 -->
	<bean id="dataSourceRouter" class="com.atguigu.surveypark.datasource.SurveyparkDataSourceRouter">
		<!-- 目标数据源集合 -->
		<property name="targetDataSources">
			<map>
				<entry key="odd" value-ref="dataSource-main" />
				<entry key="even" value-ref="dataSource-1" />
			</map>
		</property>
		<!-- 默认数据源集合 -->
		<property name="defaultTargetDataSource" ref="dataSource-main" />
	</bean>
	
	<!-- 本地回话工厂bean(spring整合hibernate的核心入口) -->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource" ref="dataSourceRouter" />
		<property name="configLocation" value="classpath:hibernate.cfg.xml" />
		<property name="mappingDirectoryLocations">
			<list>
				<value>classpath:com/atguigu/surveypark/model</value>
			</list>
		</property>
	</bean>
	
	<!-- hibnerate事务管理器,用来在service层面上实现事务管理,而且达到平台无关性 -->
	<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory" />
	</bean>
	
	<!-- 事务通知 -->
	<tx:advice id="txAdvice" transaction-manager="txManager">
		<tx:attributes>
			<!-- 写操作 -->
			<tx:method name="save*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="batch*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="new*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="clear*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="toggle*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="execute*" propagation="REQUIRED" isolation="DEFAULT"/>
			<tx:method name="move*" propagation="REQUIRED" isolation="DEFAULT"/>
			
			<!-- 读操作 -->
			<tx:method name="load*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
			<tx:method name="get*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
			<tx:method name="find*" propagation="REQUIRED" isolation="DEFAULT" read-only="true"/>
			
			<tx:method name="*" propagation="REQUIRED" isolation="DEFAULT"/>
		</tx:attributes>
	</tx:advice>
	
	<!-- 缓存管理器 -->
	<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheCacheManager">
		<property name="cacheManager" ref="cacheManagerFactoryBean" />
	</bean>

	<!-- 缓存管理器工厂bean -->
	<bean id="cacheManagerFactoryBean" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
		<property name="configLocation" value="classpath:ehcache.xml" />
	</bean>

	<!-- 自定义缓存key生成器 -->
	<bean id="surveyparkKeyGenerator" class="com.atguigu.surveypark.cache.SurveyparkKeyGenerator" />
	
	<!-- 缓存通知 -->
	<cache:advice id="cacheAdvice" cache-manager="cacheManager" key-generator="surveyparkKeyGenerator">
		<cache:caching cache="surveyparkCache">
			<cache:cacheable method="get*" />
			<cache:cacheable method="load*" />
			<cache:cacheable method="find*" />
			
			<cache:cache-evict method="save*" all-entries="true" />
			<cache:cache-evict method="update*" all-entries="true"/>
			<cache:cache-evict method="delete*" all-entries="true"/>
			<cache:cache-evict method="clear*" all-entries="true"/>
			<cache:cache-evict method="toggle*" all-entries="true"/>
			<cache:cache-evict method="move*" all-entries="true"/>
			<cache:cache-evict method="batch*" all-entries="true"/>
			<cache:cache-evict method="execute*" all-entries="true"/>
		</cache:caching>
	</cache:advice>
	
	<!-- 日志记录仪 -->	
	<bean id="logger" class="com.atguigu.surveypark.advice.Logger" />
	
	<!-- aop配置 -->	
	<aop:config>
		<!-- 事务切入点通知 -->
		<aop:advisor advice-ref="txAdvice" pointcut="execution(* *..*Service.*(..))" order="2"/>
		
		<!-- 缓存切入点通知 -->
		<aop:advisor advice-ref="cacheAdvice" pointcut="execution(* *..*Service.*(..))" order="0"/>
		
		<!-- Logger切面 -->
		<aop:aspect id="loggerAspect" ref="logger" order="1">
			<aop:around method="record" pointcut="(execution(* *..*Service.save*(..)) 
											or execution(* *..*Service.update*(..)) 
											or execution(* *..*Service.delete*(..)) 
											or execution(* *..*Service.batch*(..)) 
											or execution(* *..*Service.new*(..)) 
											or execution(* *..*Service.move*(..)) 
											or execution(* *..*Service.clear*(..)) 
											or execution(* *..*Service.toggle*(..)))
											and !bean(logService)
											 "/>
		</aop:aspect>
	</aop:config>
</beans>


hibernate.cfg.xml:


<?xml version="1.0"?>
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
	<session-factory>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
		<property name="hibernate.hbm2ddl.auto">update</property>
		<property name="hibernate.show_sql">true</property>
	</session-factory>
</hibernate-configuration>



jdbc.properties

jdbc.driverclass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/survey?useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=root

c3p0.pool.size.max=10
c3p0.pool.size.min=2
c3p0.pool.size.ini=3
c3p0.pool.size.increment=2




ehcache.xml:

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    <diskStore path="java.io.tmpdir"/>
    <defaultCache
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
    <cache name="surveyparkCache"
            maxElementsInMemory="10000"
            eternal="false"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            overflowToDisk="true"
            maxElementsOnDisk="10000000"
            diskPersistent="false"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU"
            />
</ehcache>



<!-- 自定义缓存key生成器 -->
com.atguigu.surveypark.cache.SurveyparkKeyGenerator

package com.atguigu.surveypark.cache;

import java.lang.reflect.Method;

import org.springframework.cache.interceptor.KeyGenerator;

import com.atguigu.surveypark.util.StringUtil;

/**
 * 自定义缓存key生成器
 */
public class SurveyparkKeyGenerator implements KeyGenerator{

	public Object generate(Object arg0, Method arg1, Object... arg2) {
		String className = arg0.getClass().getSimpleName();
		String mname = arg1.getName();
		String params = StringUtil.arr2Str(arg2);
		String key = className + "@" + arg0.hashCode() + "." + mname + "("+params+")" ;
		System.out.println(key);
		return key;
	}
}


Logger.java


package com.atguigu.surveypark.advice;

import java.util.Map;

import javax.annotation.Resource;

import org.aspectj.lang.ProceedingJoinPoint;

import com.atguigu.surveypark.model.Log;
import com.atguigu.surveypark.model.User;
import com.atguigu.surveypark.service.LogService;
import com.atguigu.surveypark.util.StringUtil;
import com.opensymphony.xwork2.ActionContext;

/**
 * Logger
 */
public class Logger {
	
	@Resource
	private LogService logService ;
	/**
	 * 记录
	 */
	public Object record(ProceedingJoinPoint pjp){
		Log log = new Log();
		try {
			ActionContext ac = ActionContext.getContext();
			//设置操作人
			if(ac != null){
				Map<String, Object> session = ac.getSession();
				if(session != null){
					User user = (User) session.get("user");
					if(user != null){
						log.setOperator("" + user.getId() + ":" + user.getEmail());
					}
				}
			}
			//操作名称
			String mname = pjp.getSignature().getName();
			log.setOperName(mname);
			//操作参数 
			Object[] params = pjp.getArgs();
			log.setOperParams(StringUtil.arr2Str(params));
			//调用目标对象的方法
			Object ret = pjp.proceed();
			//设置操作结果
			log.setOperResult("success");
			//设置结果消息
			if(ret != null){
				log.setResultMsg(ret.toString());
			}
			return ret ;
		} catch (Throwable e) {
			log.setOperResult("failure");
			log.setResultMsg(e.getMessage());
		}
		finally{
			logService.saveEntity(log);
		}
		return null ;
	}
}




linux 配置 java jar自动重启shell命令 linux
//这个是etc/init.d/的一个初始化启动脚本文件

#!/bin/sh
#chkconfig: 2345 90 50
#description: Monitoring System, TL 2013-08-06
#Provides: probe7863

#export JAVA_HOME=/opt/jdk/jdk1.6.0_18
export PROJ_HOME=/usr/local/tomcat/fileback/20130620
cd $PROJ_HOME
#$JAVA_HOME/bin/java -jar $PROJ_HOME/Probe14.jar >$PROJ_HOME/out.file 2>&1 &
#$PROJ_HOME/start7863.sh
./start7863.sh


//这个是具体启动的start7863.sh

java -jar Probe14.jar >out.file 2>&1 &

//这个和你当前  jar 所在的是同一个目录下面

linux 配置Tomcat自动重启shell命令 linux
#!/bin/sh
#chkconfig: 2345 80 90
#description:auto_run
### BEGIN INIT INFO
# Provides:          tomcat 
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: The tomcat Java Application Server
RETVAL=0
export JAVA_HOME=/opt/jdk/jdk1.6.0_18
export CATALINA_HOME=/usr/local/tomcat/apache-tomcat-6.0.37
export CATALINA_BASE=/usr/local/tomcat/apache-tomcat-6.0.37
start()
{
	if [ -f $CATALINA_HOME/bin/startup.sh ];
		then
		echo $"Starting Tomcat"
			$CATALINA_HOME/bin/startup.sh
		RETVAL=$?
		echo " OK"
		return $RETVAL
	fi
}

stop()
{
	if [ -f $CATALINA_HOME/bin/shutdown.sh ];
		then
			echo $"Stopping Tomcat"
				$CATALINA_HOME/bin/shutdown.sh
			RETVAL=$?
			sleep 1
			ps -fwwu tomcat | grep apache-tomcat|grep -v grep | grep -v PID | awk '{print $2}'|xargs kill -9
			echo " OK"
			# [ $RETVAL -eq 0 ] && rm -f /var/lock/...
			return $RETVAL
	 fi

}

case "$1" in 
start)         
	start        
;; 
stop)          
	stop        
;;

restart)        
	echo $"Restaring Tomcat"         
	$0 stop         
	sleep 1         
	$0 start         
	;; 
*)
	echo $"Usage: $0 {start|stop|restart}"        
	exit 1        
	;;
esac
exit $RETVAL
Spring framewor下载地址
http://repo.spring.io/release/org/springframework/spring/

http://repo.spring.io/webapp/search/artifact/?0&q=spring-framework
LangDemoTest java
package apache.commons.lang.test;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Calendar;
import java.util.Date;
import java.util.Iterator;

import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.CharSet;
import org.apache.commons.lang3.CharSetUtils;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.SerializationUtils;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.SystemUtils;
import org.apache.commons.lang3.Validate;
import org.apache.commons.lang3.builder.EqualsBuilder;
import org.apache.commons.lang3.builder.HashCodeBuilder;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.apache.commons.lang3.math.NumberUtils;
import org.apache.commons.lang3.text.WordUtils;
import org.apache.commons.lang3.time.DateFormatUtils;
import org.apache.commons.lang3.time.DateUtils;
import org.apache.commons.lang3.time.StopWatch;

public class LangDemoTest {
	
	
	public void charSetDemo(){
		System.out.println(StringUtils.center(" charSetDemo ", 40, "="));
		CharSet charSet = CharSet.getInstance("aeiou");
		String demoStr = "The quick brown fox jumps over the lazy dog.";
		int count = 0;
		for (int i = 0, len = demoStr.length(); i < len; i++) {
            if (charSet.contains (demoStr.charAt (i) ) ) {
                count++;
            }
        }
		System.out.println("count : " + count);
	}
	
	public void charSetUtilsDemo(){
		System.out.println(StringUtils.center(" charSetUtilsDemo ", 40 , "="));
		System.out.println("计算字符串中包含某字符数");
		System.out.println(CharSetUtils.count(
				"The quick brown fox jumps over the lazy dog.", "aeiou"));
		System.out.println ("删除字符串中某字符.");
		System.out.println (CharSetUtils.delete (
                "The quick brown fox jumps over the lazy dog.", "aeiou") );
		System.out.println ("保留字符串中某字符.");
		System.out.println(CharSetUtils.keep (
				"The quick brown fox jumps over the lazy dog.", "aeiou"));
		System.out.println ("合并重复的字符.");
        System.out.println (CharSetUtils.squeeze ("a  bbbbbb     c dd", "b d") );
        
	}
	
	public void objectUtilsDemo(){
		System.out.println(StringUtils.center(" objectUtilsDemo ", 40,"="));
		System.out.println ("Object为null时,默认打印某字符.");
		Object object = null;
		System.out.println(ObjectUtils.defaultIfNull(object,"object is null "));
		
		System.out.println ("验证两个引用是否指向的Object是否相等,取决于Object的equals()方法.");
		Object a = new Object();
		Object b = a;
		Object c = new Object();
		System.out.println(ObjectUtils.equals(a, b));
		System.out.println(ObjectUtils.equals(a, c));
		
		System.out.println ("用父类Object的toString()方法返回对象信息.");
		Date date = new Date();
		System.out.println(ObjectUtils.identityToString(date));
		System.out.println(date);
		
		System.out.println ("返回类本身的toString()方法结果,对象为null时,返回0长度字符串.");
		System.out.println (ObjectUtils.toString (date) );
		System.out.println (ObjectUtils.toString (null) );
		System.out.println (date);
	}
	
	public void serializationUtilsDemo(){
		System.out.println(StringUtils.center(" serializationUtilsDemo ", 40, "="));
		Date date = new Date();
		byte[] bytes = SerializationUtils.serialize(date);
		System.out.println(ArrayUtils.toString(bytes));
		System.out.println (date);
		
		Date reDate = (Date)SerializationUtils.deserialize(bytes);
		System.out.println(reDate);
		System.out.println(ObjectUtils.equals(date, reDate));
		System.out.println(date == reDate);
		
		FileOutputStream fos = null;
		FileInputStream fis = null;
		
		try {
			fos = new FileOutputStream(new File("D:" + File.separator + "test.txt"));
			fis = new FileInputStream(new File("D:" + File.separator + "test.txt"));
			SerializationUtils.serialize(date,fos);
			Date reDate2 = (Date)SerializationUtils.deserialize(fis);
			System.out.println(date.equals(reDate2));
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			try {
				fos.close();
				fis.close();
			} catch (Exception e2) {
				e2.printStackTrace();
			}
		}
	}
	
	public void randomStringUtilsDemo(){
		System.out.println(StringUtils.center(" randomStringUtilsDemo ", 40, "="));
		System.out.println("生成指定长度的随机字符串,好像没什么用");
		System.out.println(RandomStringUtils.random(500));
		
		System.out.println ("在指定字符串中生成长度为n的随机字符串.");
		System.out.println(RandomStringUtils.random(5, "reafgaby"));
		
		System.out.println ("指定从字符或数字中生成随机字符串.");
		System.out.println(RandomStringUtils.random(5,true,false));
		System.out.println(RandomStringUtils.random(5,false,true));
	}
	
	public void stringUtilsDemo(){
		System.out.println(StringUtils.center(" stringUtilsDemo ", 40, "="));
		System.out.println ("将字符串重复n次,将文字按某宽度居中,将字符串数组用某字符串连接.");
		String[] header = new String[3];
		header[0] = StringUtils.repeat("*", 50);
		header[1] = StringUtils.center(" StringUtils ", 50,"^o^");
		header[2] = header[0] ;
		String head = StringUtils.join(header,"\n");
		System.out.println(head);
		
		System.out.println ("缩短到某长度,用...结尾.");
		System.out.println (StringUtils.abbreviate (
                "The quick brown fox jumps over the lazy dog.", 10) );
		
		System.out.println ("返回两字符串不同处索引号.");
        System.out.println (StringUtils.indexOfDifference ("aaabc", "aaacc") );
        
        System.out.println ("返回两字符串不同处开始至结束.");
        System.out.println (StringUtils.difference ("aaabcde", "aaaccde") );
        
        System.out.println ("截去字符串为以指定字符串结尾的部分.");
        System.out.println (StringUtils.chomp ("aaabcde", "de") );
        
        System.out.println ("检查一字符串是否为另一字符串的子集.");
        System.out.println (StringUtils.containsOnly ("aad", "aadd") );
        
        System.out.println ("检查一字符串是否包含另一字符串.");
        System.out.println (StringUtils.contains ("defg", "ef") );
        System.out.println (StringUtils.containsOnly ("ef", "defg") );
        
        System.out.println ("返回可以处理null的toString().");
        System.out.println (StringUtils.defaultString ("aaaa") );
        System.out.println ("?" + StringUtils.defaultString (null) + "!");
        
        System.out.println ("去除字符中的空格.");
        System.out.println (StringUtils.deleteWhitespace ("aa  bb  cc") );
        
        System.out.println ("分隔符处理成数组.");
        String[] strArray = StringUtils.split ("a,b,,c,d,null,e", ",");
        System.out.println (strArray.length);
        System.out.println (strArray.toString() );
        
        System.out.println ("判断是否是某类字符.");
        System.out.println (StringUtils.isAlpha ("ab") );
        System.out.println (StringUtils.isAlphanumeric ("12") );
        System.out.println (StringUtils.isBlank ("") );
        System.out.println (StringUtils.isNumeric ("123") );
	}
	
	
	public void systemUtilsDemo(){
		System.out.println(StringUtils.center(" systemUtilsDemo ", 40, "="));
		System.out.println ("获得系统文件分隔符.");
		System.out.println(SystemUtils.FILE_SEPARATOR);
		
		System.out.println ("获得源文件编码.");
		System.out.println(SystemUtils.FILE_ENCODING);
		
        System.out.println ("获得ext目录.");
        System.out.println(SystemUtils.JAVA_EXT_DIRS);
        
        System.out.println ("获得java版本.");
        System.out.println (SystemUtils.JAVA_VM_VERSION);
        
        System.out.println ("获得java厂商.");
        System.out.println (SystemUtils.JAVA_VENDOR);
        
        
	}
	
	public void classUtilsDemo(){
		System.out.println(StringUtils.center(" classUtilsDemo ", 40, "="));
		System.out.println ("获取类实现的所有接口.");
		System.out.println(ClassUtils.getAllInterfaces(Date.class));
		
		System.out.println ("获取类所有父类.");
		System.out.println(ClassUtils.getAllSuperclasses(Date.class));
		
		System.out.println ("获取简单类名.");
		System.out.println(ClassUtils.getSimpleName(Date.class));
		
		System.out.println ("获取包名.");
		System.out.println(ClassUtils.getPackageName(Date.class));
		
		System.out.println ("判断是否可以转型.");
		System.out.println(ClassUtils.isAssignable(Date.class, Object.class));
		System.out.println(ClassUtils.isAssignable(Object.class, Date.class));
	}
	
	public void stringEscapeUtilsDemo(){
		System.out.println(StringUtils.center(" stringEscapeUtilsDemo ", 40,"="));
		System.out.println("转换特殊字符.");
		System.out.println("html : " + StringEscapeUtils.escapeHtml3(" "));
		System.out.println("html : " + StringEscapeUtils.escapeHtml4(" "));
		System.out.println("html : " + StringEscapeUtils.unescapeHtml3("<p>"));
		System.out.println("html : " + StringEscapeUtils.unescapeHtml4("<p>"));
		
	}
	
	
	private final class BuildDemo{
		String name;
		int age;
		
		public BuildDemo (String name, int age) {
            this.name = name;
            this.age = age;
        }
		 public String toString() {
	            ToStringBuilder tsb = new ToStringBuilder (this, ToStringStyle.MULTI_LINE_STYLE);
	            tsb.append ("Name", name);
	            tsb.append ("Age", age);
	            return tsb.toString();
	        }
	 
	        public int hashCode() {
	            HashCodeBuilder hcb = new HashCodeBuilder();
	            hcb.append (name);
	            hcb.append (age);
	            return hcb.hashCode();
	        }
	 
	        public boolean equals (Object obj) {
	            if (! (obj instanceof BuildDemo) ) {
	                return false;
	            }
	            BuildDemo bd = (BuildDemo) obj;
	            EqualsBuilder eb = new EqualsBuilder();
	            eb.append (name, bd.name);
	            eb.append (age, bd.age);
	            return eb.isEquals();
	        }
	}
	
	public void builderDemo(){
		System.out.println(StringUtils.center(" builderDemo ", 40, "="));
		
		BuildDemo buildDemo = new BuildDemo("a", 1);
		BuildDemo buildDemo2 = new BuildDemo("b", 2);
		BuildDemo buildDemo3 = new BuildDemo("a", 1);
		
		System.out.println(" toString() ");
		System.out.println(buildDemo);
		System.out.println(buildDemo2);
		System.out.println(buildDemo3);
		
		System.out.println ("hashCode()");
		System.out.println (buildDemo.hashCode() );
		System.out.println (buildDemo2.hashCode() );
		System.out.println (buildDemo3.hashCode() );
		
		System.out.println ("equals()");
		System.out.println (buildDemo.equals (buildDemo2) );
		System.out.println (buildDemo.equals (buildDemo3) );
	}
	
	public void numberUtils(){
		System.out.println(StringUtils.center(" numberUtils  ", 40, "="));
		System.out.println ("字符串转为数字(不知道有什么用).");
		System.out.println(NumberUtils.toInt("ba",33));
		
		System.out.println ("从数组中选出最大值.");
		System.out.println (NumberUtils.max (new int[] { 1, 2, 3, 4 }) );
		
		System.out.println ("判断字符串是否全是整数.");
		System.out.println (NumberUtils.isDigits ("123.1") );
		System.out.println (NumberUtils.isDigits ("123") );
		
		System.out.println ("判断字符串是否是有效数字.");
		System.out.println (NumberUtils.isNumber ("0123.1") );
		System.out.println (NumberUtils.isNumber ("123.1") );
	}
	
	public void dateFormatUtilsDemo(){
		System.out.println(StringUtils.center(" dateFormatUtilsDemo ", 40, "="));
		System.out.println ("格式化日期输出.");
		//System.out.println (DateFormatUtils.format (System.currentTimeMillis(), "yyyy-MM-dd HH:mm:ss") );
		
		System.out.println ("秒表.");
        StopWatch sw = new StopWatch();
        sw.start();
        
        for (Iterator iterator = DateUtils.iterator (new Date(), DateUtils.RANGE_WEEK_CENTER); iterator.hasNext();) {
            Calendar cal = (Calendar) iterator.next();
            System.out.println (DateFormatUtils.format (cal.getTime(),
                                "yy-MM-dd HH:mm") );
        }
 
        sw.stop();
        System.out.println ("秒表计时:" + sw.getTime() );
	}
	
	private void validateDemo() {
        String[] strarray = {"a", "b", "c"};
        System.out.println ("验证功能");
        System.out.println (Validate.notEmpty (strarray) );
    }

	 private void wordUtilsDemo() {
		 System.out.println(StringUtils.center(" wordUtilsDemo ", 40, "="));
		 System.out.println ("单词处理功能");
		 String str1 = "wOrD";
		 String str2 = "ghj\nui\tpo";
		 
		 System.out.println (WordUtils.capitalize (str1) ); //首字母大写
		 System.out.println (WordUtils.capitalizeFully (str1) ); //首字母大写其它字母小写
		 
		 char[] ctrg = {'.'};
		 System.out.println (WordUtils.capitalizeFully ("i aM.fine", ctrg) ); //在规则地方转换
		 System.out.println (WordUtils.initials (str1) ); //获取首字母
		 System.out.println (WordUtils.initials ("Ben John Lee", null) ); //取每个单词的首字母
		
		 char[] ctr = {' ', '.'};
		 System.out.println (WordUtils.initials ("Ben J.Lee", ctr) ); //按指定规则获取首字母
		 System.out.println (WordUtils.swapCase (str1) ); //大小写逆转
		 System.out.println (WordUtils.wrap (str2, 1) ); //解析\n和\t等字符
	 }
	
	public static void main(String[] args) {
		LangDemoTest langDemo = new LangDemoTest();
		
		//langDemo.charSetDemo();
		//langDemo.charSetUtilsDemo();
		//langDemo.objectUtilsDemo();
		//langDemo.serializationUtilsDemo();
		//langDemo.randomStringUtilsDemo();
		//langDemo.stringUtilsDemo();
		//langDemo.systemUtilsDemo();
		//langDemo.classUtilsDemo();
		//langDemo.stringEscapeUtilsDemo();
		//langDemo.builderDemo();
		//langDemo.numberUtils();
		//langDemo.dateFormatUtilsDemo();
		//langDemo.validateDemo();
		langDemo.wordUtilsDemo();
	}
}
TreeMap是按key排序如果想要安装value排序怎么办呢? java
package cn.cd.sg.sort;

import java.util.TreeMap;
import java.util.Map.Entry;

public class TestTreeMap {
	public static void main(String[] args) {
		TreeMap<Person, String> treeMap = new TreeMap<Person, String>();
		treeMap.put(new Person("zhangsan",21), "90");  
		treeMap.put(new Person("lisi",33), "10");  
		treeMap.put(new Person("wangwu",22), "30");  
		treeMap.put(new Person("zhaoliu",55), "50"); 
		
		 //使用entrySet遍历map  
		for (Entry<Person, String> entry : treeMap.entrySet()) {  
		    Person person = entry.getKey();  
		    System.out.println(person);  
		}
	}
}




package cn.cd.sg.sort;

public class Person implements Comparable<Person>{

	private String name;  
    private int age;
    	
    
    
    
	public Person(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}


	@Override
	public int compareTo(Person o) {
		if (this.age > o.age) {
			return -1;
		}else if (this.age == o.age) {
			return 0;
		}else {
			return 1;
		}
		
//		if (this.name.equals(o.name)) {
//			return 0;
//		}else if (!this.name.equals(o.name)) {
//			return -1;
//		}else {
//			return 1;
//		}
	}


	@Override
	public String toString() {
		return "Person [age=" + age + ", name=" + name + "]";
	}


	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Person other = (Person) obj;
		if (age != other.age)
			return false;
		if (name == null) {
			if (other.name != null)
				return false;
		} else if (!name.equals(other.name))
			return false;
		return true;
	}
}




package cn.cd.sg.sort;

import java.util.Comparator;
import java.util.TreeMap;

public class TestTreeMap2 {
	
	public static void main(String[] args) {
		
		TreeMap<Person2, String> map2 = new TreeMap<Person2, String>(new Comparator<Person2>() {
			
			@Override
			public int compare(Person2 o1, Person2 o2) {
				if (o1.getAge()>o2.getAge()) {  
					return -1;  
				}else if (o1.getAge()<o2.getAge()) {  
					return 1;  
				}  
				return 0;  
			}
		});
		 map2.put(new Person2("aaa",21), "90");  
		 map2.put(new Person2("bbb",33), "10");  
		 map2.put(new Person2("ccc",22), "30");  
		 map2.put(new Person2("ddd",55), "50");  
		 //通过keySet遍历map 如果只要获取值直接通过map2.values  
		 for(Person2 key : map2.keySet()){  
		     System.out.println(key.getName()+" "+key.getAge());  
		 }  
	}
	
}



package cn.cd.sg.sort;

public class Person2 {
	private String name;
	private int age;

	public Person2(String name, int age) {
		this.age = age;
		this.name = name;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}



package cn.cd.sg.sort;

import java.util.Arrays;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;

public class TestTreeMap3 {
	
	
	@SuppressWarnings("unchecked")
	public static Map.Entry<String,Integer>[] getSortedHashtableByValue(Map map){
		Set set = map.entrySet();
		Map.Entry<String, Integer>[] entries =  (Entry<String, Integer>[]) set.toArray(new Map.Entry[set.size()]);
		Arrays.sort(entries,new Comparator() {
			@Override
			public int compare(Object arg0, Object arg1) {
				Long key1 = Long.valueOf(((Map.Entry) arg0).getValue().toString());  
				Long key2 = Long.valueOf(((Map.Entry) arg1).getValue().toString());  
				return key1.compareTo(key2);
			}  
	    });
		
		return entries; 
	}
	
	
	public static void main(String[] args) {
	    Map<String, Integer> score = new HashMap<String, Integer>();  
	    score.put("yzq", 21);  
	    score.put("yzh", 23);  
	    score.put("yhf", 11);  
	    score.put("ysq", 45);  
	    Map.Entry<String, Integer>[] entries = getSortedHashtableByValue(score);  
	    for (Entry<String, Integer> entry : entries) {  
	        String key = entry.getKey();  
	        Integer value = entry.getValue();  
	        System.out.println(key+":"+value);  
	    }  
	}
}
Parameter java
package com.supinfo.core.web;

import java.util.HashMap;

/**
* 描述:用于MyBatis参数  传递封转  Map
* 项目名称:jnschool2   
* 类名称:Parameter   
* 创建人:孙刚   
* 创建时间:2014-2-25 上午10:21:03   
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
public class Parameter extends HashMap<String, Object>{

	private static final long serialVersionUID = -2912662164421350185L;
		
	/**
	* 描述  : 创建参数
	* 方法名: createParameter
	* 创建人:孙刚   
	* 创建时间:2014-2-25 上午10:24:09
	* @param key
	* @param value
	* @return :Parameter
	 */
	public static Parameter createParameter(String key,Object value){
		return new Parameter().addParameter(key, value);
	}
	
	/**
	 * 
	* 描述  : 用来封装多个参数, 并实现连接操作 
	* 方法名: addParameter
	* 创建人:孙刚   
	* 创建时间:2014-2-25 上午10:25:34
	* @param key
	* @param value
	* @return  
	* @return :Parameter
	 */
	public Parameter addParameter(String key,Object value){
		this.put(key, value);
		return this;
	}
}
SVN windows服务自动开启 java
//创建 SVN windows服务自动开启

binpath是你SVN服务端 安装位置

-r 是指你资源库指定目录

sc create MySVNServer binpath= "D:/svnService/Subversion/bin/svnserve.exe --service -r D:/svnService/svnRepoRoot/jieneng"  
displayname= "SVNService" depend= Tcpip start= auto
spring编程式事务管理 spring
package com.supinfo.util;

import org.springframework.context.ApplicationContext;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;

public class TransactionTemplateUtils {	
	
	//DefaultTransactionDefinition
	//用户描述事务的隔离级别、超时时间、是否为只读是事务和事务传播规则等控制事务具体行为属性
	private static DefaultTransactionDefinition def = new DefaultTransactionDefinition();
	
	//Struts2Utils.getApplicationContext()此处 
	/*
	 * public static final String[] beanPath = new String[] { "applicationContext-*.xml"};
	 * 
	 * public static ApplicationContext getApplicationContext(){
	 *	 return new ClassPathXmlApplicationContext(beanPath);
	 * }
	 */
	private static ApplicationContext ctx = Struts2Utils.getApplicationContext();
	
	
	/**
	* @描述: 获取 事务管理器
	* @方法名: getPlatformTransactionManager
	* @throws
	 */
	public static PlatformTransactionManager getPlatformTransactionManager(){
		//从Spring容器中请求事务管理器,用PlatformTransactionManager 
		return ctx.getBean("transactionManager", PlatformTransactionManager.class);
	}

	/**
	* @描述: 获取 控制计量设备事务管理器状态,不需要设置隔离级别 和 传播性
	* @方法名: getTransactionStatus
	* @param txManager
	* @return TransactionStatus
	* @throws
	 */
	public static TransactionStatus getTransactionStatus(
			PlatformTransactionManager txManager) {
		return txManager.getTransaction(def);
	}
	
	/**
	 * @描述: 获取事务管理器状态,需要设置隔离级别 和 传播性  通过名称  通过常量形式
	 * @方法名: getTransactionStatus
	 * @param txManager 事务管理器
	 * @param isolationLevel 事务的隔离级别
	 * @param propagationBehavior 事务传播性
	 * @return TransactionStatus
	 * @throws
	 */
	public static TransactionStatus getTransactionStatus(
			PlatformTransactionManager txManager, int isolationLevel,
			int propagationBehavior) {
		//设置隔离级别
		def.setIsolationLevel(isolationLevel);
		//设置传播性
		def.setPropagationBehavior(propagationBehavior);
		//TransactionStatus对象代表着事务的状态。以下代码根据传入的事务定义 
		//对象返回事务并启动事务
		return txManager.getTransaction(def);
	}
	/**
	* @描述: 获取事务管理器状态,需要设置隔离级别 和 传播性  通过名称
	* @方法名: getTransactionStatus
	* @param txManager 事务管理器
	* @param isolationLevelName 隔离级别名称 
	* @param propagationBehaviorName 隔离级别名称
	* @return TransactionStatus
	* @throws
	 */
	public static TransactionStatus getTransactionStatus(
			PlatformTransactionManager txManager, String isolationLevelName,
			String propagationBehaviorName) {
		//设置隔离级别名称
		def.setIsolationLevelName(isolationLevelName);
		//设置传播性名称
		def.setPropagationBehaviorName(propagationBehaviorName);
		////TransactionStatus对象代表着事务的状态。以下代码根据传入的事务定义 
		//对象返回事务并启动事务
		return txManager.getTransaction(def);
	}
	
	
	public static void main(String[] args) {
		PlatformTransactionManager txManager = TransactionTemplateUtils.getPlatformTransactionManager();
		TransactionStatus status = TransactionTemplateUtils.getTransactionStatus(txManager, TransactionDefinition.ISOLATION_DEFAULT, TransactionDefinition.PROPAGATION_MANDATORY);
		try {
			
		} catch (Exception e) {
			//异常 回滚
			txManager.rollback(status);
		}
		//提交
		txManager.commit(status);
	}
}
JAVA 备份数据库 java
package cn.cd.sg.test.qita2;

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

public class BackupMysql {
	
	/*
	 * 数据库用户名
	 */
	private String username;
	private String password;// 数据库密码
	private String dbname;// 需要备份的数据库名
	private String ip = "localhost"; //主机IP 
	private String charset = "utf-8";//编码格式
	private String backupPath; // 存放备份文件的路径
	private String mysqlpath; //mysql安装位置

	private String stmt;
	
	
	public BackupMysql(String username, String password, String dbname,
			String ip, String charset,String mysqlpath,String backupPath) {
		
		this.username = username;
		this.password = password;
		this.dbname = dbname;
		if (ip == null || ip.equals("")){
			this.ip = "localhost";
		}else{
			this.ip = ip;
		}
		if (charset == null || charset.equals("")){
			this.charset = " "; 
		}else{
			this.charset = " --default-character-set=" + charset;
		}
		this.mysqlpath = mysqlpath;
		this.backupPath = this.getRandomFileName(backupPath);
		
		this.stmt = mysqlpath + "\\mysqldump " + this.dbname+ " -h "
				+ this.ip + " -u" + this.username + " -p" + this.password
				+ this.charset + " --result-file=" + this.backupPath;
	}

	
	
	public boolean run() {
		boolean run_result = false;
		try {
			Runtime.getRuntime().exec(this.stmt);
			run_result = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return run_result;
	}
	
	
	public String getRandomFileName(String backupPath){
		Date now = new Date();
		SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
		String random = format.format(now);
		String dbName = random + ".sql";
		File file = new File(backupPath);
		if (!file.exists()) {
			file.mkdirs();
		}
		dbName = backupPath + File.separator + dbName;
		return dbName;
	}
	
	
	
	 public static void main(String[] args){
		 	BackupMysql backup=new BackupMysql("root","root","jnschool",null,"utf8","C:\\Program Files\\MySQL\\MySQL Server 5.5\\bin","d:\\db\\dbBack");
	        boolean result = backup.run();
	        if(result)
	            System.out.println("备份成功");        

	    }
}
ZipUtils2 java
package cn.cd.sg.zip.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;

import org.apache.log4j.Logger;

/**
* @Description:文件 压缩、解压工具(主要是 使用的java.util.zip.*工具)
* 项目名称:utils   
* 类名称:ZipUtils2   
* 创建人:孙刚   
* 创建时间: 
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
public class ZipUtils2 {
	
	private static final int BUFFER = 2048;

	private final static Logger logger = Logger.getLogger(ZipUtils2.class);
	/**
	* @Description: 把一个zip文件解压在一个指定的目录中
	* 注意:该解压后的目录,已经去掉了zip包的根目录
	* 方法名: zipToFolder
	* @param : @param zFile
	* @param : @param folder
	* @return void 
	* @throws
	 */
	public static void zipToFolder(File zFile, String folder) throws Exception{
		
		String baseDir = folder;
		ZipFile zfile = new ZipFile(zFile);
		Enumeration<?> zList = zfile.entries();
		ZipEntry ze = null;
		OutputStream os = null;
		InputStream is = null;
		try {
			while (zList.hasMoreElements()){
				ze = (ZipEntry) zList.nextElement();
				if (ze.isDirectory()) {
					logger.debug("Dir: " + ze.getName() + " skipped..");
					continue;
				}
				os =  new BufferedOutputStream(new FileOutputStream(getRealFileName(baseDir,ze.getName())));
				is = new BufferedInputStream(zfile.getInputStream(ze));
				int readLen = 0;
				int buffSize = 1024;
				byte[] buf = new byte[buffSize];
				while ((readLen = is.read(buf, 0, BUFFER)) != -1){
					os.write(buf, 0, readLen);
				}	
			}
		} catch (Exception e) {
			
		}finally{
			if (is != null)
			{
				is.close();
			}
			if (os != null)
			{
				os.close();
			}
		}
	}
	/**
	* @Description: 将文件夹filesFolder的内容打包到zipFilePath路径,绝对路径
	* 方法名: getCompressToZip</p>
	* @param :filesFolder  要打包的
	* @param :zipFilePath  打包到哪里
	* @param :zipFileName  打包名字
	* @return File    返回类型
	* @throws
	 */
	public static File getCompressToZip(String filesFolder,String zipFilePath,String zipFileName){
		
		File baseFolder = new File(filesFolder);
		ZipOutputStream zos = null;
		String _zipFileName = zipFileName + ".zip";
		File zipFile = new File(zipFilePath, _zipFileName);
		try {
			if (!zipFile.exists()) {
				File parentfolder = zipFile.getParentFile();
				if (!parentfolder.exists()){
					parentfolder.mkdirs();
				}
				zipFile.createNewFile();
			}
			zos = new ZipOutputStream(new FileOutputStream(zipFile));
			// 将文件夹压缩为的zip文件, 去掉第一层目录
			File[] listFiles = baseFolder.listFiles();
			int listFilesSize = listFiles.length;
			for (int i = 0; i < listFilesSize; i++) {
				zipFiles(zos, listFiles[i], "");
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if (zos != null) {
				try {
					zos.flush();
					zos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return zipFile;
	}
	
	/**
	* @Description: 定义压缩文件及目录为zip文件的方法
	* 方法名: zipFiles
	* @param :zos
	* @param :file
	* @return void   
	* @throws
	 */
	public static void zipFiles(ZipOutputStream zos, File file, String baseDir) {
		FileInputStream in = null;
		String fileName = file.getName();
		
		try {
			// 判断File是否为目录
			if (file.isDirectory()) {
				// 获取file目录下所有文件及目录,作为一个File数组返回
				File[] files = file.listFiles();
				baseDir =  baseDir.length() == 0 ? "" : baseDir;
				String entryName = baseDir + fileName + "/";
				zos.putNextEntry(new ZipEntry(entryName));
				int subFileSize = files.length;
				for (int i = 0; i < subFileSize; i++) {
					zipFiles(zos, files[i], entryName);
				}
			}else {
				zos.putNextEntry(new ZipEntry(baseDir + fileName));
				in = new FileInputStream(file);
				int lenth = 0;
				int buffSize = 1024;
				byte[] buff = new byte[buffSize];
				while ((lenth = in.read(buff, 0, buffSize)) != -1) {
					zos.write(buff, 0, lenth);
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if (in != null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	/**
	* @Description:给定根目录,返回一个相对路径所对应的实际文件名. 注意:该解压后的目录,已经去掉了其根目录
	* 方法名: getRealFileName
	* @param :baseDir 指定根目录
	* @param :absFileName  相对路径名,来自于ZipEntry中的name
	* @return File 
	* @throws
	 */
	public static File getRealFileName(String baseDir, String absFileName){
		String[] dirs = absFileName.split("/");
		File ret = new File(baseDir);
		
		if (dirs.length > 1) {
			for (int i = 0; i < dirs.length; i++) {
				ret = new File(ret, dirs[i]);
			}
		}
		if (!ret.exists()) {
			ret.mkdirs();
		}
		
		ret = new File(ret, dirs[dirs.length - 1]);
		
		return ret;
	}
	
	
	public static void main(String[] args) {
		Date d1 = new Date();
		try {
			getCompressToZip("D:\\test1", "E:\\test2", "aaa");
			
			Thread.sleep(2000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		Date d2 = new Date();
		System.out.println(d2.getTime() - d1.getTime() / 1000 + "s");
	}
}
ZipUtils java
package cn.cd.sg.zip.utils;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;

/**
* @Description:文件 压缩、解压工具(主要是 使用的org.apache.tools.zip.*工具)
* 项目名称:utils   
* 类名称:ZipUtils   
* 创建人:孙刚   
* 创建时间:
* 修改人1:xxx     
* 修改时间1:xxxx-xx-xx 
* 修改备注:   
* @version  1.0
 */
public class ZipUtils {
	
	public static final String FILE_SEPARATOR = System.getProperty("file.separator");
	
	
	/**
	* @Description: 压缩一个文件
	* 方法名: zipFile
	* @param :filePath  文件路径,  
	* @param :zipPath  压缩到的指定位置
	* @return boolean
	 */
	public static boolean zipFile(String filePath,String zipPath){
		
		BufferedReader in = null;
		ZipOutputStream out = null;
		
		try {
			File file = new File(filePath);
			in = new BufferedReader(new InputStreamReader(new FileInputStream(filePath),"UTF-8"));
			FileOutputStream f =new FileOutputStream(zipPath);
			CheckedOutputStream checkedOutputStream = new CheckedOutputStream(f, new CRC32());
			out = new ZipOutputStream(new BufferedOutputStream(checkedOutputStream));
			
			int c ;
			
			out.putNextEntry(new ZipEntry(file.getName()));
			
			while ((c = in.read()) != -1) {
				out.write(c);
			}
		} catch (Exception e) {
			 e.printStackTrace();
             return false;
		}finally{
			try {
				 if(in!=null) in.close();				      
				 if(out!=null)  out.close();
			} catch (IOException e) {				
				e.printStackTrace();				
			}  
		}
		return true;
	}
	
	/**
	* @Description:  将指定的文件解压缩到指定的文件夹,解压后的文件夹目录和给定的压缩文件名相同.
	* 方法名: unZipFile
	* @param :zipFilePath 压缩文件全路径
	* @param : unZipDirectory   指定解压位置路径
	* @return boolean  
	 */
	public static boolean unZipFile(String zipFilePath, String unZipDirectory)throws IOException {
		
		ZipFile zipFile = new ZipFile(zipFilePath);
		Enumeration<?> entries = zipFile.getEntries();
		if (null == entries) {
			return false;
		}
		while (entries.hasMoreElements()) {
			ZipEntry zipEntry = (ZipEntry)entries.nextElement();
			File file = new File(unZipDirectory + FILE_SEPARATOR + zipEntry.getName());
			if (zipEntry.isDirectory()) {
				if (!file.exists() && !file.mkdirs())
					throw new IOException("Couldn't create directory: " + file);
			}else {
				BufferedInputStream is = null;
				BufferedOutputStream os = null;
				
				try {
					is = new BufferedInputStream(zipFile.getInputStream(zipEntry));
					
					File destDir = file.getParentFile();
					if (!destDir.exists() && !destDir.mkdirs()) {
						throw new IOException("Couldn't create dir " + destDir);
					}
					
					os = new BufferedOutputStream(new FileOutputStream(file));
					
					int b = -1;
					while ((b = is.read()) != -1) {
						os.write(b);
					}
					
				} catch (Exception e) {
					e.printStackTrace();
				}finally{
					if (is != null)
						is.close();
					if (os != null)
						os.close();
				}
			}
		}
		zipFile.close();
		return true;
	}
	
	/**
	* @Description:压缩一个  目录
	* 方法名: zipDirectory
	* @param :dir  压缩的目录
	* @param :zipPath  压缩到的指定位置
	* @return boolean  
	* @throws
	 */
	public static boolean zipDirectory(String dir,String zipPath ){
		
		ZipOutputStream out = null;
		try {
			File dirFile = new File(dir);
			if(!dirFile.isDirectory()){
				return false;	
			}
			FileOutputStream f = new FileOutputStream(zipPath);
			CheckedOutputStream ch = new CheckedOutputStream(f,new CRC32());
			out = new ZipOutputStream(new BufferedOutputStream(ch));
			
			zip(out, dirFile, "");
			
		} catch (Exception e) {
			 e.printStackTrace();
             return false;
		}finally{
			 try {						      
				 if(out!=null)  out.close();				 
			} catch (IOException e) {				
				e.printStackTrace();				
			}   
		}
		return true;
	}
	
	
	private static void zip(ZipOutputStream out,File f,String base)throws Exception{
		System.out.println("Zipping  "+f.getName());
		BufferedInputStream in = null;
		try {
			if (f.isDirectory()) {
				File[] fl = f.listFiles();
				out.putNextEntry(new ZipEntry(base + "/"));
				base = base.length() == 0 ? "" : base + "/";
				for (int i = 0;i < fl.length ;i++ )	{
					zip(out,fl[i],base+fl[i].getName());
				}
			}else {
				out.putNextEntry(new org.apache.tools.zip.ZipEntry(base));
				FileInputStream is = new FileInputStream(f);
				//修改BUG!二进制输出采用buffered
				in = new BufferedInputStream(is);
				int b;
				while ((b=in.read()) != -1){
					out.write(b);
				}
			}
		} catch (Exception e) {
			
		}finally{
			if (null != in) {
				in.close();
			}
		}
	}
	
	 public static void main(String[] args){
	     //	boolean f = zipFile("d:/计量设备.xls","d:/计量设备.zip");
	         //boolean f = zipDirectory("D:/","d:/计量设备.zip");
	        
	         //System.out.println(f);
			 try {
				 unZipFile("d:/计量设备.zip", "D:\\");
				//zipDirectory("F:\\list","F:\\list.zip");
			} catch (Exception e) {			
				e.printStackTrace();			
			}
	         
		 }
}
Validate java
package cn.cd.sg.validate.utils;

import java.util.Collection;
import java.util.Map;

import org.apache.log4j.Logger;

import cn.cd.sg.collection.utils.CollectionUtils;
import cn.cd.sg.object.utils.ObjectUtils;
import cn.cd.sg.string.utils.StringUtils;
public class Validate {
	
	/**
	 * log4j DEBUG输出级别
	 */
	public static final int DEBUG = 1;

	/**
	 * log4j INFO输出级别
	 */
	public static final int INFO = 2;

	/**
	 * log4j ERROR输出级别
	 */
	public static final int ERROR = 3;

	/**
	 * log4j WARN输出级别
	 */
	public static final int WARN = 4;

	
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isTrue
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:31
	* @param expression
	* @param message  
	* @return :void
	 */
	public static void isTrue(boolean expression, String message) {
		if (!expression) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isTrue
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:36
	* @param expression  
	* @return :void
	 */
	public static void isTrue(boolean expression) {
		isTrue(expression, "[Assertion failed] - this expression must be true");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:40
	* @param object
	* @param message  
	* @return :void
	 */
	public static void isNull(Object object, String message) {
		if (object != null) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:44
	* @param object  
	* @return :void
	 */
	public static void isNull(Object object) {
		isNull(object, "[Assertion failed] - the object argument must be null");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:50
	* @param object
	* @param message  
	* @return :void
	 */
	public static void notNull(Object object, String message) {
		if (object == null) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notNull
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:03:56
	* @param object  
	* @return :void
	 */
	public static void notNull(Object object) {
		notNull(object, "[Assertion failed] - this argument is required; it must not be null");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasLength
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:00
	* @param text
	* @param message  
	* @return :void
	 */
	public static void hasLength(String text, String message) {
		if (!StringUtils.hasLength(text)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	 * 
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasLength
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:07
	* @param text  
	* @return :void
	 */
	public static void hasLength(String text) {
		hasLength(text,"[Assertion failed] - this String argument must have length; it must not be null or empty");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasText
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:15
	* @param text
	* @param message  
	* @return :void
	 */
	public static void hasText(String text, String message) {
		if (!StringUtils.hasText(text)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasText
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:19
	* @param text  
	* @return :void
	 */
	public static void hasText(String text) {
		hasText(text,"[Assertion failed] - this String argument must have text; it must not be null, empty, or blank");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: doesNotContain
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:25
	* @param textToSearch
	* @param substring
	* @param message  
	* @return :void
	 */
	public static void doesNotContain(String textToSearch, String substring, String message) {
		if (StringUtils.hasLength(textToSearch) && StringUtils.hasLength(substring) &&
				textToSearch.indexOf(substring) != -1) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: doesNotContain
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:34
	* @param textToSearch
	* @param substring  
	* @return :void
	 */
	public static void doesNotContain(String textToSearch, String substring) {
		doesNotContain(textToSearch, substring,"[Assertion failed] - this String argument must not contain the substring [" + substring + "]");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:40
	* @param array
	* @param message  
	* @return :void
	 */
	public static void notEmpty(Object[] array, String message) {
		if (ObjectUtils.isEmpty(array)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:44
	* @param array  
	* @return :void
	 */
	public static void notEmpty(Object[] array) {
		notEmpty(array, "[Assertion failed] - this array must not be empty: it must contain at least 1 element");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: noNullElements
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:48
	* @param array
	* @param message  
	* @return :void
	 */
	public static void noNullElements(Object[] array, String message) {
		if (array != null) {
			for (int i = 0; i < array.length; i++) {
				if (array[i] == null) {
					throw new IllegalArgumentException(message);
				}
			}
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: noNullElements
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:53
	* @param array  
	* @return :void
	 */
	public static void noNullElements(Object[] array) {
		noNullElements(array, "[Assertion failed] - this array must not contain any null elements");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:04:58
	* @param collection
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Collection collection, String message) {
		if (CollectionUtils.isEmpty(collection)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:03
	* @param collection  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Collection collection) {
		notEmpty(collection,
				"[Assertion failed] - this collection must not be empty: it must contain at least 1 element");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:09
	* @param map
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Map map, String message) {
		if (CollectionUtils.isEmpty(map)) {
			throw new IllegalArgumentException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: notEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:14
	* @param map  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void notEmpty(Map map) {
		notEmpty(map, "[Assertion failed] - this map must not be empty; it must contain at least one entry");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isInstanceOf
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:19
	* @param clazz
	* @param obj  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isInstanceOf(Class clazz, Object obj) {
		isInstanceOf(clazz, obj, "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isInstanceOf
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:23
	* @param type
	* @param obj
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isInstanceOf(Class type, Object obj, String message) {
		notNull(type, "Type to check against must not be null");
		if (!type.isInstance(obj)) {
			throw new IllegalArgumentException(message +
					"Object of class [" + (obj != null ? obj.getClass().getName() : "null") +
					"] must be an instance of " + type);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isAssignable
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:28
	* @param superType
	* @param subType  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isAssignable(Class superType, Class subType) {
		isAssignable(superType, subType, "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: isAssignable
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:33
	* @param superType
	* @param subType
	* @param message  
	* @return :void
	 */
	@SuppressWarnings("unchecked")
	public static void isAssignable(Class superType, Class subType, String message) {
		notNull(superType, "Type to check against must not be null");
		if (subType == null || !superType.isAssignableFrom(subType)) {
			throw new IllegalArgumentException(message + subType + " is not assignable to " + superType);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: state
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:37
	* @param expression
	* @param message  
	* @return :void
	 */
	public static void state(boolean expression, String message) {
		if (!expression) {
			throw new IllegalStateException(message);
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: state
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:42
	* @param expression  
	* @return :void
	 */
	public static void state(boolean expression) {
		state(expression, "[Assertion failed] - this state invariant must be true");
	}
	
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: log4j
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:05:46
	* @param className
	* @param category
	* @param msg  
	* @return :void
	 */
	public static <T> void log4j(String className, int category, String msg) {
		Logger log = Logger.getLogger(className);
		switch (category) {
		case DEBUG:
			log.debug(msg);
			break;

		case INFO:

			log.info(msg);
			break;

		case ERROR:
			log.error(msg);
			break;

		case WARN:
			log.warn(msg);
			break;

		default:
			log.debug(msg);
		}
	}
}
StringUtils java
package cn.cd.sg.string.utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Enumeration;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Properties;
import java.util.Set;
import java.util.StringTokenizer;
import java.util.TreeSet;

import cn.cd.sg.collection.utils.CollectionUtils;
import cn.cd.sg.object.utils.ObjectUtils;


public class StringUtils {
	private static final String FOLDER_SEPARATOR = "/";

	private static final String WINDOWS_FOLDER_SEPARATOR = "\\";

	private static final String TOP_PATH = "..";

	private static final String CURRENT_PATH = ".";

	private static final char EXTENSION_SEPARATOR = '.';
	
	/**
	* @Description: 当一个字段为 null 或者  ""返回 true
	* @方法名: isEmpty
	* @param : @param str
	* @return boolean    返回类型
	* @throws
	 */
	public static boolean isEmpty(String str){
		return str == null || str.length() == 0;
	}

	
	/**
	 * 
	* 描述  : 当一个字符串不为 null 或  ""返回true
	* 方法名: isNotEmpty
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:49:50
	* @param str
	* @throws Exception  
	* 返回类型@return :boolean
	 */
	public static boolean isNotEmpty(String str){
		return !isEmpty(str);
    }
	
	
	public static boolean isBlank(String str){
        int strLen;
        if(str == null || (strLen = str.length()) == 0){
        	return true;
        }
        for(int i = 0; i < strLen; i++){
        	  if(!Character.isWhitespace(str.charAt(i))){
             	 return false;
              }
        }
        return true;
    }
	
	 public static boolean isNotBlank(String str){
		 return !isBlank(str);
	 }
	 
	 public static String join(Object array[]){
		 return join(array, ((String) (null)));
	 }
	 
	 public static String join(Object array[], char separator){
		 if(array == null){
			 return null;
		 }else {
			 return join(array, separator, 0, array.length);
		}
	 }
	 
	 public static String join(Object array[], char separator, int startIndex, int endIndex){
		 if(array == null){
			 return null;
		 }
		 int bufSize = endIndex - startIndex;
		 if(bufSize <= 0){
			  return "";
		 }
		 bufSize *= (array[startIndex] != null ? array[startIndex].toString().length() : 16) + 1;
		 StringBuffer buf = new StringBuffer(bufSize);
		 for(int i = startIndex; i < endIndex; i++){
			 if(i > startIndex){
				 buf.append(separator);
			 }
			 if(array[i] != null){
				 buf.append(array[i]);
			 }
		 }
		 return buf.toString();
	 }
	 
	public static String join(Object array[], String separator){
		 if(array == null){
			 return null;
		 }else{
			 return join(array, separator, 0, array.length);
		 }
	 }
	 /**
	 * 描述  : 
	 * 方法名: join
	 * 创建人:孙刚   
	 * 创建时间:2014-1-21 下午04:51:57
	 * @param array
	 * @param separator
	 * @param startIndex
	 * @param endIndex
	 * 返回类型@return :String
	  */
	 public static String join(Object array[], String separator, int startIndex, int endIndex){
		 if(array == null){
			 return null;
		 }
		 if(separator == null){
			 separator = "";
		 }
		 
		 int bufSize = endIndex - startIndex;
		 if(bufSize <= 0){
			 return "";
		 }
		 bufSize *= (array[startIndex] != null ? array[startIndex].toString().length() : 16) + separator.length();
		 StringBuffer buf = new StringBuffer(bufSize);
		 for(int i = startIndex; i < endIndex; i++){
			 if(i > startIndex){
				 buf.append(separator);
			 }
			 if (array[i] != null) {
				 buf.append(array[i]);
			}
		 }
		 return buf.toString();
	 }
	 
	 @SuppressWarnings("unchecked")
	public static String join(Iterator iterator, char separator){
		 if(iterator == null){
			 return null;
		 }
		 if(!iterator.hasNext()){
			 return "";
		 }
		 Object first = iterator.next();
		 if(!iterator.hasNext()){
			 return ObjectUtils.toString(first);
		 }
		 StringBuffer buf = new StringBuffer(256);
		 if(first != null){
			 buf.append(first);
		 }
		 do{
			 if(!iterator.hasNext()){
				 break;
			 }
			 buf.append(separator);
			 Object obj = iterator.next();
			 if(obj != null){
				 buf.append(obj);
			 }
		 }while(true);
		 
		 return buf.toString();
     }
	 
	 @SuppressWarnings("unchecked")
	public static String join(Collection collection, char separator){
		  if(collection == null){
			  return null;
		  }else {
			  return join(collection.iterator(), separator);
		}
     }

	 /**
	 * 描述  : (判断一个字符串长度是否 大于 0)
	 * 方法名: hasLength
	 * 创建人:孙刚   
	 * 创建时间:2014-1-21 下午04:52:23
	 * @param str
	 * 返回类型@return :boolean
	  */
	public static boolean hasLength(CharSequence str) {
		return (str != null && str.length() > 0);
	}
	/**
	* 描述  : ()
	* 方法名: hasLength
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:53:54
	* @param str
	* 返回类型@return :boolean
	 */
	public static boolean hasLength(String str) {
		return hasLength((CharSequence) str);
	}

	/**
	* 描述  : ()
	* 方法名: hasText
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:54:12
	* @param str
	* @return  
	* 返回类型@return :boolean
	 */
	public static boolean hasText(CharSequence str) {
		if (!hasLength(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (!Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}

	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: hasText
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:54:42
	* @param str
	* 返回类型@return :boolean
	 */
	public static boolean hasText(String str) {
		return hasText((CharSequence) str);
	}
	/**
	 * 
	* 描述  : ()
	* 方法名: containsWhitespace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:55:09
	* @param str
	* @return :boolean
	 */
	public static boolean containsWhitespace(CharSequence str) {
		if (!hasLength(str)) {
			return false;
		}
		int strLen = str.length();
		for (int i = 0; i < strLen; i++) {
			if (Character.isWhitespace(str.charAt(i))) {
				return true;
			}
		}
		return false;
	}
	
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: containsWhitespace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:55:40
	* @param str
	* @return :boolean
	 */
	public static boolean containsWhitespace(String str) {
		return containsWhitespace((CharSequence) str);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: trimWhitespace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:56:10
	* @param str
	* @return :String
	 */
	public static String trimWhitespace(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
			sb.deleteCharAt(0);
		}
		while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) {
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
	}
	/**
	* 描述  : ()
	* 方法名: trimAllWhitespace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:58:03
	* @param str
	* @return :String
	 */
	public static String trimAllWhitespace(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		int index = 0;
		while (sb.length() > index) {
			if (Character.isWhitespace(sb.charAt(index))) {
				sb.deleteCharAt(index);
			}
			else {
				index++;
			}
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: trimLeadingWhitespace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:58:39
	* @param str
	* @return  
	* @return :String
	 */
	public static String trimLeadingWhitespace(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && Character.isWhitespace(sb.charAt(0))) {
			sb.deleteCharAt(0);
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: trimTrailingWhitespace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:58:47
	* @param str
	* @return :String
	 */
	public static String trimTrailingWhitespace(String str) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && Character.isWhitespace(sb.charAt(sb.length() - 1))) {
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: trimLeadingCharacter
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:58:58
	* @param str
	* @param leadingCharacter
	* @return :String
	 */
	public static String trimLeadingCharacter(String str, char leadingCharacter) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && sb.charAt(0) == leadingCharacter) {
			sb.deleteCharAt(0);
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: trimTrailingCharacter
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:08
	* @param str
	* @param trailingCharacter
	* @return :String
	 */
	public static String trimTrailingCharacter(String str, char trailingCharacter) {
		if (!hasLength(str)) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str);
		while (sb.length() > 0 && sb.charAt(sb.length() - 1) == trailingCharacter) {
			sb.deleteCharAt(sb.length() - 1);
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: startsWithIgnoreCase
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:16
	* @param str
	* @param prefix
	* @return :boolean
	 */
	public static boolean startsWithIgnoreCase(String str, String prefix) {
		if (str == null || prefix == null) {
			return false;
		}
		if (str.startsWith(prefix)) {
			return true;
		}
		if (str.length() < prefix.length()) {
			return false;
		}
		String lcStr = str.substring(0, prefix.length()).toLowerCase();
		String lcPrefix = prefix.toLowerCase();
		return lcStr.equals(lcPrefix);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: endsWithIgnoreCase
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:27
	* @param str
	* @param suffix
	* @return :boolean
	 */
	public static boolean endsWithIgnoreCase(String str, String suffix) {
		if (str == null || suffix == null) {
			return false;
		}
		if (str.endsWith(suffix)) {
			return true;
		}
		if (str.length() < suffix.length()) {
			return false;
		}

		String lcStr = str.substring(str.length() - suffix.length()).toLowerCase();
		String lcSuffix = suffix.toLowerCase();
		return lcStr.equals(lcSuffix);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: substringMatch
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:34
	* @param str
	* @param index
	* @param substring
	* @return :boolean
	 */
	public static boolean substringMatch(CharSequence str, int index, CharSequence substring) {
		for (int j = 0; j < substring.length(); j++) {
			int i = index + j;
			if (i >= str.length() || str.charAt(i) != substring.charAt(j)) {
				return false;
			}
		}
		return true;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: countOccurrencesOf
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:41
	* @param str
	* @param sub
	* @return :int
	 */
	public static int countOccurrencesOf(String str, String sub) {
		if (str == null || sub == null || str.length() == 0 || sub.length() == 0) {
			return 0;
		}
		int count = 0;
		int pos = 0;
		int idx;
		while ((idx = str.indexOf(sub, pos)) != -1) {
			++count;
			pos = idx + sub.length();
		}
		return count;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: replace
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:48
	* @param inString
	* @param oldPattern
	* @param newPattern
	* @return :String
	 */
	public static String replace(String inString, String oldPattern, String newPattern) {
		if (!hasLength(inString) || !hasLength(oldPattern) || newPattern == null) {
			return inString;
		}
		StringBuilder sb = new StringBuilder();
		int pos = 0; // our position in the old string
		int index = inString.indexOf(oldPattern);
		// the index of an occurrence we've found, or -1
		int patLen = oldPattern.length();
		while (index >= 0) {
			sb.append(inString.substring(pos, index));
			sb.append(newPattern);
			pos = index + patLen;
			index = inString.indexOf(oldPattern, pos);
		}
		sb.append(inString.substring(pos));
		// remember to append any characters to the right of a match
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: delete
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午04:59:56
	* @param inString
	* @param pattern
	* @return :String
	 */
	public static String delete(String inString, String pattern) {
		return replace(inString, pattern, "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: deleteAny
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:02
	* @param inString
	* @param charsToDelete
	* @return  
	* @return :String
	 */
	public static String deleteAny(String inString, String charsToDelete) {
		if (!hasLength(inString) || !hasLength(charsToDelete)) {
			return inString;
		}
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < inString.length(); i++) {
			char c = inString.charAt(i);
			if (charsToDelete.indexOf(c) == -1) {
				sb.append(c);
			}
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: quote
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:06
	* @param str
	* @return  
	* @return :String
	 */
	public static String quote(String str) {
		return (str != null ? "'" + str + "'" : null);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: quoteIfString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:10
	* @param obj
	* @return  
	* @return :Object
	 */
	public static Object quoteIfString(Object obj) {
		return (obj instanceof String ? quote((String) obj) : obj);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: unqualify
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:15
	* @param qualifiedName
	* @return  
	* @return :String
	 */
	public static String unqualify(String qualifiedName) {
		return unqualify(qualifiedName, '.');
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: unqualify
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:19
	* @param qualifiedName
	* @param separator
	* @return  
	* @return :String
	 */
	public static String unqualify(String qualifiedName, char separator) {
		return qualifiedName.substring(qualifiedName.lastIndexOf(separator) + 1);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: capitalize
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:22
	* @param str
	* @return  
	* @return :String
	 */
	public static String capitalize(String str) {
		return changeFirstCharacterCase(str, true);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: uncapitalize
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:27
	* @param str
	* @return  
	* @return :String
	 */
	public static String uncapitalize(String str) {
		return changeFirstCharacterCase(str, false);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: changeFirstCharacterCase
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:31
	* @param str
	* @param capitalize
	* @return  
	* @return :String
	 */
	private static String changeFirstCharacterCase(String str, boolean capitalize) {
		if (str == null || str.length() == 0) {
			return str;
		}
		StringBuilder sb = new StringBuilder(str.length());
		if (capitalize) {
			sb.append(Character.toUpperCase(str.charAt(0)));
		}
		else {
			sb.append(Character.toLowerCase(str.charAt(0)));
		}
		sb.append(str.substring(1));
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: getFilename
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:36
	* @param path
	* @return  
	* @return :String
	 */
	public static String getFilename(String path) {
		if (path == null) {
			return null;
		}
		int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
		return (separatorIndex != -1 ? path.substring(separatorIndex + 1) : path);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: getFilenameExtension
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:40
	* @param path
	* @return  
	* @return :String
	 */
	public static String getFilenameExtension(String path) {
		if (path == null) {
			return null;
		}
		int sepIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
		return (sepIndex != -1 ? path.substring(sepIndex + 1) : null);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: stripFilenameExtension
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:45
	* @param path
	* @return  
	* @return :String
	 */
	public static String stripFilenameExtension(String path) {
		if (path == null) {
			return null;
		}
		int sepIndex = path.lastIndexOf(EXTENSION_SEPARATOR);
		return (sepIndex != -1 ? path.substring(0, sepIndex) : path);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: applyRelativePath
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:50
	* @param path
	* @param relativePath
	* @return  
	* @return :String
	 */
	public static String applyRelativePath(String path, String relativePath) {
		int separatorIndex = path.lastIndexOf(FOLDER_SEPARATOR);
		if (separatorIndex != -1) {
			String newPath = path.substring(0, separatorIndex);
			if (!relativePath.startsWith(FOLDER_SEPARATOR)) {
				newPath += FOLDER_SEPARATOR;
			}
			return newPath + relativePath;
		}
		else {
			return relativePath;
		}
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: cleanPath
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:00:55
	* @param path
	* @return  
	* @return :String
	 */
	public static String cleanPath(String path) {
		if (path == null) {
			return null;
		}
		String pathToUse = replace(path, WINDOWS_FOLDER_SEPARATOR, FOLDER_SEPARATOR);

		
		int prefixIndex = pathToUse.indexOf(":");
		String prefix = "";
		if (prefixIndex != -1) {
			prefix = pathToUse.substring(0, prefixIndex + 1);
			pathToUse = pathToUse.substring(prefixIndex + 1);
		}
		if (pathToUse.startsWith(FOLDER_SEPARATOR)) {
			prefix = prefix + FOLDER_SEPARATOR;
			pathToUse = pathToUse.substring(1);
		}

		String[] pathArray = delimitedListToStringArray(pathToUse, FOLDER_SEPARATOR);
		List<String> pathElements = new LinkedList<String>();
		int tops = 0;

		for (int i = pathArray.length - 1; i >= 0; i--) {
			String element = pathArray[i];
			if (CURRENT_PATH.equals(element)) {
				// Points to current directory - drop it.
			}
			else if (TOP_PATH.equals(element)) {
				// Registering top path found.
				tops++;
			}
			else {
				if (tops > 0) {
					// Merging path element with element corresponding to top path.
					tops--;
				}
				else {
					// Normal path element found.
					pathElements.add(0, element);
				}
			}
		}

		// Remaining top paths need to be retained.
		for (int i = 0; i < tops; i++) {
			pathElements.add(0, TOP_PATH);
		}

		return prefix + collectionToDelimitedString(pathElements, FOLDER_SEPARATOR);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: pathEquals
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:05
	* @param path1
	* @param path2
	* @return  
	* @return :boolean
	 */
	public static boolean pathEquals(String path1, String path2) {
		return cleanPath(path1).equals(cleanPath(path2));
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: parseLocaleString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:09
	* @param localeString
	* @return  
	* @return :Locale
	 */
	public static Locale parseLocaleString(String localeString) {
		String[] parts = tokenizeToStringArray(localeString, "_ ", false, false);
		String language = (parts.length > 0 ? parts[0] : "");
		String country = (parts.length > 1 ? parts[1] : "");
		String variant = "";
		if (parts.length >= 2) {
			// There is definitely a variant, and it is everything after the country
			// code sans the separator between the country code and the variant.
			int endIndexOfCountryCode = localeString.indexOf(country) + country.length();
			// Strip off any leading '_' and whitespace, what's left is the variant.
			variant = trimLeadingWhitespace(localeString.substring(endIndexOfCountryCode));
			if (variant.startsWith("_")) {
				variant = trimLeadingCharacter(variant, '_');
			}
		}
		return (language.length() > 0 ? new Locale(language, country, variant) : null);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: toLanguageTag
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:14
	* @param locale
	* @return  
	* @return :String
	 */
	public static String toLanguageTag(Locale locale) {
		return locale.getLanguage() + (hasText(locale.getCountry()) ? "-" + locale.getCountry() : "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: addStringToArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:17
	* @param array
	* @param str
	* @return  
	* @return :String[]
	 */
	public static String[] addStringToArray(String[] array, String str) {
		if (ObjectUtils.isEmpty(array)) {
			return new String[] {str};
		}
		String[] newArr = new String[array.length + 1];
		System.arraycopy(array, 0, newArr, 0, array.length);
		newArr[array.length] = str;
		return newArr;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: concatenateStringArrays
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:21
	* @param array1
	* @param array2
	* @return  
	* @return :String[]
	 */
	public static String[] concatenateStringArrays(String[] array1, String[] array2) {
		if (ObjectUtils.isEmpty(array1)) {
			return array2;
		}
		if (ObjectUtils.isEmpty(array2)) {
			return array1;
		}
		String[] newArr = new String[array1.length + array2.length];
		System.arraycopy(array1, 0, newArr, 0, array1.length);
		System.arraycopy(array2, 0, newArr, array1.length, array2.length);
		return newArr;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: mergeStringArrays
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:26
	* @param array1
	* @param array2
	* @return  
	* @return :String[]
	 */
	public static String[] mergeStringArrays(String[] array1, String[] array2) {
		if (ObjectUtils.isEmpty(array1)) {
			return array2;
		}
		if (ObjectUtils.isEmpty(array2)) {
			return array1;
		}
		List<String> result = new ArrayList<String>();
		result.addAll(Arrays.asList(array1));
		for (String str : array2) {
			if (!result.contains(str)) {
				result.add(str);
			}
		}
		return toStringArray(result);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: sortStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:30
	* @param array
	* @return  
	* @return :String[]
	 */
	public static String[] sortStringArray(String[] array) {
		if (ObjectUtils.isEmpty(array)) {
			return new String[0];
		}
		Arrays.sort(array);
		return array;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: toStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:36
	* @param collection
	* @return  
	* @return :String[]
	 */
	public static String[] toStringArray(Collection<String> collection) {
		if (collection == null) {
			return null;
		}
		return collection.toArray(new String[collection.size()]);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: toStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:40
	* @param enumeration
	* @return  
	* @return :String[]
	 */
	public static String[] toStringArray(Enumeration<String> enumeration) {
		if (enumeration == null) {
			return null;
		}
		List<String> list = Collections.list(enumeration);
		return list.toArray(new String[list.size()]);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: trimArrayElements
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:46
	* @param array
	* @return  
	* @return :String[]
	 */
	public static String[] trimArrayElements(String[] array) {
		if (ObjectUtils.isEmpty(array)) {
			return new String[0];
		}
		String[] result = new String[array.length];
		for (int i = 0; i < array.length; i++) {
			String element = array[i];
			result[i] = (element != null ? element.trim() : null);
		}
		return result;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: removeDuplicateStrings
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:51
	* @param array
	* @return  
	* @return :String[]
	 */
	public static String[] removeDuplicateStrings(String[] array) {
		if (ObjectUtils.isEmpty(array)) {
			return array;
		}
		Set<String> set = new TreeSet<String>();
		for (String element : array) {
			set.add(element);
		}
		return toStringArray(set);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: split
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:01:56
	* @param toSplit
	* @param delimiter
	* @return  
	* @return :String[]
	 */
	public static String[] split(String toSplit, String delimiter) {
		if (!hasLength(toSplit) || !hasLength(delimiter)) {
			return null;
		}
		int offset = toSplit.indexOf(delimiter);
		if (offset < 0) {
			return null;
		}
		String beforeDelimiter = toSplit.substring(0, offset);
		String afterDelimiter = toSplit.substring(offset + delimiter.length());
		return new String[] {beforeDelimiter, afterDelimiter};
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: splitArrayElementsIntoProperties
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:01
	* @param array
	* @param delimiter
	* @return  
	* @return :Properties
	 */
	public static Properties splitArrayElementsIntoProperties(String[] array, String delimiter) {
		return splitArrayElementsIntoProperties(array, delimiter, null);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: splitArrayElementsIntoProperties
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:05
	* @param array
	* @param delimiter
	* @param charsToDelete
	* @return  
	* @return :Properties
	 */
	public static Properties splitArrayElementsIntoProperties(
			String[] array, String delimiter, String charsToDelete) {

		if (ObjectUtils.isEmpty(array)) {
			return null;
		}
		Properties result = new Properties();
		for (String element : array) {
			if (charsToDelete != null) {
				element = deleteAny(element, charsToDelete);
			}
			String[] splittedElement = split(element, delimiter);
			if (splittedElement == null) {
				continue;
			}
			result.setProperty(splittedElement[0].trim(), splittedElement[1].trim());
		}
		return result;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: tokenizeToStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:09
	* @param str
	* @param delimiters
	* @return  
	* @return :String[]
	 */
	public static String[] tokenizeToStringArray(String str, String delimiters) {
		return tokenizeToStringArray(str, delimiters, true, true);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: tokenizeToStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:14
	* @param str
	* @param delimiters
	* @param trimTokens
	* @param ignoreEmptyTokens
	* @return  
	* @return :String[]
	 */
	public static String[] tokenizeToStringArray(
			String str, String delimiters, boolean trimTokens, boolean ignoreEmptyTokens) {

		if (str == null) {
			return null;
		}
		StringTokenizer st = new StringTokenizer(str, delimiters);
		List<String> tokens = new ArrayList<String>();
		while (st.hasMoreTokens()) {
			String token = st.nextToken();
			if (trimTokens) {
				token = token.trim();
			}
			if (!ignoreEmptyTokens || token.length() > 0) {
				tokens.add(token);
			}
		}
		return toStringArray(tokens);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: delimitedListToStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:19
	* @param str
	* @param delimiter
	* @return  
	* @return :String[]
	 */
	public static String[] delimitedListToStringArray(String str, String delimiter) {
		return delimitedListToStringArray(str, delimiter, null);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: delimitedListToStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:23
	* @param str
	* @param delimiter
	* @param charsToDelete
	* @return  
	* @return :String[]
	 */
	public static String[] delimitedListToStringArray(String str, String delimiter, String charsToDelete) {
		if (str == null) {
			return new String[0];
		}
		if (delimiter == null) {
			return new String[] {str};
		}
		List<String> result = new ArrayList<String>();
		if ("".equals(delimiter)) {
			for (int i = 0; i < str.length(); i++) {
				result.add(deleteAny(str.substring(i, i + 1), charsToDelete));
			}
		}
		else {
			int pos = 0;
			int delPos;
			while ((delPos = str.indexOf(delimiter, pos)) != -1) {
				result.add(deleteAny(str.substring(pos, delPos), charsToDelete));
				pos = delPos + delimiter.length();
			}
			if (str.length() > 0 && pos <= str.length()) {
				// Add rest of String, but not in case of empty input.
				result.add(deleteAny(str.substring(pos), charsToDelete));
			}
		}
		return toStringArray(result);
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: commaDelimitedListToStringArray
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:28
	* @param str
	* @return  
	* @return :String[]
	 */
	public static String[] commaDelimitedListToStringArray(String str) {
		return delimitedListToStringArray(str, ",");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: commaDelimitedListToSet
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:32
	* @param str
	* @return  
	* @return :Set<String>
	 */
	public static Set<String> commaDelimitedListToSet(String str) {
		Set<String> set = new TreeSet<String>();
		String[] tokens = commaDelimitedListToStringArray(str);
		for (String token : tokens) {
			set.add(token);
		}
		return set;
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: collectionToDelimitedString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:36
	* @param coll
	* @param delim
	* @param prefix
	* @param suffix
	* @return  
	* @return :String
	 */
	@SuppressWarnings("unchecked")
	public static String collectionToDelimitedString(Collection coll, String delim, String prefix, String suffix) {
		if (CollectionUtils.isEmpty(coll)) {
			return "";
		}
		StringBuilder sb = new StringBuilder();
		Iterator it = coll.iterator();
		while (it.hasNext()) {
			sb.append(prefix).append(it.next()).append(suffix);
			if (it.hasNext()) {
				sb.append(delim);
			}
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: collectionToDelimitedString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:42
	* @param coll
	* @param delim
	* @return  
	* @return :String
	 */
	@SuppressWarnings("unchecked")
	public static String collectionToDelimitedString(Collection coll, String delim) {
		return collectionToDelimitedString(coll, delim, "", "");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: collectionToCommaDelimitedString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:46
	* @param coll
	* @return  
	* @return :String
	 */
	@SuppressWarnings("unchecked")
	public static String collectionToCommaDelimitedString(Collection coll) {
		return collectionToDelimitedString(coll, ",");
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: arrayToDelimitedString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:49
	* @param arr
	* @param delim
	* @return  
	* @return :String
	 */
	public static String arrayToDelimitedString(Object[] arr, String delim) {
		if (ObjectUtils.isEmpty(arr)) {
			return "";
		}
		if (arr.length == 1) {
			return ObjectUtils.nullSafeToString(arr[0]);
		}
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
			if (i > 0) {
				sb.append(delim);
			}
			sb.append(arr[i]);
		}
		return sb.toString();
	}
	/**
	* 描述  : (这里用一句话描述这个方法的作用)
	* 方法名: arrayToCommaDelimitedString
	* 创建人:孙刚   
	* 创建时间:2014-1-21 下午05:02:54
	* @param arr
	* @return  
	* @return :String
	 */
	public static String arrayToCommaDelimitedString(Object[] arr) {
		return arrayToDelimitedString(arr, ",");
	}
	
	 public static String capitalise(String str){
		 return capitalize(str);
     }
	 
	 public static String uncapitalizel(String str)
     {
         int strLen;
         if(str == null || (strLen = str.length()) == 0){
        	 return str;
         }else {
        	 return (new StringBuffer(strLen)).append(Character.toLowerCase(str.charAt(0))).append(str.substring(1)).toString();
		}
     }
	 
}
Global site tag (gtag.js) - Google Analytics