﻿<?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-table-文章分类-other</title><link>http://www.blogjava.net/table/category/36708.html</link><description /><language>zh-cn</language><lastBuildDate>Fri, 08 Jan 2010 06:16:26 GMT</lastBuildDate><pubDate>Fri, 08 Jan 2010 06:16:26 GMT</pubDate><ttl>60</ttl><item><title>对struts2的底层源码的解读</title><link>http://www.blogjava.net/table/articles/307164.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Thu, 24 Dec 2009 07:42:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/307164.html</guid><wfw:comment>http://www.blogjava.net/table/comments/307164.html</wfw:comment><comments>http://www.blogjava.net/table/articles/307164.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/307164.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/307164.html</trackback:ping><description><![CDATA[<div>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 12pt; color: blue">此问题网上很多人在讨论，至今还是没有很好的解决方案，在我对源码进行解读后，现在已经有个很好的解决方案，业务是用户注册（含复选框），用户注册验证出错后，错误信息的要显示在相应控件的后面，同时要让请求选中的复选框处于选中状态。希望您往下看，说不定会小有收获哦！！</span></p>
<p style="margin: 0cm 0cm 0pt">步骤：</p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt">1)</span><span style="font-size: 10pt">开发工具设置</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt">&nbsp;&nbsp; a)</span><span style="font-size: 10pt">工程编码</span><span style="font-size: 10pt">utf-8</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt">&nbsp;&nbsp; b)</span><span style="font-size: 10pt">文件代码样式</span><span style="font-size: 10pt">（</span><span style="font-size: 10pt">java</span><span style="font-size: 10pt">、</span><span style="font-size: 10pt">xml</span><span style="font-size: 10pt">）</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt">&nbsp;&nbsp; c)</span><span style="font-size: 10pt">文件编码格式</span><span style="font-size: 10pt">utf-8</span><span style="font-size: 10pt">（</span><span style="font-size: 10pt">jsp</span><span style="font-size: 10pt">、</span><span style="font-size: 10pt">html</span><span style="font-size: 10pt">、</span><span style="font-size: 10pt">js</span><span style="font-size: 10pt">）</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt">2)</span><span style="font-size: 10pt">创建目录结构</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt"><img src="http://hiphotos.baidu.com/lbchjf/pic/item/f7c08b7bf1b1f5c22f73b36b.jpg" border="0" small="0"  alt="" /></span></p>
<span style="font-size: 10pt">
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">3) </font>搭建<font face="Times New Roman">struts2</font>的环境，</font></p>
<p style="margin: 0cm 0cm 0pt 60pt; text-indent: -18pt"><span style="font-size: 10pt">a)<span style="font: 7pt Times New Roman">&nbsp;&nbsp;&nbsp; </span></span><span style="font-size: 10pt">导入</span><span style="font-size: 10pt">jar</span><span style="font-size: 10pt">包</span></p>
<p style="margin: 0cm 0cm 0pt 42pt; text-indent: 21pt"><font size="3">参考<font face="Times New Roman">struts2.1.8</font>下的<font face="Times New Roman">app</font>下的<font face="Times New Roman">struts2-blank-2.1.8</font>项目，拷入基本的<font face="Times New Roman">jar</font>包</font></p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman" size="3">==========================================================</font></p>
<p style="margin: 0cm 0cm 0pt 21pt; text-indent: 21pt; text-align: left" align="left"><span style="font-size: 10pt; color: black">struts2-core-2.x.x.jar </span><span style="font-size: 10pt; color: blue">:Struts 2</span><span style="font-size: 10pt; color: blue">框架的核心类库</span></p>
<p style="margin: 0cm 0cm 0pt; text-align: left" align="left"><span style="font-size: 10pt; color: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: black">xwork-2.x.x.jar</span><span style="font-size: 10pt; color: blue"> :XWork</span><span style="font-size: 10pt; color: blue">类库，</span><span style="font-size: 10pt; color: blue">Struts 2</span><span style="font-size: 10pt; color: blue">在其上构建</span></p>
<p style="margin: 0cm 0cm 0pt 42pt; text-align: left" align="left"><span style="font-size: 10pt; color: black">ognl-2.6.x.jar </span><span style="font-size: 10pt; color: blue">:</span><span style="font-size: 10pt; color: blue">对象图导航语言（</span><span style="font-size: 10pt; color: blue">Object Graph Navigation Language</span><span style="font-size: 10pt; color: blue">），</span><span style="font-size: 10pt; color: blue">struts2</span><span style="font-size: 10pt; color: blue">框架通过其读写对象的属性</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt; color: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: black">freemarker-2.3.x.jar</span><span style="font-size: 10pt; color: blue"> :Struts 2</span><span style="font-size: 10pt; color: blue">的</span><span style="font-size: 10pt; color: blue">UI</span><span style="font-size: 10pt; color: blue">标签的模板使用</span><span style="font-size: 10pt; color: blue">FreeMarker</span><span style="font-size: 10pt; color: blue">编写</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt; color: blue">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size: 10pt; color: black">commons-fileupload-1.2.1.jar</span><span style="font-size: 10pt; color: black">、</span><span style="font-size: 10pt; color: black">commons-io-1.3.2.jar</span><span style="font-size: 10pt; color: blue">这两个</span><span style="font-size: 10pt; color: blue">jar</span><span style="font-size: 10pt; color: blue">是用于文件上传</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt; color: black">===========================================================</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; b)</span><span style="font-size: 10pt">修改</span><span style="font-size: 10pt">web.xml</span><span style="font-size: 10pt">配置文件、添加</span><span style="font-size: 10pt">struts.xml</span><span style="font-size: 10pt">文件</span></p>
<p style="margin: 0cm 0cm 0pt"><span style="font-size: 10pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; c)</span><span style="font-size: 10pt">启动项目测试</span><span style="font-size: 10pt">index.jsp</span><span style="font-size: 10pt">界面输出</span></p>
<p style="margin: 0cm 0cm 0pt"><font size="3"><font face="Times New Roman">3</font>）注册页面</font></p>
<p style="margin: 0cm 0cm 0pt">页面的源码如下：粗心了点没有实现纯国际化</p>
<p style="margin: 0cm 0cm 0pt"><img src="http://hiphotos.baidu.com/lbchjf/pic/item/86ee12c26f3ab57ab219a871.jpg" border="0" small="0"  alt="" /><br />
</p>
<p style="margin: 0cm 0cm 0pt">相信您已经推断出我的项目大致部署，我这里就简要描述下：</p>
<p style="margin: 0cm 0cm 0pt">配置文件：<span style="color: blue"><font face="Times New Roman">struts.xml</font></span><span style="color: blue">和</span><span style="color: blue"><font face="Times New Roman">strus-user.xml</font></span><span style="color: blue">基于模块化配置，</span><span style="color: blue"><font face="Times New Roman">UserAction-registerUser-validation.xml</font></span><span style="color: blue">在执行</span><span style="color: blue"><font face="Times New Roman">UserAction</font></span><span style="color: blue">的</span><span style="color: blue"><font face="Times New Roman">registerUser</font></span><span style="color: blue">方法时进行校验</span></p>
<p style="margin: 0cm 0cm 0pt">属性文件：<span style="color: blue">有全局的国际化文件和</span><span style="color: blue"><font face="Times New Roman">user</font></span><span style="color: blue">模块的国际化文件</span></p>
<p style="margin: 0cm 0cm 0pt">类：<span style="color: blue"><font face="Times New Roman">UserAction</font></span><span style="color: blue">、</span><span style="color: blue"><font face="Times New Roman">UserBean</font></span><span style="color: blue">、</span><span style="color: blue"><font face="Times New Roman">Hobby</font></span></p>
<span><span>
<p style="margin: 0cm 0cm 0pt">工程目录</p>
<p style="margin: 0cm 0cm 0pt"><img src="http://hiphotos.baidu.com/lbchjf/pic/item/c7d887f24089567f342acc7c.jpg" border="0" small="0"  alt="" /><br />
</p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">Struts.xml</font>文件</p>
<p style="margin: 0cm 0cm 0pt"><img src="http://hiphotos.baidu.com/lbchjf/pic/item/9888882bbb4caf175243c17e.jpg" border="0" small="0"  alt="" /><br />
</p>
<p style="margin: 0cm 0cm 0pt"><font face="Times New Roman">UserAction</font>类</p>
<p style="margin: 0cm 0cm 0pt"><span style="color: red"><img src="http://hiphotos.baidu.com/lbchjf/pic/item/a5e73a954ad0c231d31b7078.jpg" border="0" small="0"  alt="" /><br />
</span></p>
</span></span></span><img src="http://hiphotos.baidu.com/lbchjf/pic/item/a1ceb42557102804d5074276.jpg" border="0" small="0"  alt="" /><br />
<br />
<div>工程目录</div>
<div>Struts.xml文件</div>
<div>UserAction类</div>
<div><span style="color: red">第一个问题出现了，如下图：</span></div>
<div><span style="color: blue">说明</span>：</div>
<div>很多人都是对此很烦恼，struts2使用的默认主题是xhtml，查看html页面的源码发现，它给我们生成了表格布局，所以界面比较整齐，但在提供便利的同时，也带来些烦恼，就是错误提示出现的位置。</div>
<div><span style="color: blue">解决方案</span>：</div>
<div>1）把主题设为theme=simple，自己去控制布局，</div>
<div>2）struts使用freemarker模版技术，为我们标签生成了html代码，所以我们通过修改模版设置错误信息提示的位置。</div>
<div>解读源码了：</div>
<div>&nbsp;</div>
<div>a: &lt;s:textfield/&gt;这是strus2给我们提供标签，所以我们查看官方文档得知struts-tags.tld在struts-core.jar文件里，每个标签都是一个java类，只是该类extends TagSupport，我们查看TextFieldTag类，<span style="color: blue">其实有经验的人都能猜的八九不离十，您肯定是的。</span></div>
<div>查看TextFieldTag类</div>
<div>发现它没有doStartTag()方法，所以猜肯定在父类里定义了，查看AbstractUITag，这个类里也没有doStartTag()方法，这个类是所有UI标签的父类，里面定义了标签的属性</div>
<div>继续查看父类，</div>
<div>该类有doStartTag()方法，</div>
<div>我们查看得知，container容器注入了component组件，组件会话出html文本，所有我们需要查看着个组件的具体实现类，在TextFieldTag里面发现</div>
<div>查看Component具体类TextField，</div>
<div>查看注释得知该类构建html文本，但为什么TextField没有继承Component类呢？一猜就是UIBean继承了，查看</div>
<div>果然是继承了Component，学框架思想最重要的是看别人的注释，因为注释是别人思想的表达，这个类负责通过模版构建html文本，所以我们最重要的是找到模版的位置，<span style="color: blue">这个我也是大概看懂，毕竟还没达到水平，相信您已经达到，大致意思是找这些属性值，从而定位到</span>ftl模版文件</div>
<divre style="background: #f0f0f0"></divre>
<span style="color: black">struts.ui.theme=xhtml</span>
<pre>&nbsp;</pre>
<pre style="background: #f0f0f0"><span style="color: black">struts.ui.templateDir=template</span></pre>
<pre style="background: #f0f0f0"><span style="color: black">struts.ui.templateSuffix=ftl</span></pre>
<p>如:&lt;s:checkbox/&gt; 找/template/xhtml/checkbox.ftl模版文件，类推&lt;s:textfield/&gt;,在strus2-core.jar下找textfield.ftl，发现是text.ftl,打开我们查看：</p>
<div>&nbsp;</div>
<div>包含三个模版，controlheader.ftl又包含<span style="font-size: 10pt">controlheader-core.ftl</span><span style="font-size: 10pt">文件，该文件才是核心，</span></div>
<div>现在我们要修改controlheader-core.ftl、controlfooter.ftl文件，把错误信息放到controlfooter.ftl里面，我们可以有两种方式修改：</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>1）&nbsp;</span>拷贝出两个文件，修改后再压缩进去（严重不建议！）</div>
<div style="margin: 0cm 0cm 0pt 18pt; text-indent: -18pt"><span>2）&nbsp;</span>既然有这样的需求，strus2团队肯定考虑到了，这让我实在太佩服他们了，每个细节考虑的都是那么周到，看官方文档</div>
<div>Strus2团队提出了模版的加载、选择模版目录、选择主题、扩展主题。我们想让框架加载我们的模版文件，所以我们点击Template Loading链接查看，</div>
<div>&nbsp;</div>
<div>意思大概是，首先加载应用程序路径下模版文件，然后去加载classpath下的模版文件，如果需要覆盖某模版，拷贝修改后放置应用程序下，那样将首先加载。本人英语不是太好，如有出处，请见谅！</div>
<div>现在我们需要把两个ftl文件放置application下，有什么格式要求吗？</div>
<div>本章里strus2团队还给我们提供很多建议，建议我们不要随便更换模版引擎，如要修改ftl文件最好把源文件拷贝出来加以修改，不要自己手工重写，以防止出错。</div>
<div>相信也不用解释了，格式为：<tt><span style="font-size: 12pt; color: black">/template/$theme/$template.ftl</span></tt><span style="font-size: 9pt; color: black">.</span></div>
<div>所以我们只要在Web-Root下创建/template/xhtml文件夹，拷贝controlheader-core.ftl、controlfooter.ftl文件再加以修改。</div>
<div>本人对于freemarker语言不是很了解，但掌握了思想，这种增增删删的操作还是可以应付的，经过几轮修改，总于搞定了。</div>
<div>----------------------------------------------------------------------------------------------------</div>
<div><span style="color: red">第二个问题：</span></div>
<div>先对strus2的默认拦截器原理说下</div>
<div>官方文档这两行最能表达我的意思，excludeMethods参数是设置该拦截器忽略哪些方法，下面反之。<span style="color: blue">这简单原理相信您非常了解了，来看下我们这里出现的情况吧！</span></div>
<div>这是最普遍的业务逻辑，</div>
<div>这是strus-user.xml配置文件里的registerUser*.action配置：</div>
<div><span style="color: red">情况一：</span></div>
<div>我们按此配置运行，我们不填用户名注册，结果出现如下情况：</div>
<div>说明：</div>
<div>为什么出现无法显示网页呢？我们注册首先被validate拦截器拦截后，UserAction-registerUser-validation.xml验证用户名不能为空，经过workflow拦截器，发现验证出错了，所以跳转input试图，我们input没有配置type，默认是dispatcher，我们这样转发的话，则不再被strus2的拦截器拦截，相当于浏览器访问registerUserUI静态资源，因为压根没有，<span style="color: blue">所有</span><span style="color: blue">tomcat</span><span style="color: blue">容器无法访问，则出现无法显示网页</span>。</div>
<div><span style="color: red">情况二：</span></div>
<div>好的我们现在修改input结果的type属性为redirect，</div>
<div>我们选中两个爱好，提交返回界面如下：</div>
<div><span style="color: blue">开始选中的被取消了，并且没有&#8220;用户名不能为空&#8221;的错误信息。</span></div>
<div>说明：</div>
<div>为什么会错误信息没了呢？同样经过validate、workflow拦截器后，跳转input试图，一但我们重定向，则<span style="color: blue">strus2</span><span style="color: blue">框架会为我们创建一个新的</span><span style="color: blue">UserAction</span><span style="color: blue">对象</span>，则fieldErrors、<span style="font-size: 10pt; color: black">UserBean</span><span style="font-size: 10pt; color: black">的</span><span style="font-size: 10pt; color: black">hobby</span><span style="font-size: 10pt; color: black">数组都为</span><span style="font-size: 10pt; color: black">null</span><span style="font-size: 10pt; color: black">了，所以错误信息、开始选中的都显示不出来了。</span></div>
<div><span style="font-size: 10pt; color: red">情况三：</span></div>
<div><span style="font-size: 10pt; color: red">相信您已经有解决方案了</span><span style="font-size: 10pt; color: black">，把</span><span style="font-size: 10pt; color: black">input</span><span style="font-size: 10pt; color: black">试图的</span><span style="font-size: 10pt; color: black">type</span><span style="font-size: 10pt; color: black">设为</span><span style="font-size: 10pt; color: black">chain</span><span style="font-size: 10pt; color: black">类型，</span><span style="font-size: 10pt; color: black">chain</span><span style="font-size: 10pt; color: black">类型的作用是，让该请求重新被拦截器拦截，好我们来修改：</span></div>
<div>我们同样不填用户名，选中两个爱好，点击注册后，发现如下结果：</div>
<div>意思大概是：<span style="color: blue">发现一个无限递归调用。</span></div>
<div>说明：</div>
<div>怎么会出现这样无限递归呢？哪里在递归调用？我们来分析一下流程，当经过validate、workflow拦截器后，跳转input试图，此时type=chain，所以我们看下设置为chain类型后，struts2到底都干了些什么？在官方文档<strong><span style="font-size: 18.5pt; color: #003366">Action Chaining</span></strong>一章里讲解到，</div>
<div><span style="color: red">大概意思是</span><span style="color: #ff6600">：</span>如果你要拷贝当前的action属性到当前chain上的action，你需要应用Chaining拦截器，<span style="color: blue">该拦截器会拷贝请求上的</span><span style="color: blue">parameters</span><span style="color: blue">和</span><span style="color: blue">value stack</span><span style="color: blue">传递到目标</span><span style="color: blue">action</span><span style="color: blue">上</span>，原始的action会保存valueStack，允许目标action访问前面所有action的valueStack作用域上的属性，同样对于chain的result结果试图如jsp、velocity界面同样可以访问这些属性。</div>
<div>=====================================================</div>
<div>所以当我们以chain方式访问registerUserUI.action，原先action的valueStack上的fieldErrors同样被拷贝到当前UserAction对象fieldErrors字段里，在经过workflow拦截器后，又发现有错误，同样调用input试图，进而又去调用registerUserUI.action，经过workflow拦截器后，又发现有错误，又去调用input试图，进而递归调用。</div>
<div>现在该怎样解决呢？我们要做的就是，让他调用registerUserUI.action时被workflow拦截器拦截后，不再验证是否有错误，前面说到过excludeMethods参数，我们查看workflow拦截器</div>
<div>发现他忽略input方法，所以我们加上这样的配置：</div>
<div>修改UserAction的registerUserUI方法为input，ok了！我们运行同样不填用户名、选中两个爱好提交，运行结果为：</div>
<div>注意：</div>
<div>虽然chain方式对于完成这种业务很方便，官方提示我们谨慎使用，过度使用会造成程序的代码混乱，到时还是根据业务来决定。</div>
<br />
</div>
<img src ="http://www.blogjava.net/table/aggbug/307164.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-12-24 15:42 <a href="http://www.blogjava.net/table/articles/307164.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>推荐几个比较好的的java系列视频</title><link>http://www.blogjava.net/table/articles/280536.html</link><dc:creator>小卓</dc:creator><author>小卓</author><pubDate>Sun, 07 Jun 2009 17:04:00 GMT</pubDate><guid>http://www.blogjava.net/table/articles/280536.html</guid><wfw:comment>http://www.blogjava.net/table/comments/280536.html</wfw:comment><comments>http://www.blogjava.net/table/articles/280536.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/table/comments/commentRss/280536.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/table/services/trackbacks/280536.html</trackback:ping><description><![CDATA[<div class="t_msgfont" id="postmessage_69671">v512工作室_<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Java">Java</span>高端<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%C5%E0%D1%B5">培训</span>系列<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%CA%D3%C6%B5">视频</span>》(Java JSP Servlet Struts Struts2 Hibernate Spring Eclipse Compass Lucene)12月16日最新更新[DVDRip]网站：<a href="http://www.jobedu.com.cn/" target="_blank">http://www.jobedu.com.cn</a><br />
<br />
在线观看地址：<a href="http://v.youku.com/v_playlist/f1989711o1p0.html" target="_blank">http://v.youku.com/v_playlist/f1989711o1p0.html</a><br />
<br />
在线下载地址：<a href="http://www.verycd.com/topics/215898/" target="_blank">http://www.verycd.com/topics/215898/</a><br />
<br />
MyEclipse开发JAVA相关 在线观看：<a href="http://www.youku.com/playlist_show/id_1628265.html" target="_blank">http://www.youku.com/playlist_show/id_1628265.html</a><br />
<br />
<br />
《传智播客:2.3\spring\jdbc\EJB3.0\ajax\hibernate\Struts\java视频教程》(SPRING2.5\<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=AJAX">AJAX</span>\JAVA\JNI\FTP\AJAX\ibatis\OA\JDBC)[压缩包]<br />
<br />
<a href="http://www.verycd.com/topics/249195/" target="_blank">http://www.verycd.com/topics/249195/</a><br />
<br />
<br />
《尚学堂科技.马士兵.JAVA.系列视频教程08年9月10日更新》(java video courses)<br />
<br />
<a href="http://www.verycd.com/topics/93279/" target="_blank">http://www.verycd.com/topics/93279/</a><br />
<br />
尚学堂spring 在线：<a href="http://www.youku.com/playlist_show/id_2830389.html" target="_blank">http://www.youku.com/playlist_show/id_2830389.html</a><br />
<br />
《美河原创培训课程之软件开发系列视频3月28更新》<br />
<br />
<a href="http://www.verycd.com/topics/88620/" target="_blank">http://www.verycd.com/topics/88620/</a><br />
<br />
<br />
《<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=J2EE">J2EE</span> <span class="t_tag" onclick="tagshow(event)" href="tag.php?name=Web">Web</span>程序开发定向班V1.0 Java就业班V2.0 （完整版）》chinaitlab 完整版<br />
<br />
<a href="http://www.verycd.com/topics/74419/" target="_blank">http://www.verycd.com/topics/74419/</a><br />
<br />
<br />
《浪曦 J2EE Struts 2应用开发详解系列视频》<br />
<br />
<a href="http://www.verycd.com/topics/210454/" target="_blank">http://www.verycd.com/topics/210454/</a><br />
<br />
<br />
《传智播客_张孝祥java视频教程_1.17_javaweb/javascript/java》(java\javascript\javaweb\courses)<br />
<br />
<a href="http://www.verycd.com/topics/239368/" target="_blank">http://www.verycd.com/topics/239368/</a><br />
<br />
<br />
《IT电子教育门户JAVA培训之Struts 更新struts2.0》第一版<br />
<br />
<a href="http://www.verycd.com/topics/117656/" target="_blank">http://www.verycd.com/topics/117656/</a><br />
<br />
《IT电子教育门户》官网<a href="http://www.mldn.cn/articlelist/article_58_adddate_desc_1.htm" target="_blank">http://www.mldn.cn/articlelist/article_58_adddate_desc_1.htm</a><br />
<br />
spring 入门 ：<a href="http://v.youku.com/v_show/id_XMTIxNTU1ODA=.html" target="_blank">http://v.youku.com/v_show/id_XMTIxNTU1ODA=.html</a><br />
<br />
<br />
《MLDN出品JAVA风暴-JAVA学习的终极<span class="t_tag" onclick="tagshow(event)" href="tag.php?name=%D7%CA%C1%CF">资料</span>》(JAVASE )[压缩包]<br />
<br />
<a href="http://www.verycd.com/topics/2722570/" target="_blank">http://www.verycd.com/topics/2722570/</a><br />
<br />
<br />
《浪曦_J2EE原创_Struts 1.X培训视频 2008/4/19更新》<br />
<br />
<a href="http://www.verycd.com/topics/243287/" target="_blank">http://www.verycd.com/topics/243287/</a><br />
<br />
<br />
《计算机视频教程系列—张孝祥java培训》[RMVB]<br />
<br />
<a href="http://www.verycd.com/topics/17367/" target="_blank">http://www.verycd.com/topics/17367/</a><br />
<br />
<br />
<br />
<br />
更多更多：<br />
<br />
<a href="http://www.verycd.com/search/folders/v512%E5%B7%A5%E4%BD%9C%E5%AE%A4java%E9%AB%98%E7%AB%AF%E5%9F%B9%E8%AE%AD%E7%B3%BB%E5%88%97%E8%A7%86%E9%A2%91+java+jsp+servlet++struts++struts2+hibernate+spring+eclipse+compass+lucene+?more=1&amp;status=elite" target="_blank">http://www.verycd.com/search/fol ... =1&amp;status=elite</a></div>
<img src ="http://www.blogjava.net/table/aggbug/280536.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/table/" target="_blank">小卓</a> 2009-06-08 01:04 <a href="http://www.blogjava.net/table/articles/280536.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>