调用jsonrpc的技巧

调用jsonrpc的技巧

一段不用每个jsp页面都JSONRPCBridge.registerObject的方法

1. JsonContextLinster
在spring文件里读取需要注册bridge的bean名单
registerObject
public   class  JSONContextListener  implements  ServletContextAttributeListener  {
    
private final Log log = LogFactory.getLog(JSONContextListener.class);

    
public void attributeAdded(ServletContextAttributeEvent event) {
        
if (event.getName().equals(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE)) {
            
// register LookupHelper so we can call methods on it
            ApplicationContext ctx = (ApplicationContext) event.getValue();

            
// check for null so we don't have to initialize Spring in tests
            if (ctx != null{
                log.debug(
"Registering jsonObjects for XmlHttpRequest to GlobalBridge");
                
                JSONRPCBridge jsonBridge 
= JSONRPCBridge.getGlobalBridge();

                Map jsonObjects 
= (Map) ctx.getBean("jsonObjects");
                
for (Object name : jsonObjects.keySet()) {
                    jsonBridge.registerObject(name, jsonObjects.get(name));
                }

                
            }

        }
        
    }

public void attributeReplaced(ServletContextAttributeEvent event) {
        attributeAdded(event);
    }

}


2.spring配置里的jsonObject
     <!--  json registration  -->
    
< bean  name ="jsonObjects"  class ="java.util.HashMap" >
        
< constructor-arg >
            
< map >
                
< entry  key ="information"  value-ref ="informationJson" ></ entry >
            
</ map >
        
</ constructor-arg >
    
</ bean >  

    
< bean  id ="informationJson"  class ="com.vikings.tools.json.Information"   >
        
< property  name ="informationDAO"  ref ="informationDAO"   />
    
</ bean >

3.web.xml里增加配置刚才写的listener
< listener >
        
< listener-class > com.vikings.tools.json.JSONContextListener </ listener-class >
    
</ listener >

到这里就不用这么写了
< jsp:useBean  id ="JSONRPCBridge"  scope ="session"
   class
="com.metaparadigm.jsonrpc.JSONRPCBridge"   />

<%  JSONRPCBridge.registerObject("myTestObject", aTestObject);  %>
这个也不需要
//  Find the JSONRPCBridge for this session or create one
//  if it doesn't exist. Note the bridge must be named "JSONRPCBridge"
//  in the HttpSession for the JSONRPCServlet to find it.
HttpSession session  =  request.getSession();
JSONRPCBridge json_bridge 
=   null ;
json_bridge 
=  (JSONRPCBridge) session.getAttribute( " JSONRPCBridge " );
if (json_bridge  ==   null {
    json_bridge 
= new JSONRPCBridge();
    session.setAttribute(
"JSONRPCBridge", json_bridge);
}

你可能感兴趣的:(调用jsonrpc的技巧)