﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-无涯-文章分类-java</title><link>http://www.blogjava.net/koradji/category/38083.html</link><description /><language>zh-cn</language><lastBuildDate>Thu, 26 May 2011 21:02:17 GMT</lastBuildDate><pubDate>Thu, 26 May 2011 21:02:17 GMT</pubDate><ttl>60</ttl><item><title>RMI中的对象传递</title><link>http://www.blogjava.net/koradji/articles/351135.html</link><dc:creator>koradji</dc:creator><author>koradji</author><pubDate>Thu, 26 May 2011 15:51:00 GMT</pubDate><guid>http://www.blogjava.net/koradji/articles/351135.html</guid><wfw:comment>http://www.blogjava.net/koradji/comments/351135.html</wfw:comment><comments>http://www.blogjava.net/koradji/articles/351135.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/koradji/comments/commentRss/351135.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/koradji/services/trackbacks/351135.html</trackback:ping><description><![CDATA[对于RMI的远程接口方法来说，传入参数或返回值可以是任何类型，包括本地对象，远程对象以及原始数据类型。更准确地说，任何类型的任何实体（可理解为类和对象的关系）都能被传入或传出远程方法，只要该实体是以下类型的实例：原始数据类型，远程对象，或者可串行化对象，即实现了接口java.io.Serializable。<br />但是有些对象类型却不满足以上这些要求，因而不能被传入或传出。比如，线程或者文件描述符（还有inputstream，outputstream对象），因为封装了仅仅存在于单一地址空间的信息，这样便无法通过RMI传递。另外许多核心类，包括位于java.lang和java.util包下的类都是实现了Serializable接口的。<br />怎样传递参数和返回值的规则，介绍如下：<br />1.远程对象是引用传递。<br />这个引用就是位于client端的stub，起着代理的作用，远程对象实现了的远程接口，作为代理的stub也全部实现；<br />2.本地对象是值传递，即拷贝。<br />缺省的话，所有的属性都会被拷贝，除了标示为static或transient的属性之外。这种缺省行为是可以在类里被覆盖的。<br />远程对象的引用传递意味着对远程方法调用的对象的状态所作的任何改变都将反映到该stub所对应的远程对象上去。当一个远程对象被传递时，接受者只能看到远程接口里定义的方法，而不能看到远程对象里定义的本地方法。<br />本地对象的值传递意味着任何对接受者的对象的状态的改变都不会影响到发送者那里的对象，反之亦然。<img src ="http://www.blogjava.net/koradji/aggbug/351135.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/koradji/" target="_blank">koradji</a> 2011-05-26 23:51 <a href="http://www.blogjava.net/koradji/articles/351135.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>构建一个简单的RMI应用程序</title><link>http://www.blogjava.net/koradji/articles/344785.html</link><dc:creator>koradji</dc:creator><author>koradji</author><pubDate>Mon, 21 Feb 2011 15:30:00 GMT</pubDate><guid>http://www.blogjava.net/koradji/articles/344785.html</guid><wfw:comment>http://www.blogjava.net/koradji/comments/344785.html</wfw:comment><comments>http://www.blogjava.net/koradji/articles/344785.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/koradji/comments/commentRss/344785.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/koradji/services/trackbacks/344785.html</trackback:ping><description><![CDATA[第一步，创建remote接口：<br />
&nbsp;&nbsp;&nbsp; 定义接口extends Remote；<br />
&nbsp;&nbsp;&nbsp; 定义接口方法，注意需要throws RemoteException；<br />
<br />
第二步，实现remote接口：<br />
&nbsp;&nbsp;&nbsp; 实现接口里定义的各个方法；<br />
&nbsp;&nbsp;&nbsp; (optional)定义本地方法，即未在接口里定义的方法，client端看不到；<br />
&nbsp;&nbsp;&nbsp; 定义static main方法，这里需要实现下列几步：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.setSecurityManager(new RMISecurityManager()); //创建并安装安全管理器<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得args[0]参数，实例化remote类obj；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Naming.rebind(args[0], obj); //绑定名字和对象<br />
<br />
第三步，创建客户端类：<br />
&nbsp;&nbsp;&nbsp; 主要就是定义static main方法，这里需要实现下列几步：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 取得args[0]指定的server名字；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 用Naming.lookup(server名字)查找绑定的对象obj；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 调用obj的各个方法，就像本地调用一样；<br />
<br />
第四步，创建policy文件，例如，创建rmi.policy文件：<br />
&nbsp;&nbsp;&nbsp; grant {<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; // Allow everything for now<br />
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; permission java.security.AllPermission;<br />
&nbsp;&nbsp;&nbsp; };<br />
&nbsp;&nbsp;&nbsp; 注意，以上仅是用作练习。<br />
<br />
第五步，启动rmiregistry：<br />
&nbsp;&nbsp;&nbsp; 在dos窗口下，输入：start rmiregistry(回车)<br />
&nbsp;&nbsp;&nbsp; 会弹出新窗口，表示正在运行rmiregistry；<br />
&nbsp;&nbsp;&nbsp; <strong><span style="color: red;">注意！一定要在remote类所在的目录下执行该命令。</span></strong><br />
<br />
第六步，启动server端程序：<br />
&nbsp;&nbsp;&nbsp; 输入命令：java server名 -Djava.security.policy="policy完整路径名"<br />
<br />
第七步，启动client端程序：<br />
&nbsp;&nbsp;&nbsp; 输入命令：java server名<br />
<br />
现在就可以看到client-server间的通讯了。<br />
<br />
<span style="background-color: yellow;">补充：实际测试发现，用一个helper对象封装所有需要传给remote类的方法参数，比起一个个参数传递性能要好很多。<br />
helper对象一定要implements Serializable接口。</span><br />
<br />
<br />
<img src ="http://www.blogjava.net/koradji/aggbug/344785.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/koradji/" target="_blank">koradji</a> 2011-02-21 23:30 <a href="http://www.blogjava.net/koradji/articles/344785.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java命令行报错：NoClassDefFoundError的解决</title><link>http://www.blogjava.net/koradji/articles/343371.html</link><dc:creator>koradji</dc:creator><author>koradji</author><pubDate>Sat, 22 Jan 2011 04:40:00 GMT</pubDate><guid>http://www.blogjava.net/koradji/articles/343371.html</guid><wfw:comment>http://www.blogjava.net/koradji/comments/343371.html</wfw:comment><comments>http://www.blogjava.net/koradji/articles/343371.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/koradji/comments/commentRss/343371.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/koradji/services/trackbacks/343371.html</trackback:ping><description><![CDATA[一直在eclipse下开发java应用，对java命令行的使用很是生疏。今天，在命令行窗口编译简单的java文件时遇到麻烦，化了不少时间才解决。<br />
1.一个java文件里会引用另一个java文件，两个文件在同一个目录下，但是却总是报告说符号变量找不到。<br />
后来，在命令行中使用：<span style="color: #0010ff;">javac -sourcepath 指定另一个文件的路径 java文件</span><br />
问题解决了。<br />
<br />
2.接着在执行java程序时又报错：NoClassDefFoundError，可是明明两个class文件都在，这是为什么呢？<br />
后来，查了google才明白，原来是classpath里一定要在路径上加上&#8220;<span style="color: #0010ff;"><span style="color: #0010ff;"><span style="color: #0010ff;">.</span>;</span></span>&#8221;，漏掉这个小小的点就会报这种错误。<br />
<br />
环境问题，路径问题这些总是让java开发者抓狂:)<br />
<br />
<img src ="http://www.blogjava.net/koradji/aggbug/343371.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/koradji/" target="_blank">koradji</a> 2011-01-22 12:40 <a href="http://www.blogjava.net/koradji/articles/343371.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2中有关国际化的应用</title><link>http://www.blogjava.net/koradji/articles/307755.html</link><dc:creator>koradji</dc:creator><author>koradji</author><pubDate>Wed, 30 Dec 2009 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/koradji/articles/307755.html</guid><wfw:comment>http://www.blogjava.net/koradji/comments/307755.html</wfw:comment><comments>http://www.blogjava.net/koradji/articles/307755.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/koradji/comments/commentRss/307755.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/koradji/services/trackbacks/307755.html</trackback:ping><description><![CDATA[<strong><u>资源文件的定义：<br />
</u></strong>在struts2里，资源文件被分成了三个级别：类级别，包级别，全局级别。<br />
执行时，将按照从小到大的顺序依次搜索资源文件里的key值，直至找到。<br />
类级别的文件名定义：Action类名_语言码_国家码.properties，比如：LoginAction_en_US.properties，LoginAction_zh_CN.properties；<br />
如果是在全局中定义资源文件，则需要在struts.xml里配置，例子：&lt;constant name="struts.custom.i18n.resources" value="message" /&gt;，其中message为资源文件的起始名；<br />
全局资源文件的位置在src\下。<br />
<br />
<strong><u>如何写中文的资源文件：<br />
</u></strong>对于用于中文显示的资源文件，以前需要使用java自带的native2ascii.exe将中文内容转换成对应的unicode，比较麻烦，而现在可以使用eclipse的插件自动转换。<br />
eclipse插件：<span style="background-color: yellow">propertieEdit</span>(一款由日本人开发的开源插件，可直接输入中文，自动转换)<br />
本地下载link：<a href="/Files/koradji/propertieEdit.zip">/Files/koradji/propertieEdit.zip</a><br />
下载后，将里面的目录拷贝到eclipse下对应的目录里，重新启动eclipse就可以了。(可能需要在启动命令里加上-clean)。<br />
<br />
<strong><u>在jsp里读取资源文件的方法：</u></strong><br />
画面上的文字采用&lt;s:text name="key" /&gt;写；<br />
其他的，比如按钮的value，textfield的label等采用&lt;%{getText('key')}&gt;写，例子：&lt;s:submit action="confirm" value="%{getText('confirm.button.label')}" /&gt; ；<br />
或者，也可以使用这样的写法：&lt;s:textfield name="username" <span style="background-color: yellow">key</span>="page.index.text.username"&gt;&lt;/s:textfield&gt;<br />
使用&lt;s:i18n&gt;可以指定临时的资源文件，<br />
例子1：<br />
&nbsp;&nbsp;&nbsp; &lt;s:i18n name="temp"&gt;&nbsp; ----- baseName对应名称的资源文件名<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:text name="info"&gt;&nbsp; ----- info为资源文件中的key<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:param&gt;张三&lt;/s:param&gt;&nbsp; ---- 指定第一个参数&nbsp; {0}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:param&gt;23&lt;/s:param&gt;&nbsp;&nbsp;&nbsp;&nbsp; ---- 指定第二个参数&nbsp; {1}<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/s:text&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/s:i18n&gt;<br />
例子2：<br />
&nbsp;&nbsp;&nbsp; &lt;s:i18n name="org.scorpio.jh.struts2.i18n.web.action.LoginAction"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:text name="page.index.text.username"&gt;&lt;/s:text&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;s:text name="page.index.text.password"&gt;&lt;/s:text&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/s:i18n&gt;<br />
没有实际应用过，猜测可能是在页面上指定某个区域可以显示与default locale不同的语言文字？<br />
<br />
<strong><u>在java里读取资源文件的方法：</u></strong><br />
Action类里(需要继承ActionSupport)，使用getText(String key)方法就能取得资源文件里的值；<br />
Business Services类里，使用ResourceBundle.getBundle(资源文件名).getString(key)方法取得值；<br />
<br />
<strong><u>如何切换画面语言：</u></strong><br />
在jsp里，在适当的位置放入下面的代码：<br />
&lt;s:url id="url" action="UnsubscribeNL_language"&gt;<br />
&nbsp;&nbsp;&nbsp; &nbsp;&lt;s:param name="<span style="background-color: yellow">request_locale</span>"&gt;en_US&lt;/s:param&gt;<br />
&lt;/s:url&gt;<br />
&lt;s:a href="%{url}"&gt;English&lt;/s:a&gt;&lt;br&gt;<br />
&lt;s:url id="url" action="UnsubscribeNL_language"&gt;<br />
&nbsp;&nbsp; &nbsp;&nbsp;&lt;s:param name="<span style="background-color: yellow">request_locale</span>"&gt;zh_CN&lt;/s:param&gt;<br />
&lt;/s:url&gt;<br />
&lt;s:a href="%{url}"&gt;简体中文&lt;/s:a&gt;<br />
在发送请求时，struts会搜索拦截request_locale变量，并将该变量值设为default locale；<br />
在Action类里加入一个方法：public String language()，运行初始化返回本画面即可；<br />
 <img src ="http://www.blogjava.net/koradji/aggbug/307755.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/koradji/" target="_blank">koradji</a> 2009-12-30 15:17 <a href="http://www.blogjava.net/koradji/articles/307755.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2的s:checkboxlist标签学习</title><link>http://www.blogjava.net/koradji/articles/307399.html</link><dc:creator>koradji</dc:creator><author>koradji</author><pubDate>Sat, 26 Dec 2009 16:16:00 GMT</pubDate><guid>http://www.blogjava.net/koradji/articles/307399.html</guid><wfw:comment>http://www.blogjava.net/koradji/comments/307399.html</wfw:comment><comments>http://www.blogjava.net/koradji/articles/307399.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/koradji/comments/commentRss/307399.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/koradji/services/trackbacks/307399.html</trackback:ping><description><![CDATA[struts2里增加了一个新的UT标签s:checkboxlist，下面介绍下使用方法。<br />
