﻿<?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-马可波罗的梦乡-文章分类-Struts</title><link>http://www.blogjava.net/thinke365/category/41955.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 21 Oct 2009 08:10:27 GMT</lastBuildDate><pubDate>Wed, 21 Oct 2009 08:10:27 GMT</pubDate><ttl>60</ttl><item><title>Struts Features</title><link>http://www.blogjava.net/thinke365/articles/298321.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Thu, 15 Oct 2009 01:54:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/298321.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/298321.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/298321.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/298321.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/298321.html</trackback:ping><description><![CDATA[1、freemarker读取属性，也是和OGNL集成在一起的?<br />
2、ValueStack的概念已经在多个地方看到，包括Struts和OGNL。在Lite中也有ValueStack的概念。<br />
<img src ="http://www.blogjava.net/thinke365/aggbug/298321.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-15 09:54 <a href="http://www.blogjava.net/thinke365/articles/298321.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts Extend</title><link>http://www.blogjava.net/thinke365/articles/298002.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Mon, 12 Oct 2009 15:20:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/298002.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/298002.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/298002.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/298002.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/298002.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;只有注册用户登录后才能阅读该文。<a href='http://www.blogjava.net/thinke365/articles/298002.html'>阅读全文</a><img src ="http://www.blogjava.net/thinke365/aggbug/298002.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-12 23:20 <a href="http://www.blogjava.net/thinke365/articles/298002.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts表达式语言</title><link>http://www.blogjava.net/thinke365/articles/297770.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Sun, 11 Oct 2009 05:21:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297770.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297770.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297770.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297770.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297770.html</trackback:ping><description><![CDATA[<span><span class="tag">在JSP中开启表达式语言，需要加如下这样一行：<br />
&lt;</span><span>%@&nbsp;page&nbsp;&nbsp;</span><span class="attribute">isELIgnored</span><span>&nbsp;=&nbsp;</span><span class="attribute-value">"false"</span><span>&nbsp;%</span><span class="tag">&gt;</span><span>&nbsp;<br />
<br />
</span></span>
<img src ="http://www.blogjava.net/thinke365/aggbug/297770.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-11 13:21 <a href="http://www.blogjava.net/thinke365/articles/297770.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts标签</title><link>http://www.blogjava.net/thinke365/articles/297695.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Sat, 10 Oct 2009 08:22:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297695.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297695.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297695.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297695.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297695.html</trackback:ping><description><![CDATA[1、&lt;h2&gt;欢迎&lt;s:property value="<span style="color: #800000">username</span>" /&gt;。。。&lt;/h2&gt;，action之后读取出对象里面的属性。这里的<span style="font-size: 10pt; color: #800000">属性是大小写敏感的</span>。
<img src ="http://www.blogjava.net/thinke365/aggbug/297695.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-10 16:22 <a href="http://www.blogjava.net/thinke365/articles/297695.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts国际化</title><link>http://www.blogjava.net/thinke365/articles/297673.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Sat, 10 Oct 2009 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297673.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297673.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297673.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297673.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297673.html</trackback:ping><description><![CDATA[可以通过getText实现国际化
<img src ="http://www.blogjava.net/thinke365/aggbug/297673.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-10 14:26 <a href="http://www.blogjava.net/thinke365/articles/297673.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts</title><link>http://www.blogjava.net/thinke365/articles/297622.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Fri, 09 Oct 2009 23:56:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297622.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297622.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297622.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297622.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297622.html</trackback:ping><description><![CDATA[Action接口，定义了多个静态变量，用于处理不同的情况。<br />
SUCCESS:动作执行成功，并显示视图。<br />
NONE:动作执行成功，但是并<span style="font-size: 10pt; color: #0000ff">不显示视图，在用到redirect等情况的时候，需要用到NONE</span>。<br />
ERROR:动作执行失败，显示错误视图。<br />
INPUT:<span style="font-size: 10pt; color: #0000ff">需要额外的输入，才可以完成动作</span>。在处理表单的时候，尤其需要用到这个功能。<br />
LOGIN:不能成功执行动作，因为用户还没有登录，<span style="font-size: 10pt; color: #0000ff">显示登录视图</span>。<br />
exec():执行动作<span style="font-size: 10pt; color: red"><strong>内部逻辑</strong></span>的地方。<br />
<br />
<img src ="http://www.blogjava.net/thinke365/aggbug/297622.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-10 07:56 <a href="http://www.blogjava.net/thinke365/articles/297622.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts配置</title><link>http://www.blogjava.net/thinke365/articles/297317.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Tue, 06 Oct 2009 09:24:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297317.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297317.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297317.html</trackback:ping><description><![CDATA[<p>1、一个大型应用，需要一个团队来完成。当不同开发人员开发的<span style="font-size: 10pt; color: #0000ff">不同模块集成</span>到一起的时候，<span style="font-size: 10pt; color: #0000ff"><strong>配置文件的数量和内容也是非常可观的</strong></span>。<br />
(<span style="font-size: 10pt; color: #ff0000"><strong>配置的优化是个大问题</strong></span>)<br />
Struts1中使用ActionForm和ActionForward，增加了不少配置内容。<br />
Struts2部分改善了配置文件，但是<span style="font-size: 10pt; color: #0000ff"><strong>在一个大型应用中管理好配置文件也是需要花费很多精力的</strong></span>。<br />
Struts框架的配置分类如下：<br />
(1)管理元素<br />
Bean配置、常量配置、包配置、命名空间配置、包含配置<br />
(2)用户请求处理元素<br />
拦截器配置、Action配置、result配置<br />
(3)错误处理<br />
异常配置<br />
<br />
2、Struts2也是<span style="font-size: 10pt; color: #ff0000"><strong>支持插件机制</strong></span>的。<br />
Struts.xml中配置Action，还可以配置package,<span style="color: #0000ff">package可以有继承关系</span>。设定的值中，还可以加变量。。。<br />
<br />
3、配置拦截器<br />
<br />
4、url-pattern仍然配置在web.xml中。struts中配置的是和流程相关的一些东西。和页面的跳转有关系(根据输入决定跳转的页面。。。)<br />
5、package里可以include文件。<br />
6、<span style="font-size: 10pt; color: #0000ff"><strong>Action名可以加通配符</strong></span>。。。<br />
</p>
7、零配置问题：并不是没有配置。a.通过规则配置；//可以针对某个package及其子包，所有的Action被被加载到Action中。b、直接把配置写在代码注释中。 <span style="font-size: 10pt; color: #ff0000">两个需要结合的</span>?<br />
<br />
<img src ="http://www.blogjava.net/thinke365/aggbug/297317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-06 17:24 <a href="http://www.blogjava.net/thinke365/articles/297317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts Practise</title><link>http://www.blogjava.net/thinke365/articles/297223.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Sun, 04 Oct 2009 20:20:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297223.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297223.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297223.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297223.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297223.html</trackback:ping><description><![CDATA[1、可以使用POJO，只要里面定义了exec方法就可以了。<br />
2、Struts开始不能调出datatimepicker，使用了&lt;sx:head extraLocales="zh" /&gt; ，&lt;sx:datetimepicker name="birthday" label="生日: " displayFormat="yyyy-MM-dd" language="zh" /&gt;终于解决问题。<br />
3、datatimepicker1-8月正常，之后就出现乱码，是<span style="font-size: 10pt; color: red">struts2-dojo-plugin</span>的问题。。。把jar包里的dojo_zh.js里面的乱码替换掉，恢复正常。不过这个菜单控件<span style="font-size: 10pt; color: #0000ff">效果没有Ext好看</span>。<br />
4、如果Action execute()返回的值，在struts.xml中没有配置，则会报错。 <span style="color: red"><strong style="font-size: 10pt">相当于一个转向分支flag</strong></span>。。。<br />
5、Struts一般的配置已经搞过了，<span style="font-size: 10pt; color: red"><strong style="color: #800080">下一步尝试在里面配置拦截器</strong></span>。<br />
<br />
6、Struts的默认错误页面配置终于搞定。以前配置离正确只有一步之遥，<span style="font-size: 10pt; color: #0000ff">但是总得到错误的结果</span>。<br />
和配置的顺序还有关系? <span style="font-size: 10pt; color: #800080">default-action-ref必须定义在包中，且必须定义在该包中，所有action的前面?<br />
</span><span style="font-size: 10pt; color: #ff0000">以前的XML定义并没见过这种严格的顺序啊。。。</span><br />
更有秩序?<br />
<br />
<br />
MileStone:<br />
1、freemarker视图技术添加完毕。开发过程遇到freemark不能加载的问题，查看maven Repository之后，发现<span style="font-size: 10pt; color: #0000ff">原来下载过来的jar包是损坏的</span>，其实mvn dependency:resolve 的输出信息也显示 MD5校验出错。这个错误也耗了好一会儿去查找，还好有svn版本库，管理起来要方便很多了。 现在<span style="font-size: 10pt; color: #0000ff">又马上做了一个tag，是一个基线，相当于milestone吧</span>：）<br />
SimpleHash是Freemarker中的类，最开始报的错都出在这里。<br />
<span style="font-size: 10pt; color: red">Struts Action，不论是否加.action后缀都可以访问到?<br />
</span>2、<br />
<img src ="http://www.blogjava.net/thinke365/aggbug/297223.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-05 04:20 <a href="http://www.blogjava.net/thinke365/articles/297223.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts Concept</title><link>http://www.blogjava.net/thinke365/articles/297154.html</link><dc:creator>梦回唐朝</dc:creator><author>梦回唐朝</author><pubDate>Sat, 03 Oct 2009 12:24:00 GMT</pubDate><guid>http://www.blogjava.net/thinke365/articles/297154.html</guid><wfw:comment>http://www.blogjava.net/thinke365/comments/297154.html</wfw:comment><comments>http://www.blogjava.net/thinke365/articles/297154.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/thinke365/comments/commentRss/297154.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/thinke365/services/trackbacks/297154.html</trackback:ping><description><![CDATA[1、J2EE平台的三大核心技术是 Servlet、JSP和EJB<br />
2、Web程序日益复杂，<span style="font-size: 10pt; color: #0000ff">单纯某种技术无法做到快速开发、快速验证和快速部署的最佳境界</span>。人们开始尝试着将已有的Web技术综合起来，形成完整的开发框架或应用模型。<br />
3、控制器调用视图来显示模型的数据。(<span style="font-size: 10pt; color: #0000ff">之前会把请求转发给模型，让模型来处理业务</span>，并返回数据)<br />
4、模型调用视图，显示模型数据的变更。<br />
5、控制器提高了应用程序的灵活性和可配置性。<br />
6、将MVC运用到应用程序中，<span style="font-size: 10pt; color: #800080"><strong>会带来额外的工作量</strong></span>，增加应用的复杂性，所以<span style="font-size: 10pt; color: #0000ff">MVC不适合小型应用程序</span>。<br />
7、struts-config.xml<span style="font-size: 10pt; color: #0000ff">用于建立Controller和Model之间的关系</span>。<br />
8、Velocity Template，使UI组件可重用<br />
9、<span style="color: #0000ff">struts2是基于webwork框架的</span>，它比strus1.x更简单，更灵活。<br />
10、拦截器是Struts2的核心内容之一。<br />
11、struts.xml是Struts 2框架的核心配置文件<br />
12、Struts2中的Action只是一个普通Java类(POJO)，这是同Struts 1.X的重要区别之一。<br />
13、Struts2的<span style="font-size: 10pt; color: #0000ff">优点之一就是提供了标签库</span>。使用标签库，可以使代码变得简洁、可读性大大提高，并给开发人员带来了巨大的便利。<br />
14、<span style="font-size: 10pt; color: #0000ff">Struts2不再支持内建的IOC容器，而是全面使用Spring的IoC容器</span>。<br />
<br />
15、<span style="font-size: 10pt; color: red"><strong>FilterDispatcher是Struts的核心控制器</strong></span>。<span style="color: #800080"><strong>可以和 bpm联合吗?<br />
</strong></span>FilterDispatcher询问ActionMapper是否需要调用某个Action来处理请求，如果需要，FilterDispatcher会把请求交给ActionProxy,他会通过ConfigurationManager询问框架的配置文件，找到需要调用的Action。在调用前，ActionInvocation会加载Action相关的所有拦截器。<br />
最后，ActionInvocation根据struts.xml配置找到对应的返回结果result。<br />
<br />
16、Struts2框架的目的就是<span style="font-size: 10pt; color: #0000ff">使用Action来调用业务逻辑模块</span>。<span style="font-size: 10pt; color: #ff0000"><strong>Action中不实现任何业务逻辑，只是负责组织调度业务逻辑组件</strong></span>。<br />
(业务控制器Action<span style="font-size: 10pt; color: #0000ff"><strong>一般情况下不是直接创建业务逻辑组件实例</strong></span>，而是<span style="font-size: 10pt; color: #800080"><strong>通过使用工厂模式或从Spring容器中获得业务逻辑组件实例</strong></span>，这样可以提高系统的性能)。<br />
<br />
17、Struts1只能支持JSP作为视图资源，<span style="font-size: 10pt; color: #0000ff"><strong>Struts2支持其他视图技术，如FreeMarker，Velocity等</strong></span>。<br />
每个result有一个type属性，<span style="font-size: 10pt; color: #0000ff"><strong>指定了对应的视图资源类型</strong></span>，<span style="font-size: 10pt; color: #800080">如果不写，会使用默认的type类型</span>，即JSP类型的视图资源。<br />
18、Struts2的配置文件时整个框架的联系纽带，也是<span style="font-size: 10pt; color: #800000">降低各类组件耦合程度的一种手段</span>。<br />
<br />
19、Struts2最大的特点之一，是实现了Action和Servlet API的分离。在Struts1中要复杂很多。<br />
pojo的exec()不用任何参数，只是返回一个<span style="font-size: 10pt; color: red">字符类型的值</span>。<br />
<br />
20、<span style="font-size: 10pt; color: red"><strong>ValueStack和OGNL是Struts2引入的新东西</strong></span>，Webwork中原来就有，但是Strus1中是没有的。<br />
值栈ValueStack和OGNL的一个简单并且强大特性在于，<span style="font-size: 10pt; color: #800080"><strong>他们不属于Strus2框架中的任何一个组件，它是独立的，与框架分离</strong></span>。<br />
无论拦截器还是result，都可以通过OGNL来访问值栈。<br />
<span style="font-size: 10pt; color: #0000ff"><strong>值栈存在于局部线程的ActionContext中</strong></span>。<br />
Struts2框架在处理每一个用户请求的时候，都建立一个单独的线程进行处理，值栈也是伴随着局部线程而存在的。<span style="font-size: 10pt; color: #993366"><strong>在线程存在过程中，可以随意访问值栈，这就保证了值栈的安全性</strong></span>。<br />
<br />
21、FreeMarker页面不能直接通过URL访问，这样访问看到的只能是 freemarker页面源码。。。<br />
<span style="font-size: 10pt; color: #0000ff">一定要通过action进行访问。只有通过action才能把 模板和数据模型结合起来</span>，并返还给用户。<br />
<br />
22、Struts配置DTD定义。&nbsp;&nbsp; (<span style="font-size: 10pt; color: #800080"><strong>文档格式定义</strong></span>)<br />
&lt;!ELEMENT struts (package|include|bean|constant)*&gt;&nbsp; // 表示package, include, bean和constant并没有顺序要求。<br />
&lt;!ELEMENT package (result-types?, interceptors?, default-interceptor-ref?, <span style="color: red">default-action-ref</span>?, default-class-ref?, global-results?, global-exception-mappings?, <span style="color: red">action</span>*)&gt;&nbsp; // <span style="font-size: 10pt; color: red"><strong>这里使用的是逗号，实际上是有顺序要求的？</strong></span>如default-action-ref必须要定义在action之前。。。<br />
<br />
/////////////////////////////////////////////////////////////////////////////////////////////<br />
1、form里，<span style="font-size: 10pt; color: red"><strong>原来提交的action是指向一个JSP页面的</strong></span>。<span style="font-size: 10pt; color: #339966"><strong>现在是指向某个的Struts Action</strong></span>，<span style="font-size: 10pt; color: #800080">可以根据输出，有选择地指向多个JSP页面，或者也可以采用其他视图技术</span>。<br />
2、ActionContext是Action运行的上下文环境(<span style="font-size: 10pt; color: #993366">通过继承ActionSupport，可以直接获得该方法</span>)。可以<span style="color: #0000ff">通过静态方法getContext获得 Action的上下文</span>。之后可以通过getApplication()和getSession()对Application和Session的参数进行访问。<br />
<img src ="http://www.blogjava.net/thinke365/aggbug/297154.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/thinke365/" target="_blank">梦回唐朝</a> 2009-10-03 20:24 <a href="http://www.blogjava.net/thinke365/articles/297154.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>