论坛首页 Web前端技术论坛

对采用ajax框架开发的系统的实现提出一个质疑

浏览 8146 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2005-12-19  
我们都知道传统的web实现一般都是三层体系:
html -> web(app)控制层 -> 业务接口

而采用ajax框架的web实现一般是两层体系:
html -> 业务接口

也就是说传统的web的实现在ajax体系中已经将web(app)控制层隐藏了,ajax将传统的bs体系隐形的转成了cs的实现,这就给web实现带来了一个新的问题,传统的web容器上下文将不可用,也就是request,responsesession,application,page等对象将是隐形的,而传统的cs的上下文控制都可以放在客户段,但是采用ajax的bs结构的上下文却不能放在客户段。举个例子,比如用户session问题,当用户通过js函数访问服务端的业务方法时候必须对用户是否登陆,以及是否具有操作业务权限进行判断,而这些判断在传统的bs结构中一般都是在控制层action中做的,但在json或dwr中只能在service中进行判断,这不仅在架构设计上不合理,而且以我对dwr的了解上来看也不太好实现。还请各位一起讨论,因为这个问题不解决,采用ajax框架实现web系统将是一个很麻烦的问题.
   发表时间:2005-12-19  
AJAX还是通过HTTP协议走的,所以request,response,session照样适用,而且也没有必要放在客户端控制,还是放在服务器端控制。和传统B/S唯一不同的是,B/S的Web Action提供了request,response,session对象的访问接口,而改成AJAX,服务器端业务层bean没有提供这三个对象的访问接口而已(特别是很多情况下需要request,session对象的访问)。

这个问题的解决非常简单,考察一下Webwork的ServletDispatcher就可以得知,webwork在接到客户端请求以后,在Servlet Controller处就把response,resquest,session等对象放进ThreadLocal里面,后续代码可以随时取到。

因此只需要把webwork的封装代码copy过来,自己写一个ServletFilter(或者初始化的Servlet)去做这件事情就搞定了。

特别值得一提的是,甚至没有必要直接在业务bean里面进行状态管理和权限控制,写一个interceptor去做这些事情就行了。

说白了,就是copy webwork的代码,把它搬到业务层而已。
0 请登录后投票
   发表时间:2005-12-19  
wokgsi2 写道
我们都知道传统的web实现一般都是三层体系:
html -> web(app)控制层 -> 业务接口

而采用ajax框架的web实现一般是两层体系:
html -> 业务接口

也就是说传统的web的实现在ajax体系中已经将web(app)控制层隐藏了,ajax将传统的bs体系隐形的转成了cs的实现,这就给web实现带来了一个新的问题,传统的web容器上下文将不可用,也就是request,responsesession,application,page等对象将是隐形的,而传统的cs的上下文控制都可以放在客户段,但是采用ajax的bs结构的上下文却不能放在客户段。举个例子,比如用户session问题,当用户通过js函数访问服务端的业务方法时候必须对用户是否登陆,以及是否具有操作业务权限进行判断,而这些判断在传统的bs结构中一般都是在控制层action中做的,但在json或dwr中只能在service中进行判断,这不仅在架构设计上不合理,而且以我对dwr的了解上来看也不太好实现。还请各位一起讨论,因为这个问题不解决,采用ajax框架实现web系统将是一个很麻烦的问题.

其实大家应用ajax的程度不同。类似backbase目前这种官方状态的应用不是所有人都需要,但是ajax部分页面和部分模块很多人都需要。dwr+JSF官方就提供了整合实现。不用现成toolkit自己写js代码实现简单的ajax应用,struts也足够。action里面response flush或者转向到一个jsp页面,然后js remote call的页面得到jsp页面内容都可行而且都很简单。
我现在简单需求和遗留struts系统整合就是用的这种方法。jsp生成xml用于绑定页面控件值,jsp生成html用于页面大面积刷新<div>or<span>中html内容。
0 请登录后投票
   发表时间:2005-12-19  
wokgsi2 写道
我们都知道传统的web实现一般都是三层体系:
html -> web(app)控制层 -> 业务接口

而采用ajax框架的web实现一般是两层体系:
html -> 业务接口

也就是说传统的web的实现在ajax体系中已经将web(app)控制层隐藏了,ajax将传统的bs体系隐形的转成了cs的实现,这就给web实现带来了一个新的问题,传统的web容器上下文将不可用,也就是request,responsesession,application,page等对象将是隐形的,而传统的cs的上下文控制都可以放在客户段,但是采用ajax的bs结构的上下文却不能放在客户段。举个例子,比如用户session问题,当用户通过js函数访问服务端的业务方法时候必须对用户是否登陆,以及是否具有操作业务权限进行判断,而这些判断在传统的bs结构中一般都是在控制层action中做的,但在json或dwr中只能在service中进行判断,这不仅在架构设计上不合理,而且以我对dwr的了解上来看也不太好实现。还请各位一起讨论,因为这个问题不解决,采用ajax框架实现web系统将是一个很麻烦的问题.


有些话是错误的
0 请登录后投票
   发表时间:2005-12-19  
谢谢上面各位的观点。

也就是说目前的ajax框架(json或dwr)实现的只是一个客户端到服务端接口的映射
它并不处理也不支持其他非业务的操作,以dwr举例子,我们只需要在服务端实现业务
方法,以提供调用
比如 

public class BusinessService{
    public void doBusiness(){
       //相应的业务方法
    }
    public void doBusiness2(){
       //相应的业务方法
    }
}

然后在客户端通过以下方法调用
<script>
    function call(){
        var bs = new BusinessService();
        bs.doBusiness(callbackmethod);
    }

    function callbackmethod(){
       alert("调用服务端业务方法成功");
    }
</script>

而其实在客户端调用doBusiness()方法前是需要进行身份和权限验证的,而这些在dwr中并不能提供实现,
我要问的是,对于这些操作只能通过filter去处理吗,如果dwr能够提供相应的支持,比如能够像webwork
一样引入interceptor的概念,那么这样才比较像一个整体的架构了,否则有点像事后补救。
0 请登录后投票
   发表时间:2005-12-19  
zkj_beyond 写道
wokgsi2 写道
我们都知道传统的web实现一般都是三层体系:
html -> web(app)控制层 -> 业务接口

而采用ajax框架的web实现一般是两层体系:
html -> 业务接口

也就是说传统的web的实现在ajax体系中已经将web(app)控制层隐藏了,ajax将传统的bs体系隐形的转成了cs的实现,这就给web实现带来了一个新的问题,传统的web容器上下文将不可用,也就是request,responsesession,application,page等对象将是隐形的,而传统的cs的上下文控制都可以放在客户段,但是采用ajax的bs结构的上下文却不能放在客户段。举个例子,比如用户session问题,当用户通过js函数访问服务端的业务方法时候必须对用户是否登陆,以及是否具有操作业务权限进行判断,而这些判断在传统的bs结构中一般都是在控制层action中做的,但在json或dwr中只能在service中进行判断,这不仅在架构设计上不合理,而且以我对dwr的了解上来看也不太好实现。还请各位一起讨论,因为这个问题不解决,采用ajax框架实现web系统将是一个很麻烦的问题.


有些话是错误的


其实我说的是对于json,dwr等架构,并不支持在架构层获取容器中的上下文。
0 请登录后投票
   发表时间:2005-12-19  
刚才有事没说下去.
json或dwr任何的ajax框架封装的
xmlHttpRequest 对象都需要输入参数url吧.只要调用这个方法,服务器端session,request,application都要"刷新".
其实上下文中不能直接用的就request,response,page对象.

只要你的扩展明由htm改为jsp.
<%
    session.getAttribute(key);
%>
就能访问你要的东西啊.

request,response,page的生命周期决定了,ajax不能直接访问他们.
引用
其实我说的是对于json,dwr等架构,并不支持在架构层获取容器中的上下文。

javascript访问这些上下文对象没用,用的是它们被setAttribute的值对象
0 请登录后投票
   发表时间:2005-12-19  
wokgsi2 写道

其实我说的是对于json,dwr等架构,并不支持在架构层获取容器中的上下文。


其实用robbin 所说的方法是很简单的,但我想你的意思是希望json, dwr等架构本身提供这样的实现。

那么你可以试试jsonrpc-java, 它是支持访问request, session context 的。原理也很简单。你可以阅读源码了解一下。

http://oss.metaparadigm.com/jsonrpc/
0 请登录后投票
   发表时间:2005-12-19  
blueoxygen 写道
wokgsi2 写道
我们都知道传统的web实现一般都是三层体系:
html -> web(app)控制层 -> 业务接口

而采用ajax框架的web实现一般是两层体系:
html -> 业务接口

也就是说传统的web的实现在ajax体系中已经将web(app)控制层隐藏了,ajax将传统的bs体系隐形的转成了cs的实现,这就给web实现带来了一个新的问题,传统的web容器上下文将不可用,也就是request,responsesession,application,page等对象将是隐形的,而传统的cs的上下文控制都可以放在客户段,但是采用ajax的bs结构的上下文却不能放在客户段。举个例子,比如用户session问题,当用户通过js函数访问服务端的业务方法时候必须对用户是否登陆,以及是否具有操作业务权限进行判断,而这些判断在传统的bs结构中一般都是在控制层action中做的,但在json或dwr中只能在service中进行判断,这不仅在架构设计上不合理,而且以我对dwr的了解上来看也不太好实现。还请各位一起讨论,因为这个问题不解决,采用ajax框架实现web系统将是一个很麻烦的问题.

其实大家应用ajax的程度不同。类似backbase目前这种官方状态的应用不是所有人都需要,但是ajax部分页面和部分模块很多人都需要。dwr+JSF官方就提供了整合实现。不用现成toolkit自己写js代码实现简单的ajax应用,struts也足够。action里面response flush或者转向到一个jsp页面,然后js remote call的页面得到jsp页面内容都可行而且都很简单。
我现在简单需求和遗留struts系统整合就是用的这种方法。jsp生成xml用于绑定页面控件值,jsp生成html用于页面大面积刷新<div>or<span>中html内容。


我的用法似乎跟你很相似,或者更简单,用法比较粗糙
0 请登录后投票
   发表时间:2005-12-19  
zkj_beyond 写道
刚才有事没说下去.
json或dwr任何的ajax框架封装的
xmlHttpRequest 对象都需要输入参数url吧.只要调用这个方法,服务器端session,request,application都要"刷新".
其实上下文中不能直接用的就request,response,page对象.

只要你的扩展明由htm改为jsp.
<%
    session.getAttribute(key);
%>
就能访问你要的东西啊.

request,response,page的生命周期决定了,ajax不能直接访问他们.
引用
其实我说的是对于json,dwr等架构,并不支持在架构层获取容器中的上下文。

javascript访问这些上下文对象没用,用的是它们被setAttribute的值对象


zkj_beyond讨论问题的态度很好,我也很感谢,可是发言前请明白我的意思好不好。
而且对于您的“request,response,page的生命周期决定了,ajax不能直接访问他们.”观点我认为是错误的,ajax和传统web开发是一样的,而且ajax也可以在struts中实现,怎么不能访问request,response,page对象,只是如果按照dwr或者json的框架进行开发不能访问,因为架构本身不提供。
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics