日本流行的开源框架Seasar

S2Dao:

这是Seasar自己的持久化解决方案。非常精致,只有6000多行代码。不过功能比起Hibernate弱很多。但是,对于不是非常强调OO建模的应用来说,我认为是足够了。它不是ORM,只是实现了DAO模式,并且开发人员不必和JDBC打交道。
而且,我觉得它最大的亮点,就是不用写持久层代码,用户只需写接口,以及某些接口方法对应的sql。


它会通过AOP(what is AOP in the J2EE )自动生成实现类,而且也是声明式事务。


它的开发过程大概是:
1、 根据数据库table,写Entity类。注意,不是命名为Model,因为它只是数据库表的实体映射,就如同E-R图的E部分,在Entity类中,通过字段表示如下信息:对应的数据库table、字段对应信息、多对1关联关系等等。注意,它只能实现多对1关联。
2、 写出DAO的接口,譬如基本的CRUDL操作,要是有复杂的CRUDL,可以通过方法名、以及对应的sql搞定。SQL作为外部文件存在。SQL的程序员和java程序员可以分工。因为java定义的方法满足命名规则,可以自动生成SQL语句。复杂的SQL语句需要自己写。但只能用一条sql。所以,譬如当我们要实现复杂的insert操作,必须在Service层组合几个dao的接口方法,然后加上声明式事务。
3、 对于多数据库支持,是通过在sql语句的文件名后面加上数据库后缀,如UserDAO_findByUsername_mysql.sql。我觉得非常不爽的地方时,它必须每个方法一个sql文件,要是我一个dao接口有30个方法,我不是要写30个sql文件?当然,sql语句可以注释在DAO接口上面。
大概以上三步概括了S2Dao框架的基本使用,它没有什么特殊用法,因为我看源代码上也很简单。因为它省去了在ORM框架中最难的部分:关联映射、继承关系、cache等。不过,这样也让S2dao的持久层开发异常简单。
对S2Dao的整体感觉,它和EJB中的实体Bean,特别是CMP非常类似,又有些BMP的特性。但是,它的配置文件除了sql,几乎没有。


S2Struts:

它是Seasar用DI和AOP技术对Struts进行封装。它支持Struts的Action风格和配置,同时,也支持纯POJO的Action。后者的Action是官方的推荐,它不用像Webwork那样实现特定的Action接口,它就是普通的JavaBean,但是它一般需要实现一个自己的接口,这点有些不爽,但对于Action配置很方便。
另外,它的ActionForm也完全是普通的JavaBean。
整体上,S2Struts的使用和Webwork惊人的相似,类风格也非常一致,譬如方法的返回值是一个字符串。
S2Struts通过prototype的实例生成方式,解决了Struts本身的线程安全问题,因为Struts是共享一个Action实例。所以,在S2Struts的Action里面,我们可以声明实例变量。
S2Struts的实现原理大致是:通过AOP将普通JavaBean的ActionForm动态注入自己的S2BeanValidatorBean,该Bean继承于Struts的ActionForm。普通POJO的Action类也类似这样:动态将ActionForm和ActionMapping等注入。而且,通过filter,将HttpServletRequest,HttpServletResponse等实例注入Seasar 容器的ThreadLocal变量里,而Action可以通过访问容器来获取这些组件,同时,这些对象也自动通过Setter方式注入Action,这样Action就可以和Web容器打交道了,譬如直接调用reponse.sendRedirect导航,因为在url里面动态注入参数这类需求不容易实现,但Webwork可以在配置文件里面通过类似viewUser do?id=${id}方式注入id值


为了不用写设定文件也能够运行,Convention over Configuration的思想得以采用。Convention over Configuration就是指,“只要遵守一个适当的规约,即使不用进行非常麻烦的设定,框架结构也可以自动替我们搞定的思想”,这一思想是Ruby on Rails中所倡导的。Seasar2的Convention over Configuration是从Ruby on Rails 那里得到的提示而产生的。   使用Seasar2的话,对于仅仅需要维护数据表这样简单的应用,可以在不到3分钟的时间里作成。




