博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Struts、Ajax、Restful、Web Service 狂想曲
阅读量:6891 次
发布时间:2019-06-27

本文共 1878 字,大约阅读时间需要 6 分钟。

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

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

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

      上面就是整个工程的配置文件,可以看出需要配置的东西非常少,只需要制定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要容易。

 

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

转载于:https://www.cnblogs.com/mahang/archive/2011/11/22/2258973.html

你可能感兴趣的文章
python获取昨日日期
查看>>
海康威视 - 萤石云开放平台 js 版
查看>>
关于分销平台
查看>>
jquery实用的一些方法
查看>>
质数方阵
查看>>
jQuery $.each用法
查看>>
C语言结构体指针成员强制类型转换
查看>>
基于域的无线安全认证方案
查看>>
Thread类常用方法
查看>>
几乎所有编程语言的hello, world程序(3)
查看>>
CentOs 设置静态IP 方法
查看>>
Nginx内置变量以及日志格式变量参数详解
查看>>
Docker 命令
查看>>
如何在andorid native layer中加log function.【转】
查看>>
杂七杂八的文档资料。
查看>>
C#.NET 大型企业信息化系统集成快速开发平台 4.2 版本 - 访问频率限制功能实现、防止黑客扫描、防止恶意刷屏...
查看>>
如何在Hyper-V虚拟中安装Hyper-V角色
查看>>
通用XPE操作系统
查看>>
Opentracing Zipkin
查看>>
构建高可用服务器之四 Keepalive冗余Nginx
查看>>