Struts、Ajax、Restful、Web Service 狂想曲


======================================================
注:本文源代码点此下载
======================================================

我承认有点标题党了,不过题目中所说的几项技术确实有其相似之处,欲知事情原委,且听我详细道来。

项目一开始只是不满 struts 庞大的体积,于是想自己根据其原理实现一个tiny 版。后来的开发中觉得,完全可以把上述的ajax、restuful web service的一些思想加入进来。经过几周的努力,便开发出了一个基本成型的web 框架,暂且起名为unicorn(独角兽,吼吼)。下文开始便对这个自编写的框架做一些列的介绍,并且初步打算是将其开源,希望能一起交流和完善它。

首先,为了能快速了解它是什么,先来看一下配置文件:

xml version="1.0" encoding="utf-8" ?>

config>

routers>

router class="com.mh.router.mysessioncheckrouter">router>

routers>

actions>

action class="com.mh.action.useraction">action>

action class="com.mh.action.informationaction">action>

action class="com.mh.action.mobileaction">action>

actions>

config>

上面就是整个工程的配置文件,可以看出需要配置的东西非常少,只需要制定action类 和 router类有哪些就ok。框架奉行约定大于配置的思想,至于请求如何分发,这个不需要人工配置,框架自动解决。这里要介绍两个概念action 和 router,熟悉struts的肯定都知道action,action替代servlet、jsp时代的servlet,所有提交的请求由struts分发给不同的action来处理。这里道理也是一样的,action就是经过框架处理后的请求接受者。再来说一下router,字面意思路由器,学过计算机网络的都知道,ip数据包在网络上之所以能够顺利到达,就是因为路由器根据路由表来来确定出来传输的途径。这里router也是这个作用,根据访问服务器的url来制定分发策略。router是完全可以自定义的,用户可以定义自己的router来制定url分发的策略,并且用户自定义的router比系统默认的router有更高的优先权。

二、url上做文章

/useraction/login/username=admin&&password=admin

先来介绍系统methodrouter的处理方式。上面的url根据"/"分为三个部分,第一部分是请求的action类,第二部分是类中的方法method,第三部分是提交的参数param。这一点受上篇文章优酷的架构里url设计的启发。

经过这样的设计,就明白在上述配置文件中为何可以如此简单了。

当然也可以不以这样的方式,框架提供自定义router的支持。比如你想这样处理url:/前台页面/子栏目/子栏目

想实现上面的方式,就可以自己定义router,在router里面获取上述的url,然后做处理、forward到相应的jsp页面。

三、使用json传输数据

ajax请求很容易处理json数据,ajax可以与系统轻松交互。

当初web service使用soap的xml格式传输数据,如今也有人指责这是大费周折。restful方式提倡遵循http语义,完全使用url结合get、post、put、delete来传输请求,结果在roil阵营里广泛使用,认为是web service更优雅的方式。所以本框架也吸取他们的优点,也完全可以通过url传输请求的数据,如上述url中的param部分。不过没有遵循restful强调的http语义,全部使用get和post的请求方式,当然也可以制定为其他,这完全看你的心情,因为这对功能实现无关紧要。而且我觉得统一使用一种,更避免了需要指定请求方式的麻烦。

数据的返回使用json格式,比soap更为轻量简洁和优雅,而且有更多的平台直接支持。如在android平台,本身就支持json格式的处理, 如果使用web service 的soap,你可能还要导入ksoap的第三方库。

在非浏览器的客户端,可以借助编写的工具类,来完成web service方式的操作,

public interface iwebservice {

public list getinformationsofownerapp(string ownerapp, int start, int limit) throws sockettimeoutexception;

}

经过这样的封装,已经与使用web service毫无差别,而且还会更加高效,因为处理json总比处理soap的xml要容易。

先简单写这么多,之后的续篇详细介绍。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值