`
收藏列表
标题 标签 来源
android ant Android Ant
<?xml version="1.0" encoding="UTF-8"?>
<project name="onewayonelife" default="release" basedir=".">
	<!-- 环境变量 -->
	<property environment="env" />
	<!-- 应用的名称 -->
	<property name="appName" value="${ant.project.name}" />
	<!-- 应用的包目录 -->
	<property name="appPackage" value="org.wp.activity" />
	<!-- SDK目录(获取操作系统环境变量ANDROID_SDK_HOME的值) -->
	<property name="sdk-folder" value="${env.ANDROID_SDK_HOME}" />
	<!-- SDK中tools目录 -->
	<property name="sdk-tools" value="${sdk-folder}\tools" />
	<!-- SDK指定平台目录 -->
	<property name="sdk-platform-folder" value="${sdk-folder}\platforms\android-8" />
	<!-- SDK指定平台的tools目录 -->
	<property name="sdk-platform-tools" value="${sdk-folder}\platform-tools" />

	<!-- 使用到得命令 -->
	<property name="aapt" value="${sdk-platform-tools}\aapt.exe" />
	<property name="aidl" value="${sdk-platform-tools}\aidl.exe" />
	<property name="dx" value="${sdk-platform-tools}\dx.bat" />
	<property name="apkbuilder" value="${sdk-tools}\apkbuilder.bat" />
	<property name="jarsigner" value="${env.JAVA_HOME}\bin\jarsigner.exe" />
	<property name="zipalign" value="${sdk-tools}\zipalign.exe" />
	<property name="adb" value="${sdk-tools}\adb.exe" />

	<!-- 生成R文件的相对目录 -->
	<property name="outdir-gen" value="gen" />
	<!-- 编译后的文件放置目录 -->
	<property name="outdir-bin" value="bin" />

	<!-- 生成class目录 -->
	<property name="outdir-classes" value="${outdir-bin}" />
	<property name="outdir-classes-ospath" value="${basedir}\${outdir-classes}" />

	<!-- 资源文件目录 -->
	<property name="resource-dir" value="res" />
	<property name="assets-dir" value="assets" />

	<!-- 配置清单文件 -->
	<property name="android-manifest-xml" value="AndroidManifest.xml" />

	<!-- 编译时需要的jar,如果项目需要使用到地图服务则需要maps.jar -->
	<property name="android-jar" value="${sdk-platform-folder}\android.jar" />
	<property name="android-maps-jar" value="${sdk-folder}\add-ons\addon_google_apis_google_inc_8\libs\maps.jar" />

	<!-- 编译aidl文件所需的预处理框架文件framework.aidl -->
	<property name="framework-aidl" value="${sdk-platform-folder}\framework.aidl" />

	<!-- Java源文件目录 -->
	<property name="srcdir" value="src" />
	<property name="srcdir-ospath" value="${basedir}\${srcdir}" />

	<!-- 外部类库所在目录 -->
	<property name="external-lib" value="lib" />
	<property name="external-lib-ospath" value="${basedir}\${external-lib}" />

	<!-- proguard所在目录 -->
	<property name="proguard-dir" value="proguard" />
	<property name="proguard-lib" value="${proguard-dir}\proguard.jar" />
	<property name="unoptimized" value="${proguard-dir}\unoptimized.jar" />
	<property name="optimized" value="${proguard-dir}\optimized.jar" />

	<!-- classes.dex相关变量 -->
	<property name="dex-file" value="classes.dex" />
	<property name="dex-path" value="${outdir-bin}\${dex-file}" />
	<property name="dex-ospath" value="${basedir}\${dex-path}" />

	<!-- 经过aapt生成的资源包文件 -->
	<property name="resources-package" value="${outdir-bin}\resources.ap_" />
	<property name="resources-package-ospath" value="${basedir}\${resources-package}" />

	<!-- 未签名apk包 -->
	<property name="out-unsigned-package" value="${outdir-bin}\${appName}-unsigned.apk" />
	<property name="out-unsigned-package-ospath" value="${basedir}\${out-unsigned-package}" />

	<!-- 证书文件 -->
	<property name="keystore-file" value="${basedir}\keystore\wp.keystore" />

	<!-- 已签名apk包 -->
	<property name="out-signed-package" value="${outdir-bin}\${appName}-signed.apk" />
	<property name="out-signed-package-ospath" value="${basedir}\${out-signed-package}" />

	<!-- 优化后apk包 -->
	<property name="out-zipalign-package" value="${outdir-bin}\${appName}.apk" />
	<property name="out-zipalign-package-ospath" value="${basedir}\${out-zipalign-package}" />

	<target name="init">
		<echo>${appName}</echo>
		<echo>${appPackage}</echo>
		<echo>${sdk-folder}</echo>
		<echo>${sdk-tools}</echo>
		<echo>${sdk-platform-folder}</echo>
		<echo>${sdk-platform-tools}</echo>
		<echo>${aapt}</echo>
		<echo>${aidl}</echo>
		<echo>${dx}</echo>
		<echo>${apkbuilder}</echo>
		<echo>${jarsigner}</echo>
		<echo>${zipalign}</echo>
		<echo>${adb}</echo>
		<echo>${outdir-gen}</echo>
		<echo>${outdir-bin}</echo>
		<echo>${outdir-classes}</echo>
		<echo>${outdir-classes-ospath}</echo>
		<echo>${resource-dir}</echo>
		<echo>${assets-dir}</echo>
		<echo>${android-manifest-xml}</echo>
		<echo>${android-jar}</echo>
		<echo>${android-maps-jar}</echo>
		<echo>${framework-aidl}</echo>
		<echo>${srcdir}</echo>
		<echo>${srcdir-ospath}</echo>
		<echo>${external-lib}</echo>
		<echo>${external-lib-ospath}</echo>
		<echo>${proguard-dir}</echo>
		<echo>${proguard-lib}</echo>
		<echo>${unoptimized}</echo>
		<echo>${optimized}</echo>
		<echo>${dex-file}</echo>
		<echo>${dex-path}</echo>
		<echo>${dex-ospath}</echo>
		<echo>${resources-package}</echo>
		<echo>${resources-package-ospath}</echo>
		<echo>${out-unsigned-package}</echo>
		<echo>${out-unsigned-package-ospath}</echo>
		<echo>${keystore-file}</echo>
		<echo>${out-signed-package}</echo>
		<echo>${out-signed-package-ospath}</echo>
		<echo>${out-zipalign-package}</echo>
		<echo>${out-zipalign-package-ospath}</echo>
	</target>

	<target name="initDir" depends="init">
		<echo>初始化文件夹...</echo>
		<delete dir="${outdir-classes}" />
		<mkdir dir="${outdir-classes}" />
		<echo>初始化文件夹完成...</echo>
	</target>

	<!-- 根据工程中的资源文件生成R.java文件 -->
	<target name="gen-R" depends="initDir">
		<echo>生成R.java文件...</echo>
		<exec executable="${aapt}" failonerror="true">
			<arg value="package" />
			<!-- 输出详细内容 -->
			<arg value="-v" />
			<!-- 强制覆盖已存在的文件 -->
			<arg value="-f" />
			<!-- 在-J指定的位置下生成相应的包的目录 -->
			<arg value="-m" />
			<!-- 指定R.java文件生成的目录 -->
			<arg value="-J" />
			<arg value="${outdir-gen}" />
			<!-- 指定资源文件目录 -->
			<arg value="-S" />
			<arg value="${resource-dir}" />
			<!-- 指定assets文件目录 -->
			<arg value="-A" />
			<arg value="${assets-dir}" />
			<!-- 指定配置清单文件 -->
			<arg value="-M" />
			<arg value="${android-manifest-xml}" />
			<!-- 引入类库 -->
			<arg value="-I" />
			<arg value="${android-jar}" />
		</exec>
		<echo>R.java文件生成完成...</echo>
	</target>

	<!-- 编译aidl文件 -->
	<target name="aidl" depends="gen-R">
		<echo>开始编译.aidl文件为.java文件...</echo>
		<apply executable="${aidl}" failonerror="true" verbose="true">
			<!-- aidl声明的目录 -->
			<arg value="-I${srcdir}" />
			<!-- 指定预处理文件 -->
			<arg value="-p${framework-aidl}" />
			<!-- 目标文件目录 -->
			<arg value="-o${outdir-gen}" />
			<!-- 指定哪些文件需要编译 -->
			<fileset dir="${srcdir}">
				<include name="**/*.aidl" />
			</fileset>
		</apply>
		<echo>aidl文件编译完成...</echo>
	</target>

	<!-- 将工程中的java源文件编译成class文件 -->
	<target name="compile" depends="aidl">
		<echo>编译Java源文件...</echo>
		<!-- bootclasspath 指定引导类文件的位置-->
		<javac encoding="GB18030" target="1.6" srcdir="." destdir="${outdir-classes}" bootclasspath="${android-jar}" verbose="true">
			<classpath>
				<fileset dir="${external-lib}" includes="**/*.jar" />
				<filelist>
					<file name="${android-maps-jar}" />
				</filelist>
			</classpath>
		</javac>
		<echo>Java源文件编译完成...</echo>
	</target>

	<!-- 将class文件进行混淆 -->
	<target name="optimize">
		<echo>开始进行代码混淆...</echo>
		<jar basedir="${outdir-classes}" destfile="${unoptimized}" />
		<java jar="${proguard-lib}" fork="true" failonerror="true">
			<!-- Dmaximum.inlined.code.length 默认值为8 设置内联代码的长度 -->
			<jvmarg value="-Dmaximum.inlined.code.length=32" />
			<!-- 指定配置文件 -->
			<arg value="@proguard.cfg" />
			<arg value="-injars ${unoptimized}" />
			<arg value="-outjars ${optimized}" />
			<arg value="-libraryjars ${android-jar}" />
			<arg value="-libraryjars ${android-maps-jar}" />
			<arg value="-libraryjars ${external-lib}\core.jar " />
		</java>
		<delete dir="${outdir-classes}" />
		<mkdir dir="${outdir-classes}" />
		<unzip src="${optimized}" dest="${outdir-classes}" />
		<delete file="${unoptimized}" />
		<delete file="${optimized}" />
		<echo>代码混淆完成...</echo>
	</target>

	<!-- 将.class文件转化成.dex文件 -->
	<target name="dex" depends="compile, optimize">
		<echo>编译文件和引用类库转化为.dex文件...</echo>
		<exec executable="${dx}" failonerror="true">
			<arg value="--dex" />
			<arg value="--verbose" />
			<arg value="--output=${dex-ospath}" />
			<!-- 要生成.dex文件的源classes和libraries -->
			<arg value="${outdir-classes-ospath}" />
			<arg value="${external-lib-ospath}" />
		</exec>
		<echo>.dex文件转换完成...</echo>
	</target>

	<!-- 将资源文件放进输出目录 -->
	<target name="package-res-and-assets">
		<echo>开始转化资源文件...</echo>
		<exec executable="${aapt}" failonerror="true">
			<arg value="package" />
			<!-- 输出详细内容 -->
			<arg value="-v" />
			<!-- 强制覆盖已存在的文件 -->
			<arg value="-f" />
			<!-- 指定资源文件目录 -->
			<arg value="-S" />
			<arg value="${resource-dir}" />
			<!-- 指定assets文件目录 -->
			<arg value="-A" />
			<arg value="${assets-dir}" />
			<!-- 指定配置清单文件 -->
			<arg value="-M" />
			<arg value="${android-manifest-xml}" />
			<!-- 引入类库 -->
			<arg value="-I" />
			<arg value="${android-jar}" />
			<!-- 指定要生成的包 -->
			<arg value="-F" />
			<arg value="${resources-package}" />
		</exec>
		<echo>资源文件转化完成...</echo>
	</target>

	<!-- 打包成未签名的apk -->
	<target name="package" depends="dex, package-res-and-assets">
		<echo>开始打包未签名程序...</echo>
		<exec executable="${apkbuilder}" failonerror="true">
			<arg value="${out-unsigned-package-ospath}" />
			<!-- 输出详细内容 -->
			<arg value="-v" />
			<!-- 创建未签名程序 -->
			<arg value="-u" />
			<!-- 指定dex文件添加到应用程序包中 -->
			<arg value="-f" />
			<arg value="${dex-ospath}" />
			<!-- 指定资源文件添加到应用程序包中 -->
			<arg value="-z" />
			<arg value="${resources-package-ospath}" />
			<!-- 参照源文件的目录结构 -->
			<arg value="-rf" />
			<arg value="${srcdir-ospath}" />
		</exec>
		<echo>未签名程序打包完成...</echo>
	</target>

	<!-- 对apk进行签名 -->
	<target name="jarsigner" depends="package">
		<echo>开始为apk文件签名...</echo>
		<exec executable="${jarsigner}" failonerror="true">
			<!-- 签名/验证时输出详细信息 -->
			<arg value="-verbose" />
			<!-- 密钥库位置 -->
			<arg value="-keystore" />
			<arg value="${keystore-file}" />
			<!-- 用于密钥库完整性的口令 -->
			<arg value="-storepass" />
			<arg value="wp" />
			<!-- 专用密钥的口令(如果不同)-->
			<arg value="-keypass" />
			<arg value="wp" />
			<!-- 已签名的 JAR文件的名称 -->
			<arg value="-signedjar" />
			<arg value="${out-signed-package-ospath}" />
			<!-- 要签名的JAR文件 -->
			<arg value="${out-unsigned-package-ospath}" />
			<!-- 文件别名 -->
			<arg value="onewayonelife" />
		</exec>
		<echo>apk文件签名完成...</echo>
	</target>

	<!-- 对apk进行优化 -->
	<target name="zipalign" depends="jarsigner">
		<echo>开始对apk文件进行优化...</echo>
		<exec executable="${zipalign}" failonerror="true">
			<!-- 覆盖已经存在的文件 -->
			<arg value="-f" />
			<!-- 输出详细内容 -->
			<arg value="-v" />
			<!-- 以字节为单位对齐  4 提供了32位对齐 -->
			<arg value="4" />
			<!-- 需要优化的apk文件 -->
			<arg value="${out-signed-package}" />
			<!-- 优化完成的apk文件 -->
			<arg value="${out-zipalign-package}" />
		</exec>
		<echo>apk文件优化完成...</echo>
	</target>

	<!-- 发布 -->
	<target name="release" depends="zipalign">
		<!-- 删除未签名apk -->
		<delete file="${out-unsigned-package-ospath}" />
		<delete file="${out-signed-package}" />
		<echo>APK文件生成完成,生成目录:${out-zipalign-package-ospath}</echo>
	</target>

	<!-- 安装 -->
	<target name="install">
		<echo>开始安装apk文件...</echo>
		<exec executable="${adb}" failonerror="true">
			<arg value="install" />
			<arg value="${out-zipalign-package}" />
		</exec>
		<echo>apk文件安装完成...</echo>
	</target>

	<!-- 重新安装 -->
	<target name="reinstall">
		<echo>重新安装apk文件...</echo>
		<exec executable="${adb}" failonerror="true">
			<arg value="install" />
			<arg value="-r" />
			<arg value="${out-zipalign-package}" />
		</exec>
		<echo>重新安装apk文件完成...</echo>
	</target>

	<!-- 卸载 -->
	<target name="uninstall">
		<echo>开始卸载apk文件...</echo>
		<exec executable="${adb}" failonerror="true">
			<arg value="uninstall" />
			<arg value="${appPackage}" />
		</exec>
		<echo>apk文件卸载完成...</echo>
	</target>
</project>
学习网址
http://www.blogjava.net/ldcsaa/archive/2013/01/07/393890.html

http://code.google.com/p/portal-basic/downloads/list
BC3Key.txt
Beyond Compare 3
Licensed to:    Olivier Guillory
Quantity:       1 user
Serial number:  3281-0350
License type:   Pro Edition for Windows

--- BEGIN LICENSE KEY ---
mv1nPlXAywBDCdhxFc9QOVv6TBcQHLAXBQUAKTh3ie4fqSEOnWrPsnVkF
yt0wAkJHweoExRJWWVwwCniKNROSdJzJXE6YVapYW7f+tRRXRFI4yn4Nj
jZ0RiiqGRCTVzwComUcXB-eiFWRBY6JpSsCNkmIxL5KsRCo442djHhTZE
--- END LICENSE KEY -----
JVM内存在cmd命令中设置
典型设置: 
• java -Xmx3550m -Xms3550m -Xmn2g -Xss128k
-Xmx3550m:设置JVM最大可用内存为3550M。
-Xms3550m:设置JVM促使内存为3550m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。
-Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。
-Xss128k:设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。
• java -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0
-XX:NewRatio=4:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
-XX:SurvivorRatio=4:设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6
-XX:MaxPermSize=16m:设置持久代大小为16m。
-XX:MaxTenuringThreshold=0:设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。 
弹出的窗口关闭前刷新主页面的
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>修改记录成功</title>
<script type="text/javascript">
var cTime=0;
function TimeClose()
{
     window.setTimeout('TimeClose()',1000);
     if(cTime>=0){
         cTime--; 
     }else{
    	 closewindow(); 
     } 
}
function closewindow(){
	if(window.opener){
		opener.document.getElementById("query").fireEvent("onclick");
                   //执行主页面里面的查询按钮的onclick事件。
		window.close();
	}
}
</script>
</head>
<body onload="TimeClose();">
可以得到当前文件在硬盘上的绝对路径!
String path = application.getRealPath("/").substring(0,application.getRealPath("/").length()-1) + request.getRequestURI().substring(request.getContextPath().length());
获取网页上所有div中的image对象
       var images = [];
		var divs = document.getElementsByTagName("div");
		for(var i=0,i<divs.length;i++){
		  var imgs = divs[i].getElementsByTagName("img");
		  	for(var j=0;j<imgs.length;j++){
		   		images.push(imgs[j])
		 	}
		}
struts2的tag标签的<s:iterator 的用法
action中的方法:

	public String getShowTypeList(){
		List<Showtype> list = new ArrayList<Showtype>();
		list = showTypeServices.find();
		
	    HttpServletRequest request = (HttpServletRequest) ActionContext.getContext().get(ServletActionContext.HTTP_REQUEST);
		request.setAttribute("list", list);
	    return "index";
	}


jsp页面:
迭代显示号码和名字
<s:iterator id="showtype" value="%{#request.list}">
   <s:property value='#showtype.no'/> 
   <s:property value='#showtype.name'/>
</s:iterator>
STRUTS2获得session和request
在struts1中,获得到系统的request或者session对象非常方便,都是按照形参传递的,但是在struts2中,request和session都被隐藏了
struts提供两种方式访问session和request,其中比较常用的是利用SPRING里面所说的IOC即控制反转
IOC方式:
action类实现ServletRequestAware接口,并新建一个HttpServletRequest request
public class UserLoginAction extends ActionSupport implements ServletRequestAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
 然后可以生成的request得到对象,如request.getRemoteAddr()
action类实现SessionAware接口,并创建一个MAP对象session
public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
   public void setServletRequest(HttpServletRequest request) {
     this.request=request;
  }
public void setSession(Map session) {
  this.session=session;  
 }
非IOC方式
非Ioc方式

这种方式主要是利用了com.opensymphony.xwork2.ActionContext类以及org.apache.struts2.ServletActionContext类,具体的方法如下所示。
获得request对象:
A . HttpServletRequest request = ServletActionContext.getRequest (); 
B.ActionContext ct= ActionContext.getContext()
   HttpServletRequest request= 
(HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST ); 
获得session对象:
在Struts2中底层的session都被封装成了Map类型,我们称之为SessionMap,而平常我们所说的session则是指HttpSession对象,具体的获得方法如下所示。
A.Map session=ActionContext.getSession();
B.Map session=(Map)ActionContext.getContext().get(ActionContext.SESSION);
得到这个SessionMap之后我们就可以对session进行读写了,如果我们想得到原始的HttpSession可以首先得到HttpServletRequest对象,然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作,我们不必再去碰底层的session了。
struts2中的action中得到webroot下面的文件夹的路径
 String path =new WebContextFactory().get().getHttpServletRequest().getSession().getServletContext().getRealPath("/upload")+ "\\" + fname;;
struts2的tag标签的用法
    <s:actionmessage/>
    <s:actionerror/>
   <s:form action="fileload" namespace="/fileload" method="post" theme="xhtml" enctype="multipart/form-data">
   <s:select label="文件类型:"
       name="filetype"
       headerKey="-1" headerValue="请选择文件类型"
       list="#{1:'网址',0:'关屏',4:'动画文件',5:'图片文件',6:'文本文件',7:'网页文件',13:'PPT文件',2:'文字',3:'FLASH文件'}"
       value=""
       required="true"
/>	

   <s:select list="%{#request.list}" listKey="no" listValue="name"></s:select>


   <s:file label="请选择要上传的文件" name="doc"></s:file>
   <s:submit value="上传"></s:submit>
   </s:form>
java配置环境变量的两种方法 java配置环境变量的两种方法
假设JDK安装路径:
E:\Program Files\Java\jdk1.6.0_05

以下的变量可以设置成用户变量,业可以设置成系统变量。他们的区别只是使用权限的问题而已。

第一种方法:
建立两个变量:
变量名:PATH
变量值:E:\Program Files\Java\jdk1.6.0_05\bin 

变量名:CLASSPATH
变量值:.;E:\Program Files\Java\jdk1.6.0_05\lib\tools.jar;E:\Program Files\Java\jdk1.6.0_05\jre\lib\dt.jar
【注意开头是句号加分好】


第二种方法:
建立三个环境变量
变量名:JAVA_HOME
变量值:E:\Program Files\Java\jdk1.6.0_05   注:JDK安装路径

变量名:PATH
变量值:%JAVA_HOME%\bin

变量名:CLASSPATH
变量值:.;%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\jre\lib\dt.jar
【注意开头是句号加分好】 
scheduleAtFixedRate()定时器
需要导入:
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;



		
		ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);
		timer.scheduleAtFixedRate(
				new Runnable(){
					public void run(){
						System.out.println("来了!");
						currentLamp =  currentLamp.blackOut();//当前灯变黑
					}
				}, 
				10,
				10,
				TimeUnit.SECONDS);
	
	       }
螺旋矩阵! 螺旋矩阵! 关于螺旋矩阵问题的新思路
public class Test {

    /**
     * Create date:May 3, 2011
     * Method name:main
     * Description: [螺旋问题]
     * return:void
     */
    public static void main(String[] args) {
        LX lx = new LX(3, 5);
        lx.print();
    }

}

class LX {

    private int col;

    private int row;

    private int[][] matrix;//二维数组

    private int count = 0;
    
    private boolean flag = true;//行列
    
    private int x = 1;//增减值

    public LX(int col, int row) {
        this.col = col;
        this.row = row;
        this.matrix = new int[col][row];
        turn();
    }

    public void print() {
        for (int[] i : matrix) {
            for (int j : i) {
                System.out.format("%3d", j);
            }
            System.out.println();
        }
    }

    public void turn() {
        int i = 0;
        int j = 0;
        int end = col * row;
        while (count < end) {
            matrix[i][j] = ++count;
            if (flag) {  
                j += x;  
                // 触边转向  
                if (j < 0 || j >= row || matrix[i][j] != 0) {  
                    j -= x;
                    flag = !flag;  
                    i += x;  
                }  
            } else {  
                i += x;  
                // 触边转向  
                if (i < 0 || i >= col || matrix[i][j] != 0) {  
                    i -= x;  
                    x *= -1;//纵方向到边界
                    flag = !flag;
                    j += x;
                }  
            }  
        }
    }
}
解决action跳转的路径还有中文参数的问题 解决action跳转的路径还有中文参数的问题
解决action跳转的路径还有中文参数的问题:
首先在actjion 对要传递的中文参数进行URLEncoder加码;
URLEncoder.encode("中文","UTF-8");

然后在页面上进行解码:
<%

URLDecoder.decode(new String(request.getParameter("username").getBytes("iso8859-1"),"utf-8"),"utf-8");

%>
重新加载javascript文件的方法! 重新加载, javascript, 加载js文件, 重新加载js文件

//重新加载js文件的方法(给js文件定个id)
			function reloadAbleJSFn(id,newJS){
				var oldjs = null; 
				var t = null; 
				var oldjs = document.getElementById(id); 
				if(oldjs) oldjs.parentNode.removeChild(oldjs); 
				var scriptObj = document.createElement("script"); 
				scriptObj.src = newJS; 
				scriptObj.type = "text/javascript"; 
				scriptObj.id   = id; 
				document.getElementsByTagName("head")[0].appendChild(scriptObj);
			}


	//重新加载正则表达式
				var jssrc = new Array();
				jssrc[0]="js/jquery-1.3.2.js";
				jssrc[1]="js/easy_validator.pack.js";
				jssrc[2]="js/jquery.bgiframe.min.js";
				for(i=0;i<jssrc.length;i++){
					reloadAbleJSFn(i,jssrc[i]);
				}
Struts2 的taglib 标签 struts2 的taglib 标签
<s:select id="selectList" list="#{'0':'航班号','1':'起飞地','2':'目的地','3':'起飞时间','4':'计划时间','5':'目的地','6':'目的地','7':'目的地','8':'目的地','9':'目的地','10':'目的地','11':'目的地','12':'目的地','13':'目的地','14':'目的地'}"   listKey="key" listValue="value" ></s:select>
java文件流 [转]java读取文件及文件流
import java.io.BufferedInputStream;
import java.io.File;
import java.io.BufferedOutputStream;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileOutputStream;

public class Util {

public Util() {
}
/** *//**
   * 读取源文件内容
   * @param filename String 文件路径
   * @throws IOException
   * @return byte[] 文件内容
   */
public static byte[] readFile(String filename) throws IOException ...{

    File file =new File(filename);
    if(filename==null || filename.equals(""))
    ...{
      throw new NullPointerException("无效的文件路径");
    }
    long len = file.length();
    byte[] bytes = new byte[(int)len];

    BufferedInputStream bufferedInputStream=new BufferedInputStream(new FileInputStream(file));
    int r = bufferedInputStream.read( bytes );
    if (r != len)
      throw new IOException("读取文件不正确");
    bufferedInputStream.close();

    return bytes;

}

/** *//**
   * 将数据写入文件
   * @param data byte[]
   * @throws IOException
   */
public static void writeFile(byte[] data,String filename) throws IOException ...{
    File file =new File(filename);
    file.getParentFile().mkdirs();
    BufferedOutputStream bufferedOutputStream=new BufferedOutputStream(new FileOutputStream(file));
    bufferedOutputStream.write(data);
    bufferedOutputStream.close();

}

/** *//**
   * 从jar文件里读取class
   * @param filename String
   * @throws IOException
   * @return byte[]
   */
public byte[] readFileJar(String filename) throws IOException ...{
    BufferedInputStream bufferedInputStream=new BufferedInputStream(getClass().getResource(filename).openStream());
    int len=bufferedInputStream.available();
    byte[] bytes=new byte[len];
    int r=bufferedInputStream.read(bytes);
    if(len!=r)
    ...{
      bytes=null;
      throw new IOException("读取文件不正确");
    }
    bufferedInputStream.close();
    return bytes;
}

/** *//**
   * 读取网络流,为了防止中文的问题,在读取过程中没有进行编码转换,而且采取了动态的byte[]的方式获得所有的 byte返回
   * @param bufferedInputStream BufferedInputStream
   * @throws IOException
   * @return byte[]
   */
public byte[] readUrlStream(BufferedInputStream bufferedInputStream) throws IOException ...{
    byte[] bytes = new byte[100];
    byte[] bytecount=null;
    int n=0;
    int ilength=0;
    while((n=bufferedInputStream.read(bytes))>=0)
    ...{
      if(bytecount!=null)
        ilength=bytecount.length;
      byte[] tempbyte=new byte[ilength+n];
      if(bytecount!=null)
      ...{
        System.arraycopy(bytecount,0,tempbyte,0,ilength);
      }

      System.arraycopy(bytes,0,tempbyte,ilength,n);
      bytecount=tempbyte;

      if(n<bytes.length)
        break;
    }
    return bytecount;
}

}
http://lveyo.iteye.com/blog/175705 http://lveyo.iteye.com/blog/175705
http://lveyo.iteye.com/blog/175705
JSON数据在javascript中的object
<script src=http://www.json.org/json2.js></script>
<script>
var obj = JSON.parse('{"添加新站点":"icon-addnew-site","系统设置":"icon-set","lovqq.cn":"icon-site","test_4.com":"icon-site","test_3.com":"icon-sitJe","test_2.com":"icon-site","test_1.com":"icon-site"}');
alert(obj.添加新站点);
</script>

------------------------------------------------------
或者
var a = null;
eval('a=' + jsonstr + ';');
debug调试详解 debug调试详解
1, 首先在一个java文件中设断点,然后运行,当程序走到断点处就会转到debug视图下,
2, F5键与F6键均为单步调试,F5是step into,也就是进入本行代码中执行,F6是step over,
   也就是执行本行代码,跳到下一行,
3,F7是跳出函数
4,F8是执行到最后。
////////////////////////////////////////////////
1.Step Into (also F5) 跳入
2.Step Over (also F6) 跳过
3.Step Return (also F7) 执行完当前method,然后return跳出此method
4.step Filter 逐步过滤 一直执行直到遇到未经过滤的位置或断点(设置Filter:window-preferences-java-Debug-step Filtering)
5.resume 重新开始执行debug,一直运行直到遇到breakpoint
6.hit count 设置执行次数  适合程序中的for循环(设置 breakpoint view-右键hit count)
7.inspect 检查 运算。执行一个表达式显示执行值
8.watch 实时地监视变量的变化
9.我们常说的断点(breakpoints)是指line breakpoints,除了line breakpoints,还有其他的断点类型:field(watchpoint)breakpoint,method breakpoint,exception breakpoint.
10.field breakpoint 也叫watchpoint(监视点) 当成员变量被读取或修改时暂挂
11.添加method breakpoint 进入/离开此方法时暂挂(Run-method breakpoint)
12.添加Exception breakpoint 捕抓到Execption时暂挂(待续...)
断点属性:
    1.hit count 执行多少次数后暂挂 用于循环
    2.enable condition 遇到符合你输入条件(为ture\改变时)就暂挂
    3.suspend thread 多线程时暂挂此线程
    4.suspend VM 暂挂虚拟机
13.variables 视图里的变量可以改变变量值,在variables 视图选择变量点击右键--change value.一次来进行快速调试。
14.debug 过程中修改了某些code后--〉save&build-->resume-->重新暂挂于断点 
jsp上得到action的绝对路径 jsp上得到action的绝对路径
新建一个jsp ,jsp类型为struts1.2/1.3, 然后把这个jsp页面上的<% taglib %>复制,放在要调用action的jsp里面。把新建的jsp删掉。 然后再这个jsp上写action的绝对路径时就写:
<html:rewrite action="/fbf/fbfAccountLogin" />
<form action="" method="post">
   <input type="text" name="account"/>
   <input type="text" name="password"/>
   <input type="submit" />
</form>

把<html:rewrite action="/fbf/fbfAccountLogin" />放在form的acton里
如:<form action="<html:rewrite action="/fbf/fbfAccountLogin" />" method="post"> 再把外面的<html:rewrite action="/fbf/fbfAccountLogin" />删掉
JNDI数据库连接池 jndi数据库连接池
 连接池一般情况下指数据库连接池,它的作用是将数据库连接池化,在池中时刻保持多个数据库连接,在程序需要连接数据库的时候,直接从连接池中取连接,而不去直接建立到数据库的连接,这样可以大大减少建立连接和断开连接的次数。从而减轻了数据库压力,同时也提高的应用程序的效率。   
 
 而JDBC,是Java   DataBase   Connection的简称,是java连接数据库的一种技术。目前,java只能通过jdbc来连接数据库。  
  
package com.accp.cbrc.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;

public class ConnUtil {

	private static BasicDataSource bds=null;
	
	private ConnUtil(){
		
	}
	
	private static BasicDataSource getBasicDataSource() {
		if (null == bds) {
			try {
				// 读取配置文件
				Properties prop = new Properties();
				prop.load(ConnUtil.class
						.getResourceAsStream("db_cfg.properties"));
//				prop.loadFromXML(ConnUtil.class
//						.getResourceAsStream("db_cfg.xml"));
				// 初始化连接池
				bds = new BasicDataSource();
				bds.setDriverClassName(prop.getProperty("driver"));
				bds.setUrl(prop.getProperty("url"));
				bds.setUsername(prop.getProperty("username"));
				bds.setPassword(prop.getProperty("password"));

				bds.setMaxActive(4);
				bds.setMaxIdle(4);
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return bds;
	}
	

	public static Connection getConnection() {
		Connection conn = null;
		try {
			conn = getBasicDataSource().getConnection();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	public static void closeConnection(Connection conn){
		try {
			if(conn!=null){
				conn.close();
				conn=null;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}	
	}
	
	public static void closePrepareStatement(PreparedStatement pst){
		try {
			if(pst!=null){
				pst.close();
			}	
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
	public  static void closeResultset(ResultSet rs){
		try {
			if(rs!=null){
				rs.close();
			}	
		} 
		catch (SQLException e) {
			e.printStackTrace();
		}
	}
}
用来获得到WEB-INF的路径 用来获得到web-inf的路径
package com.brit.cx.common;

import java.io.IOException;

public class Test {

	public static void main(String[] args) throws IOException {
		Util util = new Util();
		String path =getAddress()+"/lib/jdom.jar";
		System.out.println(path);
	}
	
	/**
	 * 用来获得到WEB-INF的路径
	 */
	 public static String getAddress(){
		  Class theClass = Test.class;
		  java.net.URL u = theClass.getResource("");
		//str会得到这个函数所在类的路径
		  String str = u.toString();
		//截去一些前面6个无用的字符
		  str=str.substring(6,str.length());
		//将%20换成空格(如果文件夹的名称带有空格的话,会在取得的字符串上变成%20)
		  str=str.replaceAll("%20", " ");
		//查找“WEB-INF”在该字符串的位置
		  int num = str.indexOf("WEB-INF");
		//截取即可
		  str=str.substring(0, num+"WEB-INF".length());
		  return str;
	 }
	 
}
键盘上的KeyCode 键盘上的keycode
    keycode    8 = BackSpace BackSpace
    keycode    9 = Tab Tab
    keycode   12 = Clear
    keycode   13 = Enter
    keycode   16 = Shift_L
    keycode   17 = Control_L
    keycode   18 = Alt_L
    keycode   19 = Pause
    keycode   20 = Caps_Lock
    keycode   27 = Escape Escape
    keycode   32 = space space
    keycode   33 = Prior
    keycode   34 = Next
    keycode   35 = End
    keycode   36 = Home
    keycode   37 = Left
    keycode   38 = Up
    keycode   39 = Right
    keycode   40 = Down
    keycode   41 = Select
    keycode   42 = Print
    keycode   43 = Execute
    keycode   45 = Insert
    keycode   46 = Delete
    keycode   47 = Help
    keycode   48 = 0 equal braceright
    keycode   49 = 1 exclam onesuperior
    keycode   50 = 2 quotedbl twosuperior
    keycode   51 = 3 section threesuperior
    keycode   52 = 4 dollar
    keycode   553 = 5 percent
    keycode   54 = 6 ampersand
    keycode   55 = 7 slash braceleft
    keycode   56 = 8 parenleft bracketleft
    keycode   57 = 9 parenright bracketright
    keycode   65 = a A
    keycode   66 = b B
    keycode   67 = c C
    keycode   68 = d D
    keycode   69 = e E EuroSign
    keycode   70 = f F
    keycode   71 = g G
    keycode   72 = h H
    keycode   73 = i I
    keycode   74 = j J
    keycode   75 = k K
    keycode   76 = l L
    keycode   77 = m M mu
    keycode   78 = n N
    keycode   79 = o O
    keycode   80 = p P
    keycode   81 = q Q at
    keycode   82 = r R
    keycode   83 = s S
    keycode   84 = t T
    keycode   85 = u U
    keycode   86 = v V
    keycode   87 = w W
    keycode   88 = x X
    keycode   89 = y Y
    keycode   90 = z Z
keycode   96 = KP_0 KP_0
    keycode   97 = KP_1 KP_1
    keycode   98 = KP_2 KP_2
    keycode   99 = KP_3 KP_3
    keycode 100 = KP_4 KP_4
    keycode 101 = KP_5 KP_5
    keycode 102 = KP_6 KP_6
    keycode 103 = KP_7 KP_7
    keycode 104 = KP_8 KP_8
    keycode 105 = KP_9 KP_9
    keycode 106 = KP_Multiply KP_Multiply
    keycode 107 = KP_Add KP_Add
    keycode 108 = KP_Separator KP_Separator
    keycode 109 = KP_Subtract KP_Subtract
    keycode 110 = KP_Decimal KP_Decimal
    keycode 111 = KP_Divide KP_Divide
    keycode 112 = F1
    keycode 113 = F2
    keycode 114 = F3
    keycode 115 = F4
    keycode 116 = F5
    keycode 117 = F6
    keycode 118 = F7
    keycode 119 = F8
    keycode 120 = F9
    keycode 121 = F10
    keycode 122 = F11
    keycode 123 = F12
    keycode 124 = F13
    keycode 125 = F14
    keycode 126 = F15
    keycode 127 = F16
    keycode 128 = F17
    keycode 129 = F18
    keycode 130 = F19
    keycode 131 = F20
    keycode 132 = F21
    keycode 133 = F22
    keycode 134 = F23
    keycode 135 = F24
    keycode 136 = Num_Lock
    keycode 137 = Scroll_Lock
    keycode 187 = acute grave
    keycode 188 = comma semicolon
    keycode 189 = minus underscore
    keycode 190 = period colon
    keycode 192 = numbersign apostrophe
    keycode 210 = plusminus hyphen macron
    keycode 211 =
    keycode 212 = copyright registered
    keycode 213 = guillemotleft guillemotright
    keycode 214 = masculine ordfeminine
    keycode 215 = ae AE
    keycode 216 = cent yen
    keycode 217 = questiondown exclamdown
    keycode 218 = onequarter onehalf threequarters
    keycode 220 = less greater bar
    keycode 221 = plus asterisk asciitilde
    keycode 227 = multiply division
    keycode 228 = acircumflex Acircumflex
    keycode 229 = ecircumflex Ecircumflex
    keycode 230 = icircumflex Icircumflex
    keycode 231 = ocircumflex Ocircumflex
    keycode 232 = ucircumflex Ucircumflex
    keycode 233 = ntilde Ntilde
    keycode 234 = yacute Yacute
    keycode 235 = oslash Ooblique
    keycode 236 = aring Aring
    keycode 237 = ccedilla Ccedilla
    keycode 238 = thorn THORN
    keycode 239 = eth ETH
    keycode 240 = diaeresis cedilla currency
    keycode 241 = agrave Agrave atilde Atilde
    keycode 242 = egrave Egrave
    keycode 243 = igrave Igrave
    keycode 244 = ograve Ograve otilde Otilde
    keycode 245 = ugrave Ugrave
    keycode 246 = adiaeresis Adiaeresis
    keycode 247 = ediaeresis Ediaeresis
    keycode 248 = idiaeresis Idiaeresis
    keycode 249 = odiaeresis Odiaeresis
    keycode 250 = udiaeresis Udiaeresis
    keycode 251 = ssharp question backslash
    keycode 252 = asciicircum degree
    keycode 253 = 3 sterling
    keycode 254 = Mode_switch
Global site tag (gtag.js) - Google Analytics