﻿<?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-yjhmily-随笔分类-J2EE</title><link>http://www.blogjava.net/yjhmily/category/13684.html</link><description>坚持走自己的路……
</description><language>zh-cn</language><lastBuildDate>Mon, 22 Aug 2011 18:06:35 GMT</lastBuildDate><pubDate>Mon, 22 Aug 2011 18:06:35 GMT</pubDate><ttl>60</ttl><item><title>转载：java编程中'为了性能'一些尽量做到的地方</title><link>http://www.blogjava.net/yjhmily/archive/2011/08/22/357047.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Mon, 22 Aug 2011 07:18:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2011/08/22/357047.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/357047.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2011/08/22/357047.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/357047.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/357047.html</trackback:ping><description><![CDATA[<div>最近的机器内存又爆满了，出了新增机器内存外，还应该好好review一下我们的代码，有很多代码编写过于随意化，这些不好的习惯或对程序语言的不了解是应该好好打压打压了。<div>下面是参考网络资源和总结一些在java编程中尽可能做到的一些地方<br />-</div><div><strong>1.尽量在合适的场合使用单例</strong></div><div>使用单例可以减轻加载的负担，缩短加载的时间，提高加载的效率，但并不是所有地方都适用于单例，简单来说，单例主要适用于以下三个方面</div><div>第一，控制资源的使用，通过线程同步来控制资源的并发访问</div><div>第二，控制实例的产生，以达到节约资源的目的</div><div>第三，控制数据共享，在不建立直接关联的条件下，让多个不相关的进程或线程之间实现通信<br />-<br /><strong>2.尽量避免随意使用静态变量</strong></div><div>要知道，当某个对象被定义为stataic变量所引用，那么gc通常是不会回收这个对象所占有的内存，如</div><div>public class A{</div><div><span style="white-space: pre;">	</span>static B b = new B();</div><div>}</div><div>此时静态变量b的生命周期与A类同步，如果A类不会卸载，那么b对象会常驻内存，直到程序终止。<br />-</div><div><strong>3.尽量避免过多过常的创建java对象</strong></div><div>尽量避免在经常调用的方法，循环中new对象，由于系统不仅要花费时间来创建对象，而且还要花时间对这些对象进行垃圾回收和处理，在我们可以控制的范围内，最</div><div>大限度的重用对象，最好能用基本的数据类型或数组来替代对象。<br /><div>-</div></div><div><strong>4.尽量使用final修饰符</strong></div><div>带 有final修饰符的类是不可派生的。在Java核心API中，有许多应用final的例子，例如java.lang.String。为String类指 定final防止了使用者覆盖length()方法。另外，如果一个类是final的，则该类所有方法都是final的。java编译器会寻找机会内联 (inline)所有的final方法(这和具体的编译器实现有关)。此举能够使性能平均提高50%。<br /><div>-</div></div><div><strong>5.尽量使用局部变量</strong></div><div>调用方法时传递的参数以及在调用中创建的临时变量都保存在栈(Stack)中，速度较快。其他变量，如静态变量，实例变量等，都在堆(Heap)中创建，速度较慢。<br />-</div><div><strong>6.尽量处理好包装类型和基本类型两者的使用场所</strong></div><div>虽然包装类型和基本类型在使用过程中是可以相互转换，但它们两者所产生的内存区域是完全不同的，基本类型数据产生和处理都在栈中处理，包装类型是对象，是在堆中产生实例。</div><div>在集合类对象，有对象方面需要的处理适用包装类型，其他的处理提倡使用基本类型。<br />-</div><div><strong>7.慎用synchronized，尽量减小synchronize的方法</strong></div><div>都 知道，实现同步是要很大的系统开销作为代价的，甚至可能造成死锁，所以尽量避免无谓的同步控制。synchronize方法被调用时，直接会把当前对象锁 了，在方法执行完之前其他线程无法调用当前对象的其他方法。所以synchronize的方法尽量小，并且应尽量使用方法同步代替代码块同步。<br />-</div><div><strong>8.尽量使用StringBuilder和StringBuffer进行字符串连接</strong></div><div>这个就不多讲了<br />-</div><div><strong>9.尽量不要使用finalize方法</strong></div><div>实际上，将资源清理放在finalize方法中完成是非常不好的选择，由于GC的工作量很大，尤其是回收Young代内存时，大都会引起应用程序暂停，所以再选择使用finalize方法进行资源清理，会导致GC负担更大，程序运行效率更差。<br /><div>-</div></div><div><strong>10.尽量使用基本数据类型代替对象</strong></div><div>String str = "hello";</div><div>上面这种方式会创建一个&#8220;hello&#8221;字符串，而且JVM的字符缓存池还会缓存这个字符串；</div><div>String str = new String("hello");</div><div>此时程序除创建字符串外，str所引用的String对象底层还包含一个char[]数组，这个char[]数组依次存放了h,e,l,l,o<br /><div>-</div></div><div><strong>11.单线程应尽量使用HashMap, ArrayList</strong></div><div>HashTable,Vector等使用了同步机制，降低了性能。<br /><div>-</div></div><div><strong>12.尽量合理的创建HashMap</strong></div><div>当你要创建一个比较大的hashMap时，充分利用另一个构造函数</div><div>public HashMap(int initialCapacity, float loadFactor)</div><div>避 免HashMap多次进行了hash重构,扩容是一件很耗费性能的事，在默认中initialCapacity只有16，而loadFactor是 0.75，需要多大的容量，你最好能准确的估计你所需要的最佳大小，同样的Hashtable，Vectors也是一样的道理。<br /><div>-</div></div><div><strong>13.尽量减少对变量的重复计算</strong></div><div>如</div><div>for(int i=0;i&lt;list.size();i++)</div><div>应该改为</div><div>for(int i=0,len=list.size();i&lt;len;i++)</div><div>并且在循环中应该避免使用复杂的表达式，在循环中，循环条件会被反复计算，如果不使用复杂表达式，而使循环条件值不变的话，程序将会运行的更快。&nbsp;<br /><div>-</div></div><div><strong>14.尽量避免不必要的创建</strong></div><div>如</div><div>A a = new A();</div><div>if(i==1){list.add(a);}</div><div>应该改为</div><div>if(i==1){</div><div>A a = new A();</div><div>list.add(a);}<br /><div>-</div></div><div><strong>15.尽量在finally块中释放资源</strong></div><div>程序中使用到的资源应当被释放，以避免资源泄漏。这最好在finally块中去做。不管程序执行的结果如何，finally块总是会执行的，以确保资源的正确关闭。&nbsp;<br /><div>-</div></div><div><strong>16.尽量使用移位来代替'a/b'的操作</strong></div><div>"/"是一个代价很高的操作，使用移位的操作将会更快和更有效</div><div>如</div><div>int num = a / 4;</div><div>int num = a / 8;</div><div>应该改为</div><div>int num = a &gt;&gt; 2;</div><div>int num = a &gt;&gt; 3;</div><div>但注意的是使用移位应添加注释，因为移位操作不直观，比较难理解<br /><div>-</div></div><div><strong>17.尽量使用移位来代替'a*b'的操作</strong></div><div>同样的，对于'*'操作，使用移位的操作将会更快和更有效</div><div>如</div><div>int num = a * 4;</div><div>int num = a * 8;</div><div>应该改为</div><div>int num = a &lt;&lt; 2;</div><div>int num = a &lt;&lt; 3;<br /><div>-</div></div><div><strong>18.尽量确定StringBuffer的容量</strong></div><div>StringBuffer 的构造器会创建一个默认大小(通常是16)的字符数组。在使用中，如果超出这个大小，就会重新分配内存，创建一个更大的数组，并将原先的数组复制过来，再 丢弃旧的数组。在大多数情况下，你可以在创建 StringBuffer的时候指定大小，这样就避免了在容量不够的时候自动增长，以提高性能。&nbsp;</div><div>如：StringBuffer buffer = new StringBuffer(1000); &nbsp;<br /><div>-</div></div><div><strong>19.尽量早释放无用对象的引用</strong></div><div>大部分时，方法局部引用变量所引用的对象 会随着方法结束而变成垃圾，因此，大部分时候程序无需将局部，引用变量显式设为null。</div><div>例如：</div><div>Public void test(){</div><div>Object obj = new Object();</div><div>&#8230;&#8230;</div><div>Obj=null;</div><div>}</div><div>上面这个就没必要了，随着方法test()的执行完成，程序中obj引用变量的作用域就结束了。但是如果是改成下面：</div><div>Public void test(){</div><div>Object obj = new Object();</div><div>&#8230;&#8230;</div><div>Obj=null;</div><div>//执行耗时，耗内存操作；或调用耗时，耗内存的方法</div><div>&#8230;&#8230;</div><div>}</div><div>这时候就有必要将obj赋值为null，可以尽早的释放对Object对象的引用。<br /><div>-</div></div><div><strong>20.尽量避免使用二维数组</strong></div><div>二维数据占用的内存空间比一维数组多得多，大概10倍以上。<br /><div>-</div></div><div><strong>21.尽量避免使用split</strong></div><div>除 非是必须的，否则应该避免使用split，split由于支持正则表达式，所以效率比较低，如果是频繁的几十，几百万的调用将会耗费大量资源，如果确实需 要频繁的调用split，可以考虑使用apache的StringUtils.split(string,char)，频繁split的可以缓存结果。<br /><div>-</div></div><div><strong>22.ArrayList &amp; LinkedList</strong></div><div>一 个是线性表，一个是链表，一句话，随机查询尽量使用ArrayList，ArrayList优于LinkedList，LinkedList还要移动指 针，添加删除的操作LinkedList优于ArrayList，ArrayList还要移动数据，不过这是理论性分析，事实未必如此，重要的是理解好2 者得数据结构，对症下药。<br /><div>-</div></div><div><strong>23.尽量使用System.arraycopy ()代替通过来循环复制数组</strong></div><div>System.arraycopy() 要比通过循环来复制数组快的多&nbsp;<br /><div>-</div></div><div><strong>24.尽量缓存经常使用的对象</strong></div><div>尽可能将经常使用的对象进行缓存，可以使用数组，或HashMap的容器来进行缓存，但这种方式可能导致系统占用过多的缓存，性能下降，推荐可以使用一些第三方的开源工具，如EhCache，Oscache进行缓存，他们基本都实现了FIFO/FLU等缓存算法。<br /><div>-</div></div><div><strong>25.尽量避免非常大的内存分配</strong></div><div>有时候问题不是由当时的堆状态造成的，而是因为分配失败造成的。分配的内存块都必须是连续的，而随着堆越来越满，找到较大的连续块越来越困难。<br /><div>-</div></div><div><strong>26.慎用异常</strong></div><div>当 创建一个异常时，需要收集一个栈跟踪(stack  track)，这个栈跟踪用于描述异常是在何处创建的。构建这些栈跟踪时需要为运行时栈做一份快照，正是这一部分开销很大。当需要创建一个  Exception 时，JVM  不得不说：先别动，我想就您现在的样子存一份快照，所以暂时停止入栈和出栈操作。栈跟踪不只包含运行时栈中的一两个元素，而是包含这个栈中的每一个元素。</div><div>如 果您创建一个 Exception ，就得付出代价。好在捕获异常开销不大，因此可以使用 try-catch  将核心内容包起来。从技术上讲，您甚至可以随意地抛出异常，而不用花费很大的代价。招致性能损失的并不是 throw  操作&#8212;&#8212;尽管在没有预先创建异常的情况下就抛出异常是有点不寻常。真正要花代价的是创建异常。幸运的是，好的编程习惯已教会我们，不应该不管三七二十一就 抛出异常。异常是为异常的情况而设计的，使用时也应该牢记这一原则。<br /><br />文章主要是为了抛砖引玉，希望有更多牛人的指点<br /><br />谢谢的&nbsp;<span style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; font-size: 13px; line-height: normal; background-color: #f5f5f5;"><a id="AjaxHolder_Comments_CommentList_ctl02_NameLink" target="_blank"><strong>xuanyuan </strong>的建议：</a></span><br />===================================================<br /><span style="font-family: Verdana,Geneva,Arial,Helvetica,sans-serif; font-size: 13px; line-height: 16px; background-color: #ffffff;">7.慎用synchronized，尽量减小synchronize的方法<br />re：同意，不过文中有个地方说错了，使用synchronized关键字并不一定都是锁定当前对象的，要看具体的锁是什么。如果是在方法上加的synchronized，则是以对象本身为锁的，如果是静态方法则锁的粒度是类。<br />---------------<br />9.尽量不要使用finalize方法<br />re：同意，其实不推荐用finalize方法的根本原因在于，JVM的规范并不保证何时执行该方法，所以用这个方法来释放资源很不合适，有可能造成长时间资源得不到释放。<br />---------------<br />16.尽量使用移位来代替'a/b'的操作；17.尽量使用移位来代替'a*b'的操作<br />re：个人不太同意这两条。这样做确实有更好的性能，但是却牺牲了可读性。这两个操作符对很多程序员来说并不直观。我认为在如今硬件价格不那么昂贵的情况下，略微牺牲一些性能，换来更好的可读性和可维护性是好的选择。<br /></span>===================================================<br /><div><a id="AjaxHolder_Comments_CommentList_ctl09_NameLink" target="_blank"><strong>wuzhengju</strong> 的建议：<br /><div>===================================================</div></a></div><div><span style="font-size: 10pt;">19.尽量早释放无用对象的引用</span><br /><span style="font-size: 10pt;">大部分时，方法局部引用变量所引用的对象 会随着方法结束而变成垃圾，因此，大部分时候程序无需将局部，引用变量显式设为null。</span><br /><span style="font-size: 10pt;">例如：</span><br /><span style="font-size: 10pt;">Public void test(){</span><br /><span style="font-size: 10pt;">Object obj = new Object();</span><br /><span style="font-size: 10pt;">&#8230;&#8230;</span><br /><span style="font-size: 10pt;">Obj=null;</span><br /><span style="font-size: 10pt;">}</span><br /><span style="font-size: 10pt;">上面这个就没必要了，随着方法test()的执行完成，程序中obj引用变量的作用域就结束了。但是如果是改成下面：</span><br /><span style="font-size: 10pt;">Public void test(){</span><br /><span style="font-size: 10pt;">Object obj = new Object();</span><br /><span style="font-size: 10pt;">&#8230;&#8230;</span><br /><span style="font-size: 10pt;">Obj=null;</span><br /><span style="font-size: 10pt;">//执行耗时，耗内存操作；或调用耗时，耗内存的方法</span><br /><span style="font-size: 10pt;">&#8230;&#8230;</span><br /><span style="font-size: 10pt;">}   </span><br /><span style="font-size: 10pt;">如果Object obj = new Object();  如果这对象并不是大对象，这有必要吗？Obj=null;只是告诉jvm这个对象已经成为垃圾，至于什么时候回收，还不能确定！   这可读性也不好！</span></div><div>===================================================</div></div></div><img src ="http://www.blogjava.net/yjhmily/aggbug/357047.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2011-08-22 15:18 <a href="http://www.blogjava.net/yjhmily/archive/2011/08/22/357047.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>做个记录-jasperReport中的Demo说明</title><link>http://www.blogjava.net/yjhmily/archive/2008/12/09/245288.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Tue, 09 Dec 2008 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2008/12/09/245288.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/245288.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2008/12/09/245288.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/245288.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/245288.html</trackback:ping><description><![CDATA[
		<p>
				<strong>例子在：\jasperreports-3.1.2-project\jasperreports-3.1.2\demo\samples<br /><br />用ant工具运行就可以看到效果<br /><br />1. alterdesign</strong>
		</p>
		<p>该例子演示了报表编译后，在报表展现的时候如何动态的控制其中的元素<br />比如让某一个矩形变色或其他</p>
		<h5>2. antcompile</h5>
		<br />演示如何让 ant 来编译<br /><h5>3. chart</h5><br />演示了如何在报表中添加图像，JasperReport是用Scriptlet的方式<br />往报表中添加图像，而Scriptlet是调用也是开源的jfreechart的Api来<br />生成图形，去jfreechart看一下，该工具能的图形生成能力也很强<br /><h5>4. datasource</h5><br />演示了如何在报表中使用各种数据源，能够使用beanarray<br />beancollection，也可以用自定义的数据源，只要继承了JRDataSource的<br />两个接口，这个能给用户提供非常大的灵活性，报表的数据不用局限于一<br />条Sql语句，也可以使用存储过程，对生成报表中的数据也可以排序，二<br />次检索，等等<br /><h5>5. fonts</h5><br />各种字体的演示<br /><h5>6. horizontal</h5><br />演示了水平分栏的报表，演示报表中分了三栏，其中还用到了<br />textFieldExpression，就像if语句的效果来选择输出的内容<br /><h5>7. hyperlink</h5><br />演示了各种样式的链接<br /><h5><font style="BACKGROUND-COLOR: #f5f5dc">8.</font> images </h5><br />演示了如何在报表中加入图像以及图像的显示方式<br /><h5>9. jasper</h5><br />演示了分组分栏的报表，演示中用了2次group<br /><h5>10. jcharts </h5><br />演示了调用另一个开源的API jcharts来往报表中加入分析图形，原理同<br />上chart，如果jfreechart都还不能满足你分析图形的要求，那到jcharts<br />里找找看吧，说不定有<br /><h5>11. landscape</h5><br />演示横向的报表<br /><h5>12. nopagebreak</h5><br />演示比如在IE中不分页的方式打印出报表的内容，通过这个演示也可以<br />了解报表输出如何配置参数<br /><h5>13. noreport </h5><br />演示了如何直接通过java程序生成JasperPrint对象来输出<br /><h5>14. noxmldesign </h5><br />演示了如何直接通过java程序生成JasperDesign对象来动态的生成报<br />表，根据这个例子，用户可以作出自定义选列的报表,当然比较麻烦，<br />而且肯定自己要补充他的API库<br />（JasperReport真是强大啊，呵呵) <br /><h5>15. pdfencrypt</h5><br />演示了pdf的输出方式，可以给pdf文件加密码，其实就是pdf输出方式的<br />参数配置，具体有那些参数可配置，去看看API吧<br /><h5>16. printservice</h5><br />演示了如何直接打印报表<br /><h5>17. query </h5><br />演示了如何让查询的sql动态起来，比如你可以通过一个Jsp页面传<br />报表的sql的where条件，order条件，甚至整个sql语句<br /><h5>18. rotation </h5><br />演示了文字纵向显示的报表<br /><h5>19. scriptlet</h5><br />演示了如何继承JRDefaultScriptlet，并加入自己的处理语句，这个功能<br />可是很强大的哦，看看这些接口<br />beforeReportInit() afterReportInit() beforePageInit()<br />afterPageInit() beforeColumnInit() afterColumnInit() <br />beforeGroupInit(String groupName)<br />afterGroupInit(String groupName) <br />看看这些名字就知道你能完成那些功能，比如显示一列数据后，马上跟<br />上该列数据的分析图形，当然你也可以加上自己的方法并在报表中调用<br /><h5>20. shapes </h5><br />演示了JasperReport中自带的图形，及能配置的参数<br />当然你也能继承或者覆写JasperReport中的Api生成你要的图形，<br /><h5>21. stretch </h5><br />演示了如何处理报表中数据拉伸以及带来周围的线及框的拉伸，<br />你能了解到虽然黑框式表格不是JasperReport中缺省的展现方式，<br />但在JasperReport中不难实现<br /><h5>22. subreport </h5><br />演示了子报表，还告诉你一个报表中可以有n个子报表，子报表中还可以<br />嵌套子报表<br /><h5>23. tableofcontents </h5><br />演示了如何生成一个有目录的，复杂的报表<br /><h5>24. unicode </h5><br />演示了各种 字符编码<br /><h5>25. webapp </h5><br />演示了如何把报表放到一个JavaWeb项目中，可以用Jsp Servlet<br />applet，笔者做了一个有参数页面，可以选择html pdf applet<br />输出方式的报表，有兴趣的 我可以在后面放上代码<img src ="http://www.blogjava.net/yjhmily/aggbug/245288.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2008-12-09 16:59 <a href="http://www.blogjava.net/yjhmily/archive/2008/12/09/245288.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SiteMesh：一个优于Apache Tiles的Web页面布局、装饰框架</title><link>http://www.blogjava.net/yjhmily/archive/2007/09/28/149143.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Fri, 28 Sep 2007 07:34:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2007/09/28/149143.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/149143.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2007/09/28/149143.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/149143.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/149143.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SiteMesh：一个优于Apache Tiles的Web页面布局、装饰框架&nbsp;&nbsp;<a href='http://www.blogjava.net/yjhmily/archive/2007/09/28/149143.html'>阅读全文</a><img src ="http://www.blogjava.net/yjhmily/aggbug/149143.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2007-09-28 15:34 <a href="http://www.blogjava.net/yjhmily/archive/2007/09/28/149143.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA程序员不可不注意的编码规范</title><link>http://www.blogjava.net/yjhmily/archive/2007/09/27/148671.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Thu, 27 Sep 2007 05:31:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2007/09/27/148671.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/148671.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2007/09/27/148671.html#Feedback</comments><slash:comments>10</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/148671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/148671.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 最近经常看一些朋友写的源代码，总是感觉编码规范问题还没有成为大家的关注点，导致代码的通用可读性相对比较差；<br><br>所以在此唠叨几句编码规范（以struts2+spring2+hibernate3架构的项目为例），大家各取所需，欢迎拍砖！<br>&nbsp;&nbsp;<a href='http://www.blogjava.net/yjhmily/archive/2007/09/27/148671.html'>阅读全文</a><img src ="http://www.blogjava.net/yjhmily/aggbug/148671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2007-09-27 13:31 <a href="http://www.blogjava.net/yjhmily/archive/2007/09/27/148671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>请教:新建一个Dynamic Web Project与新建一个MyEclipse里面的Web Project有什么区别?</title><link>http://www.blogjava.net/yjhmily/archive/2006/12/20/89014.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Wed, 20 Dec 2006 04:23:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2006/12/20/89014.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/89014.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2006/12/20/89014.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/89014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/89014.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 新建一个Dynamic Web Project与新建一个MyEclipse里面的Web Project有什么区别?(详情见图)&nbsp;&nbsp;<a href='http://www.blogjava.net/yjhmily/archive/2006/12/20/89014.html'>阅读全文</a><img src ="http://www.blogjava.net/yjhmily/aggbug/89014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2006-12-20 12:23 <a href="http://www.blogjava.net/yjhmily/archive/2006/12/20/89014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts中tiles框架的组合与继承</title><link>http://www.blogjava.net/yjhmily/archive/2006/10/25/77263.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Wed, 25 Oct 2006 11:06:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2006/10/25/77263.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/77263.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2006/10/25/77263.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/77263.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/77263.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: struts中tiles框架的组合与继承&nbsp;&nbsp;<a href='http://www.blogjava.net/yjhmily/archive/2006/10/25/77263.html'>阅读全文</a><img src ="http://www.blogjava.net/yjhmily/aggbug/77263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2006-10-25 19:06 <a href="http://www.blogjava.net/yjhmily/archive/2006/10/25/77263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>我用struts标签的感受</title><link>http://www.blogjava.net/yjhmily/archive/2006/09/26/71948.html</link><dc:creator>kangxm</dc:creator><author>kangxm</author><pubDate>Tue, 26 Sep 2006 05:09:00 GMT</pubDate><guid>http://www.blogjava.net/yjhmily/archive/2006/09/26/71948.html</guid><wfw:comment>http://www.blogjava.net/yjhmily/comments/71948.html</wfw:comment><comments>http://www.blogjava.net/yjhmily/archive/2006/09/26/71948.html#Feedback</comments><slash:comments>25</slash:comments><wfw:commentRss>http://www.blogjava.net/yjhmily/comments/commentRss/71948.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yjhmily/services/trackbacks/71948.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 从毕业到现在，一直用struts在开发！对struts标签用的算是比较多了，也确实非常喜欢struts的风格！<br>可最近接触一些朋友，包括在网上看到一些文章，发现大家对struts标签的影响好像并不怎么样！很多朋友用struts却不用他的标签，也有很多朋友就是觉得JSTL比较好！<br>一直很纳闷这个问题，这里只想说说自己用struts标签的感受！&nbsp;&nbsp;<a href='http://www.blogjava.net/yjhmily/archive/2006/09/26/71948.html'>阅读全文</a><img src ="http://www.blogjava.net/yjhmily/aggbug/71948.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yjhmily/" target="_blank">kangxm</a> 2006-09-26 13:09 <a href="http://www.blogjava.net/yjhmily/archive/2006/09/26/71948.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>