精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2005-12-19
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系统将是一个很麻烦的问题. 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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的代码,把它搬到业务层而已。 |
|
返回顶楼 | |
发表时间: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内容。 |
|
返回顶楼 | |
发表时间: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系统将是一个很麻烦的问题. 有些话是错误的 |
|
返回顶楼 | |
发表时间: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的概念,那么这样才比较像一个整体的架构了,否则有点像事后补救。 |
|
返回顶楼 | |
发表时间: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等架构,并不支持在架构层获取容器中的上下文。 |
|
返回顶楼 | |
发表时间: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的值对象 |
|
返回顶楼 | |
发表时间:2005-12-19
wokgsi2 写道 其实我说的是对于json,dwr等架构,并不支持在架构层获取容器中的上下文。 其实用robbin 所说的方法是很简单的,但我想你的意思是希望json, dwr等架构本身提供这样的实现。 那么你可以试试jsonrpc-java, 它是支持访问request, session context 的。原理也很简单。你可以阅读源码了解一下。 http://oss.metaparadigm.com/jsonrpc/ |
|
返回顶楼 | |
发表时间: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内容。 我的用法似乎跟你很相似,或者更简单,用法比较粗糙 |
|
返回顶楼 | |
发表时间: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的框架进行开发不能访问,因为架构本身不提供。 |
|
返回顶楼 | |