`
eeeeeeee
  • 浏览: 39207 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

我眼中的struts2

阅读更多
用过struts2的朋友都知道,struts2其实是webwork+Apache Shale的一个结合,最初的名字是struts action 2,和他的两个父类相比,struts2 是通过接口代理实现的(struts和webwork2 是基于servlet),而在struts里虽然很多都是用的jsp作为展示,但是freemarker已经被大量的使用了(至少我接触到的很多公司都开始使用freemarker作为现实的首选代替jsp),所以在下整理了一点freemarker经常会用到的取值方法以供参考。
${Request["a"]}
${RequestParameters["a"]}
${Session ["a"]}
${Application ["a"]}
${JspTaglibs ["a"]}
注意RequestParameters等内部对象时常不能获得所以要:
${RequestParameters?default({})["_errors"]?default("params")}
${Request["request"]?default("request")}
${Session["session"]?default("session")}
${Application["ctx"]?default("ctx")}
${RequestParameters?default({})?keys?size}
${Request?keys?first}
Freemarker可以直接取pageContext,requestAttribute,session,application中的数据,就是不能取requestParameter;

然后,里面还有一个和webwork出自opensymphony的是SiteMesh(就是我们常说的页面装饰器),首先是在web.xml里面加入
<!-- siteMesh start -->
<filter>
<filter-name>struts-cleanup</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ActionContextCleanUp
</filter-class>
</filter>

<filter>
<filter-name>sitemesh</filter-name>
<filter-class>
com.opensymphony.module.sitemesh.filter.PageFilter
</filter-class>
</filter>

<filter-mapping>
<filter-name>struts-cleanup</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- siteMesh end -->

然后是在web-inf下面加入decorators.xml,当然了,由于在装饰页面的时候会用到显示标签,最好吧sitemesh-decorator.tld和sitemesh-page.tld一起放入。而在decorators.xml里面:
<decorators defaultdir="/">
<!-- 排除页面 -->
<excludes>
<pattern>/index.jsp</pattern>
<pattern>/alipay/toquery*</pattern>
</excludes>
<!-- 制定main容器 -->
<decorator name="main_sitemesh" page="/sitemesh/main.jsp">
<pattern>/*</pattern>
<pattern>/pages/center/message/*</pattern>
<pattern>/usercenter/message/*</pattern>
<pattern>/usercenter/readuser*</pattern>
<pattern>/usercenter/account/*</pattern>
<pattern>/usercenter/membercenter*</pattern>
<pattern>/usercenter/searchuser*</pattern>
</decorator>

<decorator name="joblist_sitemesh" page="/sitemesh/joblist.jsp">
<pattern>/pages/joblist/*</pattern>
<pattern>/joblist/*</pattern>
</decorator>

<!--装饰用的统一界面-->
<decorator name="pagehead" page="/sitemesh/head.jsp"/>
<decorator name="pagefoot" page="/sitemesh/foot.jsp"/>
<decorator name="jobsearch" page="/sitemesh/jobserach.jsp"/>
<decorator name="joblist_left" page="/sitemesh/joblist_model_left.jsp"/>
<decorator name="joblist_roll" page="/sitemesh/joblist_model_roll.jsp"/>
<decorator name="usercenter_left" page="/sitemesh/usercenter_left.jsp"/>
</decorators>
而在页面里会用到
<%@ taglib uri="/WEB-INF/sitemesh-decorator.tld" prefix="decorator" %>
<%@ taglib uri="/WEB-INF/sitemesh-page.tld" prefix="page" %>
其中page是最关键的部分,因为他是控制页面的相关显示,而decorator主要是用于显示默认和过滤页面自带的信息。
当然了,在配置ssh的时候我遇到一个很弱智的问题,这个问题主要是我自己的原因,和struts一样struts2 也有个相关的在spring的xml里面会涉及
<bean id="demoAction" class="com.aea.demo.web.DemoControlAction" scope="request" destroy-method="destroyDemoControlAction"/>
而在struts.xml里面会使用<action name="togo" class="demoAction" method="togo">这样就可以使用传统的依赖注入了。

当然了struts2 最吸引人的地方还是不断有新的东西加入,比如说注释编程,最开始的时候及struts2.0.11是用的codebehind,说实话,没有感觉到他给我带来的方便,相反,我倒觉得xml的效率比他高,因为他要在类文件里面写入相应的@注释,等于说没有减少工作量,反而增加了维护的工作量,但是现在struts2.1已经完全摆脱了那种模式,更加你文件下面的路径来自动生成相应的action,不过也有个难点就是action跳action不如xml那么方便
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics