﻿<?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/connie/category/43971.html</link><description>JAVA</description><language>zh-cn</language><lastBuildDate>Sat, 23 Oct 2010 23:14:21 GMT</lastBuildDate><pubDate>Sat, 23 Oct 2010 23:14:21 GMT</pubDate><ttl>60</ttl><item><title>关于 ANT脚本的编写技巧</title><link>http://www.blogjava.net/connie/articles/327194.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Tue, 27 Jul 2010 02:32:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/327194.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/327194.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/327194.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/327194.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/327194.html</trackback:ping><description><![CDATA[<div class="blog_title" style="margin-bottom: 15px; font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">关键字: java ant build</div>
<div class="blog_content" style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">现在build有几种选择，用得最多恐怕还是ANT，当然Maven异军突起。有赶超前辈之势，虽然看资料说Maven多优秀，解决了ANT的问题（但是也带来新的问题），但是，我还是喜欢ANT.&nbsp;<br />
<br />
使用ANT一定要写build脚本，就是build.xml。 但是&#8220;简单&#8221;的脚本也有很多学问。还是在老外的严谨的&#8220;治技术&#8221;的思想下才认识到的。把我自己体会记录在这里。&nbsp;<br />
<br />
下面给出一个例子:&nbsp;</div>
<div class="blog_content" style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; "><span style="font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; font-weight: bold; ">Build.xml代码</span></div>
<div class="blog_content" style="font-family: Arial, sans-serif, Helvetica, Tahoma; font-size: 12px; line-height: 18px; ">
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">project&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">project</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">default</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">dist</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;basedir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;environment</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">env</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">root</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">.</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">condition&nbsp;property</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">isUnix</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">os&nbsp;family</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">unix</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">condition</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">condition&nbsp;property</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">isWindows</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">os&nbsp;family</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">windows</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">condition</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">condition&nbsp;property</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">systempropsfile</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;value</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${basedir}/unixbuild.properties</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #0000FF; ">else</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${basedir}/build.properties</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">os&nbsp;family</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">unix</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">condition</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">property&nbsp;file</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${systempropsfile}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">path&nbsp;id</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">build.path</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">fileset&nbsp;dir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${web.library.dir}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">include&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">**/*.jar</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">fileset</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">path</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">target&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">init</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;description</span><span style="color: #000000; ">=</span><span style="color: #000000; ">""</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">echo&nbsp;message</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">####&nbsp;&nbsp;&nbsp;S&nbsp;T&nbsp;A&nbsp;R&nbsp;T&nbsp;SAMPLE&nbsp;BUILDING&nbsp;&nbsp;&nbsp;####</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">tstamp&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">echo&nbsp;message</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Started&nbsp;on&nbsp;${TODAY}&nbsp;at&nbsp;${TSTAMP}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">echo&nbsp;message</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">The&nbsp;base&nbsp;directory:&nbsp;${basedir}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">echo&nbsp;message</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">Using&nbsp;properties&nbsp;file:&nbsp;${systempropsfile}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">target</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">target&nbsp;name</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">clean</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;depends</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">init</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">delete&nbsp;dir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${dist.dir}/${project.war}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">delete&nbsp;dir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${build.dir}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">mkdir&nbsp;dir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${dist.dir}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;</span><span style="color: #000000; ">mkdir&nbsp;dir</span><span style="color: #000000; ">=</span><span style="color: #000000; ">"</span><span style="color: #000000; ">${build.dir}</span><span style="color: #000000; ">"</span><span style="color: #000000; ">&nbsp;</span><span style="color: #000000; ">/&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">target</span><span style="color: #000000; ">&gt;</span><span style="color: #000000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />..<br />
<img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" /><img src="http://www.blogjava.net/Images/dot.gif" alt="" />..<br />
<br />
</span><span style="color: #000000; ">&lt;/</span><span style="color: #000000; ">project</span><span style="color: #000000; ">&gt;<br />
</span></div>
<div style="background-color: #eeeeee; font-size: 13px; border-left-color: #cccccc; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; padding-top: 4px; width: 98%; word-break: break-all; "><span style="color: #000000; "><span  style="font-size: 12px; ">1. 首先说第一行: 项目名称，这个最好用一个比较有意义的名字。而basedir变量是ANT的默认变量，指build.xml的绝对路径。 当然不写也可以直接使用，但是仍然建议显式的定义一下比较好。&nbsp;<br />
2. 5~11行是处理不同平台的不同情况。如果脚本里针对不同平台调用不同的其他的脚本，这几行就很有必要了。&nbsp;<br />
3. 13~16行，还是处理不同平台的情况，但是只针对properties文件，之所以有properties文件，是因为我们在不同平台下必须指定不同的目录。如果我在windows下可以指定c:/dev/project目录做为build目录，而且在linux下就不应该这么指定.所以必须加载不同的properties文件，有时在linux下还要考虑目录权限问题,如果想修改目录，把这些目录变量集中放在一个properties目录里找起来也很方便。&nbsp;<br />
4. 24~30行，显示一些提示信息，这当然不是必须的，但却是必要的。例如我这里就显示日期和当前使用的properties文件。这些信息对于生成日志和检查错误很有用。&nbsp;<br />
5. 32~37行，是清除以前产生的文件，在一次build开始一般都有清除的工作要做，所以一般的build里都有这个target.这里面有一个技巧，就是为什么不直接删除目录，还是先删除文件，再删除目录呢？是不是多此一举呢？ 不是！因为很有可能这个目录是不能删除的，而文件一般都是可以删除的，你马上是可以产生出来文件。但是目录就不同了，可能有些目录你不可控的情况出现。只要删除文件一般也就够了。&nbsp;<br />
6. 后面的target就根据自己的需要处理吧，一般没有什么好说的。&nbsp;</span></span></div>
</div>
<img src ="http://www.blogjava.net/connie/aggbug/327194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-07-27 10:32 <a href="http://www.blogjava.net/connie/articles/327194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jar/war/ear包的区别</title><link>http://www.blogjava.net/connie/articles/327188.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Tue, 27 Jul 2010 01:59:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/327188.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/327188.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/327188.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/327188.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/327188.html</trackback:ping><description><![CDATA[<span  style="color: #4a0000; font-family: Arial, Helvetica, sans-serif; font-size: 14px; line-height: 22px; "><span style="line-height: 22px; color: #009902; ">经常在我们Java Web项目中看到jar/war/ear这几种文件类型，它们之间有何不同之处呢？我查了一些资料归纳整理如下：</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">jar/war /ear三种文件，在文件结构上，三者并没有什么不同，它们都采用zip或jar档案文件压缩格式。但是它们的使用目的有所区别：</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">　　 Jar文件（扩展名为. Jar）包含Java类的普通库、资源（resources）、辅助文件 （auxiliary files）等</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">　　 War文件（扩展名为.War）包含全部Web应用程序。在这种情形下，一个Web应用程序被定义为单独的 一组文件、类和资源，用户可以对jar文件进行封装，并把它作为小型服务程序（servlet）来访问。</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">　　 Ear文件（扩展名为.Ear）包含全部企业应用程序。在这种情形下，一个企业应用程序被定义为多个jar 文件、资源、类和Web应用程序的集合。</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">　　每 一种文件（.jar, .war, .ear）只能分别由应用服务器（application servers）、小型服务程序容器（servlet containers）、EJB容器（EJB containers）等进行处理。</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">&nbsp; JAR WAR EAR &nbsp;</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">&nbsp; 英文 Java&nbsp;&nbsp; Archive&nbsp;&nbsp; file ; Web&nbsp;&nbsp; Archive&nbsp;&nbsp; file Enterprise&nbsp;&nbsp; Archive&nbsp;&nbsp; file &nbsp;</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">&nbsp; jar:包含内容 class、properties文件，是文件封装的最小单元; war:Servlet、JSP页面、JSP标记库、JAR库文件、HTML/XML文档和其他公用资源文件，如图片、音频文件等;ear:除了包含 JAR、WAR以外，还包括EJB组件 &nbsp;</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">&nbsp; 部署文件 application-client.xml web.xml application.xml &nbsp;</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">&nbsp; 级别 小 中 大 &nbsp;</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">&nbsp; jar:封装类&nbsp;&nbsp;&nbsp; war:封装web站点&nbsp;&nbsp;&nbsp; ear:可以封装ejb &nbsp;</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">JAR</span>: Software developers generally use .jar files to distribute Java applications or libraries, in the form. of classes and associated metadata and resources (text, images, etc.) JAR files build on the ZIP file format.</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">WAR</span>: In computing, a WAR file (which stands for "web application archive" ) is a JAR file used to distribute a collection of JavaServer Pages, servlets, Java classes, XML files, tag libraries and static Web pages (HTML and related files) that together constitute a Web application.</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">EAR</span>: An Enterprise ARchive, or EAR, is a file format used by Java EE for packaging on<wbr style="line-height: 22px; ">e or more modules into a single archive so that the deployment of the various modules on<wbr style="line-height: 22px; ">to an application server happens simultaneously and coherently. It also contains XML files called deployment descriptors which describe how to deploy the modules. Maven or Ant can be used to build EAR files.</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">RAR</span>: A Resource Adapter is an archive file format defined in the J2EE Connector Architecture (JCA) specification. A Resource Adapter aRchive (RAR) file is the valid format for deployment of resource adapters on application servers. J2EE RAR files may also be called connectors.</span><br style="line-height: 22px; color: #009902; " />
<br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; ">其他概念：</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">EJB</span>: Enterprise JavaBeans (EJB) is a managed, server-side component architecture for modular construction of enterprise applications. The EJB specification is on<wbr style="line-height: 22px; ">e of several Java APIs in the Java EE. EJB is a server-side model that encapsulates the business logic of an application.</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">JavaBean</span>: JavaBeans are reusable software components for Java that can be manipulated visually in a builder tool. Practically, they are classes written in the Java programming language conforming to a particular convention. They are used to encapsulate many objects into a single object (the bean), so that they can be passed around as a single bean object instead of as multiple individual objects. A JavaBean is a Java Object that is serializable, has a nullary constructor, and allows access to properties using getter and setter methods.</span><br style="line-height: 22px; color: #009902; " />
<span style="line-height: 22px; color: #009902; "><span style="line-height: 22px; font-weight: bold; ">Metadata</span>: Metadata is a means to describe the da<wbr style="line-height: 22px; ">ta files.It provides information about a certain item's content, such as: means of creation, purpose of the da<wbr style="line-height: 22px; ">ta, time and date of creation, creator or author of da<wbr style="line-height: 22px; ">ta, placement on a network (electronic form) where the da<wbr style="line-height: 22px; ">ta was created, what standards used (ISO9000), etc.&nbsp;</span></span>
<img src ="http://www.blogjava.net/connie/aggbug/327188.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-07-27 09:59 <a href="http://www.blogjava.net/connie/articles/327188.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>收藏</title><link>http://www.blogjava.net/connie/articles/325342.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Tue, 06 Jul 2010 02:12:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/325342.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/325342.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/325342.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/325342.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/325342.html</trackback:ping><description><![CDATA[http://www.docin.com&nbsp;<br />
http://www.sharejs.com<br />
http://www.webjx.com/<br />
http://www.sucai.com/<br />
http://www.webjx.com/web/xindejiqiao-23626.html<br />
http://www.aa25.cn/<br />
http://www.fusioncharts.com/free/gallery/&nbsp;&nbsp;&nbsp;http://www.zhuoda.org/lunzi/107994.html<br />
http://www.cssrain.cn/<br />
<div><br />
英文：</div>
<div>www.ajaxrain.com/<br />
http://www.ajaxdaddy.com/<br />
http://miniajax.com/<br />
http://ajaxian.com/<br />
http://www.dhtmlgoodies.com/<br />
http://www.javascriptkit.com/<br />
http://www.dynamicdrive.com/<br />
http://www.dhtmlsite.com/<br />
http://ajax.solutoire.com/<br />
http://www.devsnippets.com/</div>
<img src ="http://www.blogjava.net/connie/aggbug/325342.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-07-06 10:12 <a href="http://www.blogjava.net/connie/articles/325342.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>MyEclipse6.0编译后的类无法自动发不到WebRoot/WEB-INF/classes文件夹下(转)</title><link>http://www.blogjava.net/connie/articles/320991.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Fri, 14 May 2010 08:39:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/320991.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/320991.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/320991.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/320991.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/320991.html</trackback:ping><description><![CDATA[<span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">今天，碰到个怪事，在myeclipse中新建一个项目之后，结果保存之后，再查看WEB-INF/classes/，竟然里面是空的，而output路径也设的好好的啊，怪了，于是google了一下，发现有此问题的人还不少，其中有一位总结的比较详细，具体如下：</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">1. 确保 project-&gt;build automatically 已经被选上.</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">2. 如果选上了,也不好使, 使用这一招: project-&gt;clean..-&gt;选第2个clean select project, 勾上start build immediatelly</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp;3.删除现在的项目,提前设置好编译文件输出路径，重新导入源文件，设置eclipse为保存时编译，然后在保存的时候就可以自动编译了</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">4.如果项目里引了某个不用的jar包，而那个包又被你删了，就会出现不报错但怎么也编译不出来class文件的情况，可以把所有包都删除,然后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果.</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp;5. 想删掉某个class文件重新生成，删除class文件后，但classes目录下的文件夹被其它程序打开，比如Total Commander。此时编译也不会通过，在problems下可能会提示&#8220;con''t delete classes &#8230;&#8230;&#8221;。关掉其它程序重新编译即可。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp;6.还有种情况是remove掉 JRE System Library，重新导入即可编译。但是什么原因导致的还不清楚。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp;7.把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去，居然又开始编译了。。。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp;8.project-&gt;properties-&gt;java build path-&gt;source-&gt;.../WEB-INF/src的output folder不要默认，编辑让它指向../WEB-INF/classes 然后重新点击build工程即可自动编译。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp;9.再就是最重要的要看工程下面是否缺少了work目录,由于CVS控制时不把work加如版本,所以checkout后没有这个目录,要手工加上有的工程就能自动编译了</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">以上9条转自(http://www.diybl.com/course/4_webprogram/jsp/jsp_js/20090304/157796.html)</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">虽然总结的很好，然而我试过之后，发现还是不能解决我的问题，最后才发现原来是系统时间的问题，把时间调整过来就ok了。。。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">MyEclipse无法自动编译的解决方法</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">关键字: myeclipse无法自动编译的解决方法</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">今天通过SVN版本控制工具从服务器上更新了项目，选择的全部更新，因为开发工具都是用的MyEclipse，所以将一些MyEclipse的配置文件也从服务器上下了下来，覆盖了本地的配置文件。导致无法自动编译，MyEclipse不识别该项目，删除重新导入项目依旧无效。弄了半天头都大了！最后由我的老大解决了！</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">问题总结：</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">1.重新导入的项目结构与原来的不同</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">src包等等都和原来的不同，打开项目主目录，中有个.classpath文件，用记事本打开会发现有一行&lt;classpathentry kind="src" path="src"/&gt;，估计它的意思就是说你的源文件位置，看看有没有这一行，没有一定要补上，下面就是一些jar包的导入路径，如：</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">//这两行也应该是MyEclipse自动生成的，JAVA运行环境 \J2EE1.4</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&lt;classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/&gt;</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&lt;classpathentry kind="con" path="com.genuitec.eclipse.j2eedt.core.J2EE14_CONTAINER"/&gt;</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">//导入的JAR包位置</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&lt;classpathentry kind="lib" path="web/WEB-INF/lib/acegi-security-1.0.0-RC1.jar"/&gt;</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">2.刷新项目不自动编译，将WEB-INF下面的classes文件夹中的字节码文件删除后不再重新生成</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">遇到此问题要检查是否有这一行</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&lt;classpathentry kind="output" path="web/WEB-INF/classes"/&gt;</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">这是指定将字节码文件输出到哪，如果没指定当然不会默认给你找个地方存了。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">3.以上两个步骤都做完了，但项目依旧跑不起来</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">这个时候你要用到MyEclipse的项目清理功能，在菜单栏里的project里有个clean，它会强制清除那些配置文件，重新生成就会正确了。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">项目跑起来了，要记得做个笔记，以后遇到问题了有个参照！可能解释的并不正确，但问题确实解决了！</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">关于MyEclipse不能自动编译</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">2009-06-19 16:27</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">方法一 ：</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp; 有时候在MyEclipse里修改了内容，但它却没有自动编译，导致修改后没有达到我们想要结果。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp; 既然是默认是自动编译，它没有被编译，那就手动编译。</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp; 方法如下：</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp; 在MyEclipse的工具栏，找到Project----&gt;把默认打勾的Build Automatically（自动编译，说明MyEclipse默认是自动编译的），把它的勾去掉，再找到Project----&gt;Build All，手动编译完再把Build Automatically的勾打上。让它再默认自动编译！</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp; 方法二：</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; "><br />
</span><span  style="font-family: simsun; font-size: 14px; line-height: 23px; ">&nbsp; 如果是tomcat服务器。把work下目录删除。清除缓存，把项目删除重新导入，重新编译</span>
<img src ="http://www.blogjava.net/connie/aggbug/320991.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-05-14 16:39 <a href="http://www.blogjava.net/connie/articles/320991.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于hashtable</title><link>http://www.blogjava.net/connie/articles/319811.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Fri, 30 Apr 2010 07:47:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/319811.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/319811.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/319811.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/319811.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/319811.html</trackback:ping><description><![CDATA[http://www.javaeye.com/topic/409517?page=3
<img src ="http://www.blogjava.net/connie/aggbug/319811.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-04-30 15:47 <a href="http://www.blogjava.net/connie/articles/319811.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>在Struts 2中使用JSon ajax支持 </title><link>http://www.blogjava.net/connie/articles/319087.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Thu, 22 Apr 2010 04:12:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/319087.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/319087.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/319087.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/319087.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/319087.html</trackback:ping><description><![CDATA[<p><a title="json" href="http://search.yesky.com/search.do?wd=json&amp;appType=1&amp;columnId=324&amp;sortType=0&amp;btnsearch=%CB%D1" target="_blank"><strong><u><font color="#204890">JSON</font></u></strong></a>插件提供了一种名为json的ResultType，一旦为某个Action指定了一个类型为json的Result，则该Result无需映射到任何视图资源。因为JSON插件会负责将Action里的状态信息序列化成JSON格式的数据，并将该数据返回给客户端页面的JavaScript。<br />
<br />
　　简单地说，JSON插件允许我们在JavaScript中异步调用Action，而且Action不再需要使用视图资源来显示该Action里的状态信息，而是由JSON插件负责将Action里的状态信息返回给调用页面——通过这种方式，就可以完成<a title="ajax" href="http://search.yesky.com/search.do?wd=ajax&amp;appType=1&amp;columnId=324&amp;sortType=0&amp;btnsearch=%CB%D1" target="_blank"><strong><u><font color="#204890">Ajax</font></u></strong></a>交互。<br />
<br />
　　<a title="struts" href="http://search.yesky.com/search.do?wd=struts&amp;appType=1&amp;columnId=324&amp;sortType=0&amp;btnsearch=%CB%D1" target="_blank"><strong><u><font color="#204890">Struts</font></u></strong></a>2 提供了一种可插拔方式来管理插件，安装Struts2的JSON插件与安装普通插件并没有太大的区别，一样只需要将Struts2插件的JAR文件复制到 Web应用的WEB-INF/lib路径下即可。<br />
<br />
　　安装JSON插件按如下步骤进行：<br />
<br />
　　（1）登陆http://code.google.com/p/jsonplugin/downloads/list站点，下载Struts2的 JSON插件的最新版本，当前最新版本是0.7，我们可以下载该版本的JSON插件。<br />
<br />
　　（2）将下载到的jsonplugin-0.7.jar文件复制到Web应用的WEB-INF路径下，即可完成JSON插件的安装。<br />
<br />
　　实现Actio逻辑<br />
<br />
　　假设wo,en输入页面中包含了三个表单域，这三个表单域对于三个请求参数，因此应该使用Action来封装这三个请求参数。三个表单域的name分别为field1、field2和field3。<br />
<br />
　　处理该请求的Action类代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp; public class JSONExample<br />
{<br />
　//封装请求参数的三个属性<br />
　private String field1;<br />
　private transient String field2;<br />
　private String field3;<br />
　//封装处理结果的属性<br />
　private int[] ints = {10, 20};<br />
　private Map map = new HashMap();<br />
　private String customName = "custom";<br />
　//三个请求参数对应的setter和getter方法<br />
　public String getField1()<br />
　{<br />
　　return field1;<br />
　}<br />
　public void setField1(String field1)<br />
　{<br />
　　this.field1 = field1;<br />
　}<br />
　//此处省略了field1和field2两个字段的setter和getter方法<br />
　...<br />
　//封装处理结果的属性的setter和getter方法<br />
　public int[] getInts() <br />
　{<br />
　　return ints;<br />
　}<br />
　public void setInts(int[] ints)<br />
　{<br />
　　this.ints = ints;<br />
　}<br />
　public Map getMap()<br />
　{<br />
　　return map;<br />
　}<br />
　public void setMap(Map map) <br />
　{<br />
　　this.map = map;<br />
　}<br />
　//使用注释语法来改变该属性序列化后的属性名<br />
　@JSON(name="newName")<br />
　public String getCustomName() <br />
　{<br />
　　return this.customName;<br />
　}<br />
　public String execute()<br />
　{<br />
　　map.put("name", "yeeku");<br />
　　return Action.SUCCESS;<br />
　}<br />
}</p>
<p>&nbsp;</p>
<table class="FCK__ShowTableBorders" width="90%" align="center" bgcolor="#cccccc">
    <tbody>
        <tr>
            <td>public class JSONExample<br />
            {<br />
            　//封装请求参数的三个属性<br />
            　private String field1;<br />
            　private transient String field2;<br />
            　private String field3;<br />
            　//封装处理结果的属性<br />
            　private int[] ints = {10, 20};<br />
            　private Map map = new HashMap();<br />
            　private String customName = "custom";<br />
            　//三个请求参数对应的setter和getter方法<br />
            　public String getField1()<br />
            　{<br />
            　　return field1;<br />
            　}<br />
            　public void setField1(String field1)<br />
            　{<br />
            　　this.field1 = field1;<br />
            　}<br />
            　//此处省略了field1和field2两个字段的setter和getter方法<br />
            　...<br />
            　//封装处理结果的属性的setter和getter方法<br />
            　public int[] getInts() <br />
            　{<br />
            　　return ints;<br />
            　}<br />
            　public void setInts(int[] ints)<br />
            　{<br />
            　　this.ints = ints;<br />
            　}<br />
            　public Map getMap()<br />
            　{<br />
            　　return map;<br />
            　}<br />
            　public void setMap(Map map) <br />
            　{<br />
            　　this.map = map;<br />
            　}<br />
            　//使用注释语法来改变该属性序列化后的属性名<br />
            　@JSON(name="newName")<br />
            　public String getCustomName() <br />
            　{<br />
            　　return this.customName;<br />
            　}<br />
            　public String execute()<br />
            　{<br />
            　　map.put("name", "yeeku");<br />
            　　return Action.SUCCESS;<br />
            　}<br />
            }</td>
        </tr>
    </tbody>
</table>
<p><br />
　　在上面代码中，使用了JSON注释，注释时指定了name域，name域指定Action属性被序列化成JSON对象的属性名。除此之外，JSON注释还支持如下几个域：<br />
<br />
　　serialize：设置是否序列化该属性<br />
　　deserialize：设置是否反序列化该属性。<br />
　　format：设置用于格式化输出、解析日期表单域的格式。例如"yyyy-MM-dd'T'HH:mm:ss"。<br />
<br />
　　配置该Action与配置普通Action存在小小的区别，应该为该Action配置类型为json的Result。而这个Result无需配置任何视图资源。<br />
<br />
　　配置该Action的struts.xml文件代码如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ＜?xml version="1.0" encoding="GBK"?＞<br />
＜!DOCTYPE struts PUBLIC<br />
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />
"<a href="http://struts.apache.org/dtds/struts-2.0.dtd">http://struts.apache.org/dtds/struts-2.0.dtd</a>"＞<br />
＜struts＞<br />
　＜constant name="struts.i18n.encoding" value="UTF-8"/＞<br />
　＜package name="example" extends="json-default"＞<br />
　　＜action name="JSONExample" class="lee.JSONExample"＞<br />
　　　＜result type="json"/＞<br />
　　＜/action＞<br />
　＜/package＞<br />
＜/struts＞</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<table class="FCK__ShowTableBorders" width="90%" align="center" bgcolor="#cccccc">
    <tbody>
        <tr>
            <td>＜?xml version="1.0" encoding="GBK"?＞<br />
            ＜!DOCTYPE struts PUBLIC<br />
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"<br />
            "http://struts.apache.org/dtds/struts-2.0.dtd"＞<br />
            ＜struts＞<br />
            　＜constant name="struts.i18n.encoding" value="UTF-8"/＞<br />
            　＜package name="example" extends="json-default"＞<br />
            　　＜action name="JSONExample" class="lee.JSONExample"＞<br />
            　　　＜result type="json"/＞<br />
            　　＜/action＞<br />
            　＜/package＞<br />
            ＜/struts＞</td>
        </tr>
    </tbody>
