DWR之与服务器端的DWR交互
----------
当编写服务器端代码时, 通常不会意识到该代码会被DWR调用,这一般不会出问题,但是偶尔也会。应注意,DWR提供了一些便捷工具,以便与服务器端代码交互。
另一个替代方法是把服务器代码和DWR彻底分开(即不需要WebContext)。该方法很简单,只需要在远程签名中声明所需的对象即可。如:
----------
当编写服务器端代码时, 通常不会意识到该代码会被DWR调用,这一般不会出问题,但是偶尔也会。应注意,DWR提供了一些便捷工具,以便与服务器端代码交互。
在DWR服务器端编码时,首先应考虑两个类:WebContext和WebContextFactory,它们按顺序使用,类似于下面的方式:
org.directwebremoting.WebContext wc = org.directwebremoting.WebContextFactory.get();一旦有了WebContext(使用ThreadLocal,因此每个请求线程都有一个),就可以访问大多数标准的servlet对象,包括:javax.servlet.http.HttpServletRequest request = wc.getHttpServletRequest();
javax.servlet.http.HttpServletResponse response = wc.getHttpServletResponse();
javax.servlet.ServletConfig config = wc.getServletConfig();
javax.servlet.ServletContext context = wc.getServletContext();
javax.servlet.http.HttpSession session = wc.getSession();也可以调用wc.getContainer(),它返回一个Container对象。这是DWR提供的一个非常基础的IOC容器。DWR还提供了与当前流行的Spring IOC容器集成的方法。另一个替代方法是把服务器代码和DWR彻底分开(即不需要WebContext)。该方法很简单,只需要在远程签名中声明所需的对象即可。如:
public void serverSideObjects(final String inParam,final HttpServletRequest request,final HttpServletResponse response,
final ServletConfig config,final ServletContext context,final HttpSession session){
System.out.println("inParma = " + inParam);
System.out.println("request = " + request);
System.out.println("response = " + response);
System.out.println("config = " + config);
System.out.println("context = " + context);
System.out.println("session = " + session);
}当在javascript中调用该方法时,不要给最后5个参数传入任何值。DWR将通过一些魔法将适当的对象填入这些参数。但是应注意,javascript调用必须采取"回调函数作为最后一个参数"或者"调用数据元对象"的方法,不能把回调函数作为第一参数。
本文介绍了DWR如何与服务器端进行交互,并详细探讨了利用WebContext和WebContextFactory获取servlet对象的方法,同时提供了无需WebContext直接在远程签名中声明对象的替代方案。
1324

被折叠的 条评论
为什么被折叠?