s:checkboxlist用于画面上显示一组复选框，缺省是横排输出，后面将介绍如何修改ftl文件使得它能按任意方式输出。<br />
<strong><u>标签格式：</u></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:checkboxlist name="" list="" listKey="" listValue="" value="" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;name-定义标签名，用于接收画面上选中的复选框，故应与Action里定义的属性一致，且多为数组；<br />
&nbsp;&nbsp;&nbsp;&nbsp;list-定义集合变量，用于输出复选框到画面上，一般在Action里定义一个List或Map属性；<br />
&nbsp;&nbsp;&nbsp;&nbsp;listKey-如果在Action里定义的是一个List，则往往会在List里定义一个Bean，它只有两个属性，其中一个(比如id)就在这里设置；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果在Action里定义的是一个Map，则Map的key就在这里设置；<br />
&nbsp;&nbsp;&nbsp;&nbsp;listValue-如果在Action里定义的是一个List，则往往会在List里定义一个Bean，它只有两个属性，另外一个(比如name)就在这里设置；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果在Action里定义的是一个Map，则Map的value就在这里设置；<br />
&nbsp;&nbsp;&nbsp;&nbsp;value-用于回显画面上被选中的复选框，假如画面有输入检查，如果有错则返回原画面并显示出错信息，这时候就需要使用它。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般把它设成和name一致就可以了。<br />
<strong><u>注意点：</u></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;为了能正确显示已被选中的复选框，一定要使得name的数组类型与listKey的类型一致。<br />
&nbsp;&nbsp;&nbsp;&nbsp;比如，name设成String[] users，则listKey就要设成String id；如果name设成Integer[] users，则listKey就要设成Integer id；<br />
<strong><u>修改ftl文件改变输出方式：</u></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;1.搜索struts2-core-xxx.jar，找到checkboxlist.ftl文件，拷贝出来；<br />
&nbsp;&nbsp;&nbsp;&nbsp;2.在自己的工程的src下新建template.simple包，放置上述文件；<br />
&nbsp;&nbsp;&nbsp;&nbsp;3.用文本编辑器打开该文件，修改成自己希望输出的格式，保存，OK；<br />
<strong><u>例子：</u></strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff">希望画面上每3个复选框输出为一行。</span><br />
&lt;#--<br />
/*<br />
&nbsp;* $Id: checkboxlist.ftl 804072 2009-08-14 03:16:35Z musachy $<br />
&nbsp;*<br />
&nbsp;* Licensed to the Apache Software Foundation (ASF) under one<br />
&nbsp;* or more contributor license agreements.&nbsp; See the NOTICE file<br />
&nbsp;* distributed with this work for additional information<br />
&nbsp;* regarding copyright ownership.&nbsp; The ASF licenses this file<br />
&nbsp;* to you under the Apache License, Version 2.0 (the<br />
&nbsp;* "License"); you may not use this file except in compliance<br />
&nbsp;* with the License.&nbsp; You may obtain a copy of the License at<br />
&nbsp;*<br />
&nbsp;*&nbsp; http://www.apache.org/licenses/LICENSE-2.0<br />
&nbsp;*<br />
&nbsp;* Unless required by applicable law or agreed to in writing,<br />
&nbsp;* software distributed under the License is distributed on an<br />
&nbsp;* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<br />
&nbsp;* KIND, either express or implied.&nbsp; See the License for the<br />
&nbsp;* specific language governing permissions and limitations<br />
&nbsp;* under the License.<br />
&nbsp;*/<br />
--&gt;<br />
&lt;#assign itemCount = 0/&gt;<br />
&lt;#if parameters.list?exists&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;@s.iterator value="parameters.list"&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span style="background-color: yellow">&lt;#assign itemCount = itemCount + 1/&gt;</span><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#if parameters.listKey?exists&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#assign itemKey = stack.findValue(parameters.listKey)/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#else&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#assign itemKey = stack.findValue('top')/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/#if&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#if parameters.listValue?exists&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#assign itemValue = stack.findString(parameters.listValue)/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#else&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#assign itemValue = stack.findString('top')/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/#if&gt;<br />
&nbsp;&lt;#assign itemKeyStr=itemKey.toString() /&gt;<br />
<span style="background-color: yellow">&nbsp;&lt;#if (itemCount-1)%3 == 0&gt;<br />
</span><span style="background-color: yellow">&nbsp;&lt;tr&gt;<br />
</span><span style="background-color: yellow">&nbsp;&lt;/#if&gt;<br />
&nbsp;&lt;td&gt;</span><br />
&nbsp;&lt;input type="checkbox" name="${parameters.name?html}" value="${itemKeyStr?html}" id="${parameters.name?html}-${itemCount}"&lt;#rt/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#if tag.contains(parameters.nameValue, itemKey)&gt;<br />
&nbsp; checked="checked"&lt;#rt/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/#if&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#if parameters.disabled?default(false)&gt;<br />
&nbsp; disabled="disabled"&lt;#rt/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/#if&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#if parameters.title?exists&gt;<br />
&nbsp; title="${parameters.title?html}"&lt;#rt/&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/#if&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#include "/${parameters.templateDir}/simple/scripting-events.ftl" /&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;#include "/${parameters.templateDir}/simple/common-attributes.ftl" /&gt;<br />
&nbsp;/&gt;<br />
&nbsp;&lt;label for="${parameters.name?html}-${itemCount}" class="checkboxLabel"&gt;${itemValue?html}&lt;/label&gt;<br />
<span style="background-color: yellow">&nbsp;&lt;/td&gt;<br />
&nbsp;&lt;#if itemCount%3 == 0&gt;<br />
&nbsp;&lt;/tr&gt;</span><br />
&nbsp;&lt;/#if&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp; &lt;/@s.iterator&gt;<br />
&lt;/#if&gt;<br />
&lt;input type="hidden" id="__multiselect_${parameters.id?html}" name="__multiselect_${parameters.name?html}" value=""&lt;#rt/&gt;<br />
&lt;#if parameters.disabled?default(false)&gt;<br />
&nbsp;disabled="disabled"&lt;#rt/&gt;<br />
&lt;/#if&gt;<br />
&nbsp;/&gt; <br />
<br />
<br />
<br />
 <img src ="http://www.blogjava.net/koradji/aggbug/307399.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/koradji/" target="_blank">koradji</a> 2009-12-27 00:16 <a href="http://www.blogjava.net/koradji/articles/307399.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>zip file</title><link>http://www.blogjava.net/koradji/articles/257853.html</link><dc:creator>koradji</dc:creator><author>koradji</author><pubDate>Wed, 04 Mar 2009 10:48:00 GMT</pubDate><guid>http://www.blogjava.net/koradji/articles/257853.html</guid><wfw:comment>http://www.blogjava.net/koradji/comments/257853.html</wfw:comment><comments>http://www.blogjava.net/koradji/articles/257853.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/koradji/comments/commentRss/257853.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/koradji/services/trackbacks/257853.html</trackback:ping><description><![CDATA[<p>/*==============================================================================<br />
&nbsp;*ZIP嶌惉僣乕儖<br />
&nbsp;=============================================================================*/<br />
import java.io.BufferedInputStream;<br />
import java.io.File;<br />
import java.io.FileInputStream;<br />
import java.io.FileOutputStream;<br />
import java.util.zip.CRC32;<br />
import java.util.zip.CheckedOutputStream;<br />
&nbsp; <br />
import java.util.zip.ZipEntry;<br />
import java.util.zip.ZipOutputStream;<br />
&nbsp; <br />
public class ZipCompressor {<br />
&nbsp;&nbsp;&nbsp; static final int BUFFER = 8192;<br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; private File zipFile;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public ZipCompressor(String pathName) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zipFile = new File(pathName);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; public void compress(String srcPathName) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File file = new File(srcPathName);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!file.exists())&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException(srcPathName + "懚嵼偟側偄");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FileOutputStream fileOutputStream = new FileOutputStream(zipFile);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new CRC32());&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipOutputStream out = new ZipOutputStream(cos);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String basedir = "";&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compress(file, out, basedir);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.close();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException(e);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; private void compress(File file, ZipOutputStream out, String basedir) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /* 僨傿儗僋僩儕偲偐僼傽僀儖偲偐偦傟偧傟張棟偟傑偡 */&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (file.isDirectory()) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("埑弅丗" + basedir + file.getName());&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.compressDirectory(file, out, basedir);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("埑弅丗" + basedir + file.getName());&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; this.compressFile(file, out, basedir);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; /** 僨傿儗僋僩儕傪埑弅 */&nbsp; <br />
&nbsp;&nbsp;&nbsp; private void compressDirectory(File dir, ZipOutputStream out, String basedir) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!dir.exists())&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File[] files = dir.listFiles();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; files.length; i++) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; compress(files[i], out, basedir + dir.getName() + "/");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp; <br />
&nbsp;&nbsp;&nbsp; /** 暥審傪埑弅 */&nbsp; <br />
&nbsp;&nbsp;&nbsp; private void compressFile(File file, ZipOutputStream out, String basedir) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!file.exists()) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedInputStream bis = new BufferedInputStream(&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; new FileInputStream(file));&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ZipEntry entry = new ZipEntry(basedir + file.getName());&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.putNextEntry(entry);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int count;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; byte data[] = new byte[BUFFER];&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while ((count = bis.read(data, 0, BUFFER)) != -1) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; out.write(data, 0, count);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; bis.close();&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } catch (Exception e) {&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; throw new RuntimeException(e);&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br />
}&nbsp; </p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/koradji/aggbug/257853.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/koradji/" target="_blank">koradji</a> 2009-03-04 18:48 <a href="http://www.blogjava.net/koradji/articles/257853.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>