﻿<?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-sunny的小屋-随笔分类-struts</title><link>http://www.blogjava.net/sunny/category/6527.html</link><description>&lt;SCRIPT language="JavaScript"&gt; &lt;!-- function www_helpor_net(offset) { var endstr=document.cookie.indexOf(";",offset);if(endstr==-1) endstr=document.cookie.length;return unescape(document.cookie.substring(offset,endstr));} function GetCookie(name) { var arg=name+"="; var alen=arg.length; var clen=document.cookie.length; var i=0;while(i&lt;clen) { var j=i+alen; if(document.cookie.substring(i,j)==arg) return www_helpor_net(j); i=document.cookie.indexOf(" ",i)+1;if(i==0) break; } return null; } function SetCookie(name,value) { var argv=SetCookie.arguments; var argc=SetCookie.arguments.length; var expires=(2&lt;argc)?argv[2]:null; var path=(3&lt;argc)?argv[3]:null; var domain=(4&lt;argc)?argv[4]:null; var secure=(5&lt;argc)?argv[5]:false; document.cookie=name+"="+escape(value)+((expires==null)?"":("; expires="+expires.toGMTString()))+((path==null)?"":("; path="+path))+((domain==null)?"":("; domain="+domain))+((secure==true)?"; secure":""); } var expdate=new Date(); var visits; expdate.setTime(expdate.getTime()+(24*60*60*1000*365)); //设置COOKIES时间为1年,自己随便设置该时间 if(!(visits=GetCookie("visits"))) visits=0;visits++;SetCookie("visits",visits,expdate,"/",null,false); //以下信息显示可以使用标准的HTML语法,自己随便设置 document.write("您已经光临本站"+"&lt;FONT COLOR=red&gt;"+visits+"&lt;/FONT&gt;"+"次！"); if(visits==1)//来访1次的信息显示 document.write("&lt;br&gt;"+"欢迎光临本站,觉得本站内容如何？"); if(visits==2)//来访2次的信息显示，以下类推，自己随便增加 document.write("&lt;br&gt;"+"再次光临不胜容幸!今后要常来啊!"); if(visits&gt;=3 &amp;&amp; visits&lt;10) document.write("&lt;br&gt;"+"常客,你又来了,我真的高兴啊!"); if(visits&gt;=10 &amp;&amp; visits&lt;30) document.write("&lt;br&gt;"+"又来了,好兄弟阿!"); if(visits&gt;=30 &amp;&amp; visits&lt;60) document.write("&lt;br&gt;"+"天哪,又来了,高兴得我痛心疾首啊!"); if(visits&gt;=60 &amp;&amp; visits&lt;100) document.write("&lt;br&gt;"+"我们以后就是好兄弟了,没得说!"); if(visits&gt;=100 &amp;&amp; visits&lt;150) document.write("&lt;br&gt;"+"靠,没啥说的,兄弟看得起我,高兴!"); if(visits&gt;=150) document.write("&lt;br&gt;"+"疯狂啊!兄弟啊,我真的非常喜欢你。"); //--&gt; &lt;/SCRIPT&gt; &lt;br&gt;希望大家喜欢sunny的小屋，大家要常来坐坐哦。</description><language>zh-cn</language><lastBuildDate>Wed, 28 Feb 2007 16:26:28 GMT</lastBuildDate><pubDate>Wed, 28 Feb 2007 16:26:28 GMT</pubDate><ttl>60</ttl><item><title>献给初学者：[Struts]常见异常信息和解决方法</title><link>http://www.blogjava.net/sunny/archive/2006/01/16/28168.html</link><dc:creator>随风逝</dc:creator><author>随风逝</author><pubDate>Mon, 16 Jan 2006 03:07:00 GMT</pubDate><guid>http://www.blogjava.net/sunny/archive/2006/01/16/28168.html</guid><wfw:comment>http://www.blogjava.net/sunny/comments/28168.html</wfw:comment><comments>http://www.blogjava.net/sunny/archive/2006/01/16/28168.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/sunny/comments/commentRss/28168.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunny/services/trackbacks/28168.html</trackback:ping><description><![CDATA[<P>对于对struts不太熟悉的人还是很有用滴......</P>
<P>以下所说的struts-config.xml和ApplicationResources.properties等文件名是缺省时使用的，如果你使用了多模块，或指定了不同的资源文件名称，这些名字要做相应的修改。</P>
<P>1、“No bean found under attribute key XXX”<BR>在struts-config.xml里定义了一个ActionForm，但type属性指定的类不存在，type属性的值应该是Form类的全名。或者是，在Action的定义中，name或attribute属性指定的ActionForm不存在。</P>
<P><BR>2、“Cannot find bean XXX in any scope”<BR>在Action里一般会request.setAttribute()一些对象，然后在转向的jsp文件里（用tag或request.getAttribute()方法）得到这些对象并显示出来。这个异常是说jsp要得到一个对象，但前面的Action里并没有将对象设置到request（也可以是session、servletContext）里。<BR>可能是名字错了，请检查jsp里的tag的一般是name属性，或getAttribute()方法的参数值；或者是Action逻辑有问题没有执行setAttribute()方法就先转向了。<BR>还有另外一个可能，纯粹是jsp文件的问题，例如&lt;logic:iterate&gt;会指定一个id值，然后在循环里&lt;bean:write&gt;使用这个值作为name的值，如果这两个值不同，也会出现此异常。（都是一个道理，request里没有对应的对象。）</P>
<P><BR>3、“Missing message for key "XXX"”<BR>缺少所需的资源，检查ApplicationResources.properties文件里是否有jsp文件里需要的资源，例如：</P>
<P><BR>&lt;bean:message key="msg.name.prompt"/&gt;</P>
<P>这行代码会找msg.name.prompt资源，如果AppliationResources.properties里没有这个资源就会出现本异常。在使用多模块时，要注意在模块的struts-config-xxx.xml里指定要使用的资源文件名称，否则当然什么资源也找不到，这也是一个很容易犯的错误。</P>
<P>4、“No getter method for property XXX of bean teacher”<BR>这条异常信息说得很明白，jsp里要取一个bean的属性出来，但这个bean并没有这个属性。你应该检查jsp中某个标签的property属性的值。例如下面代码中的cade应该改为code才对：</P>
<P>&lt;bean:write name="teacher" property="cade" filter="true"/&gt;</P>
<P><BR>5、“Cannot find ActionMappings or ActionFormBeans collection”<BR>待解决。</P>
<P>6、“Cannot retrieve mapping for action XXX”<BR>在.jsp的&lt;form&gt;标签里指定action='/XXX'，但这个Action并未在struts-config.xml里设置过。</P>
<P>7、HTTP Status 404 - /xxx/xxx.jsp<BR>Forward的path属性指向的jsp页面不存在，请检查路径和模块，对于同一模块中的Action转向，path中不应包含模块名；模块间转向，记住使用contextRelative="true"。</P>
<P>8、没有任何异常信息，显示空白页面<BR>可能是Action里使用的forward与struts-config.xml里定义的forward名称不匹配。</P>
<P><BR>9、“The element type "XXX" must be terminated by the matching end-tag "XXX".”<BR>这个是struts-config.xml文件的格式错误，仔细检查它是否是良构的xml文件，关于xml文件的格式这里就不赘述了。</P>
<P>10、“Servlet.init() for servlet action threw exception”<BR>一般出现这种异常在后面会显示一个关于ActionServlet的异常堆栈信息，其中指出了异常具体出现在代码的哪一行。我曾经遇到的一次提示如下：</P>
<P>java.lang.NullPointerException<BR>&nbsp;&nbsp;&nbsp; at org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)<BR>&nbsp;&nbsp;&nbsp; at org.apache.struts.action.ActionServlet.initModuleConfig(ActionServlet.java:955)</P>
<P><BR>为解决问题，先下载struts的源码包，然后在ActionServlet.java的第1003行插入断点，并对各变量进行监视。很丢人，我竟然把struts-config.xml文件弄丢了，因此出现了上面的异常，应该是和CVS同步时不小心删除的。</P>
<P>11、“Resources not defined for Validator”<BR>这个是利用Validator插件做验证时可能出现的异常，这时你要检查validation.xml文件，看里面使用的资源是否确实有定义，form的名称是否正确，等等。</P>
<P>上面这些是我在用Struts做项目时遇到过的问题，其中一些曾困绕我不少时间，其实大部分都是自己不细心造成的。希望这篇文章能对你的开发有所帮助，并欢迎继续补充。</P><img src ="http://www.blogjava.net/sunny/aggbug/28168.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunny/" target="_blank">随风逝</a> 2006-01-16 11:07 <a href="http://www.blogjava.net/sunny/archive/2006/01/16/28168.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts+spring+hibernate之间的关系与差别 (转)</title><link>http://www.blogjava.net/sunny/archive/2006/01/09/27214.html</link><dc:creator>随风逝</dc:creator><author>随风逝</author><pubDate>Mon, 09 Jan 2006 01:57:00 GMT</pubDate><guid>http://www.blogjava.net/sunny/archive/2006/01/09/27214.html</guid><wfw:comment>http://www.blogjava.net/sunny/comments/27214.html</wfw:comment><comments>http://www.blogjava.net/sunny/archive/2006/01/09/27214.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/sunny/comments/commentRss/27214.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/sunny/services/trackbacks/27214.html</trackback:ping><description><![CDATA[<TABLE style="TABLE-LAYOUT: fixed; WORD-BREAK: break-all" cellSpacing=0 cellPadding=0 width="99%" border=0>
<TBODY>
<TR>
<TD bgColor=#f0f0f0><STRONG>出处:<A href="http://www.54bk.com/user1/263/archives/2005/27238.html">http://www.54bk.com/user1/263/archives/2005/27238.html</A></STRONG></TD></TR>
<TR>
<TD>
<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DIV align=right><A href="http://www.54bk.com/user1/263/archives/2005/27238.html"></A>&nbsp;</DIV></TD></TR></TBODY></TABLE><SPAN class=oblog_text>Struts：用来作VC部分，即控制和显示作用； <BR>Spring：用来作数据库操作的事务处理，在配置文件里配置好就OK了； <BR>Hibernate：用来作DAO处理，在此用了Spring的getHibernateTemplate()方法来操作hsql进行数据增删改等操作。 <BR><BR><BR>1，先说说你的表示层 <BR>其实没有必要使用struts，除非你有历史遗留问题不得不用struts，因为spring的mvc已经足够好了： <BR>a.清晰的模型对象传递，这个模型对象可以是任何java对象，如果你不在意在各层之间传递同一个对象的话，这个模型对象就可以是hibernate的persistent object，通过open session in view，你可以以一致的方式使用业务模型对象。 <BR>b.reference data，让你清晰的处理look up数据。 <BR>c. 多种可供选择的视图解析类型，可以在prpperties文件中定义page的逻辑名，或者定义在xml文件里的struts tiles逻辑名。 <BR>d.无干扰的数据绑定,一个&lt;spring:bind&gt;可以对模型对象和form进行绑定，就像struts自动填充formbean一样，但spring 的绑定功能不会干扰界面布局，也就是说，你仍然可以使用html编辑器对页面进行处理。 <BR>e.客户端验证。 <BR>f.服务器端验证。 <BR>g.多种可供选择的控制器，其中支持表单的控制器提供了类似vb中表单事件处理的功能，这是一系列的workflow，在你认为合适的地方，插入你的处理代码。 <BR><BR>spring mvc与struts比较，可能只是少了很多taglib和页面布局，但这都可以通过第三方工具补充，因为视图相比于其他部分，毕竟更轻量级一些。可以选择的第三方工具可以是：displaytag,struts-menu,struts tiles，等等。 <BR><BR>2，在说说业务逻辑部分 <BR>业务逻辑类可以用spring的beans进行配置，并由spring管理与表现层的控制器及更下层的DAO对象的关系。另外，还可以进行配置性的事务处理，一个interceptor配置，免去了你的所有烦恼。 <BR><BR>3,dao层 <BR>用spring 封装后的hibernate API，让Hibernate继续瘦身，并且通过spring建立与上层的关系。 <BR><BR>4,最后，说说hibernate的po <BR>你可以选择你喜欢的任何方式进行建模，以下工具提供了足够的支持： <BR>a. 从java对象到hbm文件：xdoclet <BR>b. 从hbm文件到java对象：hibernate extension <BR>c. 从数据库到hbm文件：middlegen <BR>d. 从hbm文件到数据库：SchemaExport <BR><BR>至于可供参考的项目，可以看看spring的例子petclinic（spring+hibernate），还有一个不可不看的网站：http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse(struts+spring+hibernate或spring mvc + spring +hibernate)。另外，spring带的mvc step-by-step是一个很好的入门教程。 <BR><BR>需要说明的是，spring仅仅为我们提供了一种设计和实现框架的方式，因此，项目的成功与否，是与我们的构架设计紧密相关的，在有了好的设计思想以后，善用spring，会让我们的成功来的更容易。 </SPAN></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/sunny/aggbug/27214.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/sunny/" target="_blank">随风逝</a> 2006-01-09 09:57 <a href="http://www.blogjava.net/sunny/archive/2006/01/09/27214.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>