</table>
<p><br />
　　在上面配置文件中有两个值得注意的地方：<br />
<br />
　　第一个地方是配置struts.i18n.encoding常量时，不再是使用GBK编码，而是UTF-8编码，这是因为Ajax的POST请求都是以UTF-8的方式进行编码的。<br />
<br />
　　第二个地方是配置包时，自己的包继承了json-default包，而不再继承默认的default包，这是因为只有在该包下才有json类型的 Result。 </p>
<img src ="http://www.blogjava.net/connie/aggbug/319087.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-04-22 12:12 <a href="http://www.blogjava.net/connie/articles/319087.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决a different object with the same identifier value was already associated with </title><link>http://www.blogjava.net/connie/articles/318700.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Sun, 18 Apr 2010 16:42:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/318700.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/318700.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/318700.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/318700.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/318700.html</trackback:ping><description><![CDATA[拷贝别人的，问题就解决了<br />
<br />
这个错误我一共遇到过两次，一直没有找到很好的解决方案，这个错误产生原因相信大家都知道，因为在hibernate中同一个session里面有了两个
相同标识但是是不同实体，当这时运行saveOrUpdate(object)操作的时候就会报这个错误。呵呵，也许你会说，你这么说跟没说没什么区别，
我承认，呵呵，我不知道具体为什么会产生这个错误，要不然也不会很久都没有解决，现在，给出一个临时的解决方案，给向我一样，没有办法找到根源的人一个能
够继续执行下去的方法（当然是对的，只是不是从产生原因入手）
<br />
<br />
其实要解决这个问题很简单，只需要进行session.clean()操作就可以解决了，但是你在clean操作后面又进行了
saveOrUpdate(object)操作，有可能会报出"Found two representations of same
collection"，我找了很多资料，没有什么很好的解释，其中这篇文章帮助最大http://opensource.atlassian.com
/projects/hibernate/browse/HHH-509。
<br />
<br />
最后通过session.refresh(object)方法就可以解决了，注意，当object不是数据库中已有数据的对象的时候，不能使用
session.refresh(object)因为refresh是从hibernate的session中去重新取object，如果session
中没有这个对象，则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下
<br />
<br />
当然这个问题最容易解决的办法还是使用Hibernate里面自带的merge()方法。不过我始终觉得碰到问题就用这种软件自带的非常用方法
（和saveOrUpdate()，save(),update()相比）感觉十分不爽。
<br />
<br />
后来我还发现这种错误经常出现在一对多映射和多对多映射，请大家在使用一对多和多对多映射的时候要小心一些
<br />
<br />
<br />
Category是树形结构，以下是实现修改功能的代码，一开始，我用了getHibernateTemplate().update()
<br />
<br />
结果出现a different object with the same identifier value was already
associated with the session
<br />
<br />
，上网查了查，使用了getSession().flush();
<br />
&nbsp; getSession().clear();
<br />
<br />
之后，另外一个问题出现了：Found two representations of same collection
<br />
<br />
于是乎，继续找办法解决，最后发现getHibernateTemplate().merge(category);
<br />
<br />
可以彻底解决问题，然而原理到底是如何，却是弄不明白。
<br />
<br />
//修改category<br />
&nbsp;&nbsp;&nbsp; public void updateCategory(Category category) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //按照传进来的category，先把原有的category读取出来<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Category cc=(Category)getHibernateTemplate()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .get(Category.class, category.getId());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把原有的孩子拿到<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; category.setChildren(cc.getChildren());<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //把原有的父亲拿到<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; category.setParent(cc.getParent());<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存修改<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getSession().flush();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getSession().clear();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //不要用update()方法<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; getHibernateTemplate().merge(category);<br />
<br />
&nbsp;&nbsp;&nbsp; }<br />
<br />
<br />
<pre style="display: none;" name="code" class="java">//修改category
public void updateCategory(Category category) {
//按照传进来的category，先把原有的category读取出来
Category cc=(Category)getHibernateTemplate()
.get(Category.class, category.getId());
//把原有的孩子拿到
category.setChildren(cc.getChildren());
//把原有的父亲拿到
category.setParent(cc.getParent());
//保存修改
getSession().flush();
getSession().clear();
//不要用update()方法
getHibernateTemplate().merge(category);
}
</pre>
<img src ="http://www.blogjava.net/connie/aggbug/318700.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-04-19 00:42 <a href="http://www.blogjava.net/connie/articles/318700.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>eclipse 无法启动</title><link>http://www.blogjava.net/connie/articles/313134.html</link><dc:creator>嗜夜</dc:creator><author>嗜夜</author><pubDate>Mon, 15 Feb 2010 08:00:00 GMT</pubDate><guid>http://www.blogjava.net/connie/articles/313134.html</guid><wfw:comment>http://www.blogjava.net/connie/comments/313134.html</wfw:comment><comments>http://www.blogjava.net/connie/articles/313134.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/connie/comments/commentRss/313134.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/connie/services/trackbacks/313134.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/connie/articles/313134.html'>阅读全文</a><img src ="http://www.blogjava.net/connie/aggbug/313134.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/connie/" target="_blank">嗜夜</a> 2010-02-15 16:00 <a href="http://www.blogjava.net/connie/articles/313134.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>