读JPetStore有感,灵活使用框架....
2004-09-13 00:25
639 查看
Struts想必大家已经用烂了把。。。^_^
今天无意中看了一点JPetStore的源代码,发觉他的一些
用法很值得讨论。。
JPetStore是1个完全的使用OpenSource的demo,
使用了Struts+IBATiS嘿嘿,以前不是有
j2ee版本的PetStore的demo吗?^_^
JPetStore的设计令我眼前一亮的居然只使用了1个Action,注意不是ActionServlet,当然
Struts当然只使用1个前置控制器
关键代码
if (form != null) {
// Explicit Method Mapping
Method method = null;
String methodName = mapping.getParameter();
if (methodName != null && !"*".equals(methodName)) {
try {
method = form.getClass().getMethod(methodName, null);
forward = (String) method.invoke(form, null);
} catch (Exception e) {
throw new BeanActionException("Error dispatching bean action via method parameter ('" + methodName + "'). Cause: " + e, e);
}
}
// Path Based Method Mapping
if (method == null && !"*".equals(methodName)) {
methodName = mapping.getPath();
if (methodName.length() > 1) {
int slash = methodName.lastIndexOf("/") + 1;
methodName = methodName.substring(slash);
if (methodName.length() > 0) {
try {
method = form.getClass().getMethod(methodName, null);
forward = (String) method.invoke(form, null);
} catch (Exception e) {
throw new BeanActionException("Error dispatching bean action via URL pattern ('" + methodName + "'). Cause: " + e, e);
}
}
这是这个BeanAction的关键代码,当然这个BeanAction是继承Action的,和普通的Action没什么2样
这也是所有的请求所调用的Action....Cool....
这时要先说说JPetStore里的ActionForm的设计,在JPetStore里Form取名为XXXBean,咋1看很令人奇怪..
仔细看,每个具体的XXXBean都继承了一个BaseBean,而这个BaseBean则继承了ActionForm,而这个
XXXBean引用了domain域对象(与数据库字段是对应的),同时,在XXXBean里添加了调用DAO的方法,例如
Insert,update等操作,成了1个名副其实的BO,同时,这些方法都是无参的,因为使用的参数都可以从
Bean自生的字段取得,同是这也是关键的部分^_^
来看一段Struts-config.xml里配置
<action path="/shop/viewItem" type="com.ibatis.struts.BeanAction"
name="catalogBean" scope="session"
validate="false" input="/catalog/Product.jsp">
<forward name="success" path="/catalog/Item.jsp"/>
</action>
奇妙的地方在于,这个path的viewItem这部分是catalogBean里的一个方法名,这时你可以回头去看
这个BeanAction,他使用反射的原理,通过Form(其实成了1个BO)和 URL来定位调用的方法。
写了1大段,^_^,感觉到灵活运用框架是多么重要,不要拘泥与某些固定的用法....
DEMO的主页,有兴趣的朋友可以去看看
http://www.ibatis.com/jpetstore/jpetstore.html
今天无意中看了一点JPetStore的源代码,发觉他的一些
用法很值得讨论。。
JPetStore是1个完全的使用OpenSource的demo,
使用了Struts+IBATiS嘿嘿,以前不是有
j2ee版本的PetStore的demo吗?^_^
JPetStore的设计令我眼前一亮的居然只使用了1个Action,注意不是ActionServlet,当然
Struts当然只使用1个前置控制器
关键代码
if (form != null) {
// Explicit Method Mapping
Method method = null;
String methodName = mapping.getParameter();
if (methodName != null && !"*".equals(methodName)) {
try {
method = form.getClass().getMethod(methodName, null);
forward = (String) method.invoke(form, null);
} catch (Exception e) {
throw new BeanActionException("Error dispatching bean action via method parameter ('" + methodName + "'). Cause: " + e, e);
}
}
// Path Based Method Mapping
if (method == null && !"*".equals(methodName)) {
methodName = mapping.getPath();
if (methodName.length() > 1) {
int slash = methodName.lastIndexOf("/") + 1;
methodName = methodName.substring(slash);
if (methodName.length() > 0) {
try {
method = form.getClass().getMethod(methodName, null);
forward = (String) method.invoke(form, null);
} catch (Exception e) {
throw new BeanActionException("Error dispatching bean action via URL pattern ('" + methodName + "'). Cause: " + e, e);
}
}
这是这个BeanAction的关键代码,当然这个BeanAction是继承Action的,和普通的Action没什么2样
这也是所有的请求所调用的Action....Cool....
这时要先说说JPetStore里的ActionForm的设计,在JPetStore里Form取名为XXXBean,咋1看很令人奇怪..
仔细看,每个具体的XXXBean都继承了一个BaseBean,而这个BaseBean则继承了ActionForm,而这个
XXXBean引用了domain域对象(与数据库字段是对应的),同时,在XXXBean里添加了调用DAO的方法,例如
Insert,update等操作,成了1个名副其实的BO,同时,这些方法都是无参的,因为使用的参数都可以从
Bean自生的字段取得,同是这也是关键的部分^_^
来看一段Struts-config.xml里配置
<action path="/shop/viewItem" type="com.ibatis.struts.BeanAction"
name="catalogBean" scope="session"
validate="false" input="/catalog/Product.jsp">
<forward name="success" path="/catalog/Item.jsp"/>
</action>
奇妙的地方在于,这个path的viewItem这部分是catalogBean里的一个方法名,这时你可以回头去看
这个BeanAction,他使用反射的原理,通过Form(其实成了1个BO)和 URL来定位调用的方法。
写了1大段,^_^,感觉到灵活运用框架是多么重要,不要拘泥与某些固定的用法....
DEMO的主页,有兴趣的朋友可以去看看
http://www.ibatis.com/jpetstore/jpetstore.html
相关文章推荐
- 有感一些常用框架的使用
- 对于webUI框架DWZ的使用有感
- 【猪猪-后端】WebMagic框架搭建的爬虫,根据自定义规则,直接抓取,使用灵活,Demo部署即可查看。
- golang beego框架使用有感
- SOA 数据访问--使用 LINQ To SQL 和实体框架实现灵活的数据访问
- 使用实体框架灵活地为数据建模
- CI框架 不能使用Frameset或Iframe 解决方法 (再创灵活应用新方法)
- 使用 LINQ To SQL 和实体框架实现灵活的数据访问
- 框架模式 MVC 在Android中的使用
- 使用quartz框架自动发送报表。
- android上传图片到服务器(使用base64字节流的形式通过 AsyncHttpClient框架传输)
- MJRefresh框架的使用
- 浅析依赖注入框架Autofac的使用
- 实现frame框架窗口间的关联及超链接的target属性的使用
- Maven ssm框架json无法使用 需要的所有jar
- 第三方UIImageView框架SDWebImage的使用
- IOS网络篇14之UIWebView第三方框架PBWeb的使用
- [前端 1] 使用frameset框架构建网页基本布局
- android mvp快速开发框架介绍(dileber使用之小工具使用)
- YII框架之soap协议的配置跟使用(Webservice)