Action和ActionForm中的property的值和request中的属性同名set 在Property中。

可以通过如下的方式

获取property 的标签和SA中的常用标签



${f:h(プロパティ名)}


<a href="${f:u(プロパティ名)}">...</a>


<c:forEach items="${プロパティ名}" ...  遍历array形式的property.


${f:br(f:h(プロパティ名))}


<fmt:formatDate value="${f:date(hireDate, 'yyyyMMdd')}"
  pattern="yyyy/MM/dd"/>


<fmt:formatNumber value="${f:number(salary, '####')}"
  pattern="#,###"/>


对于HTML的escape问题(EG:< = &lt)使用f:h(),可以List一样显示Array。
防止运行JavaScript时使用f:u()


textarea输入框是 f:h(textarea)
改行を<br />に変換したい場合は、 f:br()を使います。
空白をそのまま表示したい場合は、f:nbsp()を使います。
 f:br()とf:nbsp()を組み合わせるには次のようにします。
标签按照嵌套的顺序来运行。
${f:br(f:nbsp(f:h(textarea)))}


${f:br(f:nbsp(f:h(textarea)))}


fmt:formatNumber()//输出数值的标签
f:number()// String --> Integer number 加入第二个参数可以转化为DecimalFormat


ActionやActionFormのpropertyは、 public 域をELやStrutsが参照できるようにするために、 JavaBeansはMapに、ArrayはListにwrap 包装されています。 property access(.)やArray access([数値])以外のやり方で、 変变量にaccessときには気をつけてください。


读取任意对象的值并String的形式显示
 f:label(value, dataList, valueName, labelName)
 valueは、任意のobjectの値です。 
 dataListはJavaBeans或Map<String, Object>のlistで、 どのオブジェクトの値をどの文字列に変換するのかを指定します。 valueNameはvalue用のproperty(Mapの場合はkey name)、
 labelNameはlabel用のProperty(Mapの場合はkey name)です。
 EG: 连接数据库后的显示: 
 部署のidプロパティの値をnameプロパティの値で表示したい場合、次のように指定します。deptItemsには、部署のデータが全件入っているとします。
 ${f:label(e.departmentId, deptItems, "id", "name")}


 
 以上所有的标签JSPでも共通で使うような宣言は、1つのJSPにまとめ、web.xmlでそのJSPを指定します。 sa-struts-tutorialプロジェクトでは、webapp/WEB-INF/view/common/common.jspに共通で使う宣言が 定義されています。


commons.jsp


<%@page pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@taglib prefix="html" uri="http://struts.apache.org/tags-html"%>
<%@taglib prefix="bean" uri="http://struts.apache.org/tags-bean"%>
<%@taglib prefix="tiles" uri="http://jakarta.apache.org/struts/tags-tiles"%>
<%@taglib prefix="s" uri="http://sastruts.seasar.org"%>
<%@taglib prefix="f" uri="http://sastruts.seasar.org/functions"%>
 web.xml
<web-app>
    ...
    <jsp-config>
        <jsp-property-group>
            <url-pattern>*.jsp</url-pattern>
            <el-ignored>false</el-ignored>
            <page-encoding>UTF-8</page-encoding>
            <scripting-invalid>false</scripting-invalid>
            <include-prelude>/common/common.jsp</include-prelude>
        </jsp-property-group>
    </jsp-config>
</web-app>
 
 Redirect,经过Action在调转到想要的JSP页面中。
return "/ActionName/MethodName?redirect=true";
 
SAStruts中不在webapp/WEB-INF/struts-config.xml设定Action,ActionForm。根据和URL连接的信息找到匹配的ActionClass。
验证用的Anotation设定为parameter。不在webapp/WEB-INF/validation.xml中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值