zoukankan      html  css  js  c++  java
  • DWR异常处理

    一天一位老兄问我,我用的dwr怎么没有包装异常,以前我通过包装dwr这个类来处理服务器段返回的异常,这个dwr类封装一个你要返回的东西,一个boolean值,还有一个错误的封装,比如说你实际要返回的是一个bean,那就把这个bean写在这个dwr类里面,然后去dwr配置里面把这个dwr类配置成bean。我觉得这个老土了,所以就没去处理,直接返回要的实际的类型,没去处理异常。

    我觉得dwr应该有对异常的处理方法。
    没什么好说的:看demo:
    web.xml
    Xml代码 复制代码
    1. <?xml version="1.0" encoding="ISO-8859-1"?>  
    2. <!DOCTYPE web-app PUBLIC   
    3.     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"   
    4.     "http://java.sun.com/dtd/web-app_2_3.dtd">  
    5.   
    6. <web-app id="dwr">  
    7.   
    8.   <servlet>  
    9.     <servlet-name>dwr-invoker</servlet-name>  
    10.     <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>  
    11.   
    12.     <!-- This should NEVER be present in live -->  
    13.     <init-param>  
    14.       <param-name>debug</param-name>  
    15.       <param-value>true</param-value>  
    16.     </init-param>  
    17.   
    18.     <!-- Remove this unless you want to use active reverse ajax -->  
    19.     <init-param>  
    20.       <param-name>activeReverseAjaxEnabled</param-name>  
    21.       <param-value>true</param-value>  
    22.     </init-param>  
    23.   
    24.     <!-- By default DWR creates application scope objects when they are first   
    25.     used. This creates them when the app-server is started -->  
    26.     <init-param>  
    27.       <param-name>initApplicationScopeCreatorsAtStartup</param-name>  
    28.       <param-value>true</param-value>  
    29.     </init-param>  
    30.   
    31.     <!-- This enables full streaming mode. It's probably better to leave this   
    32.     out if you are running across the internet -->  
    33.     <init-param>  
    34.       <param-name>maxWaitAfterWrite</param-name>  
    35.       <param-value>-1</param-value>  
    36.     </init-param>  
    37.   
    38.     <load-on-startup>1</load-on-startup>  
    39.   </servlet>  
    40.   
    41.   <servlet-mapping>  
    42.     <servlet-name>dwr-invoker</servlet-name>  
    43.     <url-pattern>/dwr/*</url-pattern>  
    44.   </servlet-mapping>  
    45.   
    46. </web-app>  
    <?xml version="1.0" encoding="ISO-8859-1"?>
    <!DOCTYPE web-app PUBLIC
        "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
        "http://java.sun.com/dtd/web-app_2_3.dtd">
    
    <web-app id="dwr">
    
      <servlet>
        <servlet-name>dwr-invoker</servlet-name>
        <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
    
        <!-- This should NEVER be present in live -->
        <init-param>
          <param-name>debug</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- Remove this unless you want to use active reverse ajax -->
        <init-param>
          <param-name>activeReverseAjaxEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- By default DWR creates application scope objects when they are first
        used. This creates them when the app-server is started -->
        <init-param>
          <param-name>initApplicationScopeCreatorsAtStartup</param-name>
          <param-value>true</param-value>
        </init-param>
    
        <!-- This enables full streaming mode. It's probably better to leave this
        out if you are running across the internet -->
        <init-param>
          <param-name>maxWaitAfterWrite</param-name>
          <param-value>-1</param-value>
        </init-param>
    
        <load-on-startup>1</load-on-startup>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>dwr-invoker</servlet-name>
        <url-pattern>/dwr/*</url-pattern>
      </servlet-mapping>
    
    </web-app>
    


    dwr:
    Xml代码 复制代码
    1. <?xml version="1.0" encoding="UTF-8"?>  
    2. <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">  
    3.   
    4. <dwr>  
    5.   
    6.   <allow>  
    7.   
    8.     <!-- simpletext -->  
    9.     <create creator="new" javascript="Demo">  
    10.       <param name="class" value="org.getahead.dwrdemo.simpletext.Demo"/>  
    11.     </create>  
    12.     <!-- this is a bad idea for live, but can be useful in testing -->  
    13.     <convert converter="exception" match="java.lang.Exception">  
    14.         <!--<param name='include' value='message,lineNumber'/>-->  
    15.     </convert>  
    16.     <convert converter="bean" match="java.lang.StackTraceElement"/>  
    17.   
    18.   </allow>  
    19.   
    20. </dwr>  
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE dwr PUBLIC "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN" "http://getahead.org/dwr/dwr20.dtd">
    
    <dwr>
    
      <allow>
    
        <!-- simpletext -->
        <create creator="new" javascript="Demo">
          <param name="class" value="org.getahead.dwrdemo.simpletext.Demo"/>
        </create>
        <!-- this is a bad idea for live, but can be useful in testing -->
        <convert converter="exception" match="java.lang.Exception">
        	<!--<param name='include' value='message,lineNumber'/>-->
        </convert>
        <convert converter="bean" match="java.lang.StackTraceElement"/>
    
      </allow>
    
    </dwr>
    

    java类
    Java代码 复制代码
    1. package org.getahead.dwrdemo.simpletext;   
    2.   
    3. import java.io.IOException;   
    4.   
    5. import javax.servlet.ServletException;   
    6.   
    7. import org.directwebremoting.WebContext;   
    8. import org.directwebremoting.WebContextFactory;   
    9.   
    10. /**  
    11.  * Some simple text demos  
    12.  * @author Joe Walker [joe at getahead dot ltd dot uk]  
    13.  */  
    14. public class Demo   
    15. {   
    16.     /**  
    17.      * Return a server side string to display on the client in real time  
    18.      * @param name The name of person to say hello to  
    19.      * @return A demo string  
    20.      * @throws Exception   
    21.      */  
    22.     public String sayHello(String name) throws Exception   
    23.     {   
    24. //      if("dave".equals(name)){   
    25. //              throw new Exception("hello world");   
    26. //      }   
    27.         Integer value = Integer.valueOf(name);   
    28.         Integer id = 100/value;   
    29.         return "Hello, " + id.toString();   
    30.     }   
    31.   
    32. }  
    package org.getahead.dwrdemo.simpletext;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    
    import org.directwebremoting.WebContext;
    import org.directwebremoting.WebContextFactory;
    
    /**
     * Some simple text demos
     * @author Joe Walker [joe at getahead dot ltd dot uk]
     */
    public class Demo
    {
        /**
         * Return a server side string to display on the client in real time
         * @param name The name of person to say hello to
         * @return A demo string
         * @throws Exception 
         */
        public String sayHello(String name) throws Exception
        {
    //    	if("dave".equals(name)){
    //				throw new Exception("hello world");
    //    	}
        	Integer value = Integer.valueOf(name);
        	Integer id = 100/value;
        	return "Hello, " + id.toString();
        }
    
    }
    

    Jsp代码 复制代码
    1. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />   
    2. <script type='text/javascript' src='/dwr/interface/Demo.js'> </script>   
    3.   <script type='text/javascript' src='/dwr/engine.js'> </script>   
    4. <script type='text/javascript' src='/dwr/util.js'> </script>   
    5. <script type="text/javascript" src='index.js'> </script>   
    6.   
    7. <div id="demoDiv">   
    8.   
    9.   <p>   
    10.     Name:   
    11.     <input type="text" id="demoName" value="Joe"/>   
    12.     <input value="Send" type="button" onclick="update()"/>   
    13.     <br/>   
    14.     Reply: <span id="demoReply" style="background:#eeffdd; padding-left:4px; padding-right:4px;"></span>   
    15.   </p>   
    16. </div>  
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
      <script type='text/javascript' src='/dwr/interface/Demo.js'> </script>
        <script type='text/javascript' src='/dwr/engine.js'> </script>
      <script type='text/javascript' src='/dwr/util.js'> </script>
      <script type="text/javascript" src='index.js'> </script>
    
      <div id="demoDiv">
    
        <p>
          Name:
          <input type="text" id="demoName" value="Joe"/>
          <input value="Send" type="button" onclick="update()"/>
          <br/>
          Reply: <span id="demoReply" style="background:#eeffdd; padding-left:4px; padding-right:4px;"></span>
        </p>
      </div>
    
    

    Js代码 复制代码
    1. function update() {   
    2.   var name = dwr.util.getValue("demoName");   
    3.   Demo.sayHello(name,{    
    4.             callback:getData,   
    5.         errorHandler:errorHandler,   
    6.         exceptionHandler:exceptionHandler   
    7.         /*  
    8.         function(errorString,exception) {  
    9.             alert('error:'+errorString);  
    10.         },  
    11.         exceptionHandler:function(errorString,exception) {  
    12.             alert('exception:'+errorString + ":" + exception.message);  
    13.         }*/  
    14. });   
    15. }   
    16.   
    17.   
    18. function getData(data){   
    19.     dwr.util.setValue("demoReply", data);   
    20. }   
    21.   
    22. function errorHandler(errorString, exception){   
    23.  alert(exception.message);   
    24. }   
    25. function exceptionHandler(exceptionString, exception){   
    26.  alert(exception.message);   
    27. }  
    function update() {
      var name = dwr.util.getValue("demoName");
      Demo.sayHello(name,{ 
      	        callback:getData,
    		errorHandler:errorHandler,
    		exceptionHandler:exceptionHandler
    		/*
    		function(errorString,exception) {
    			alert('error:'+errorString);
    		},
    		exceptionHandler:function(errorString,exception) {
    			alert('exception:'+errorString + ":" + exception.message);
    		}*/
    });
    }
    
    
    function getData(data){
    	dwr.util.setValue("demoReply", data);
    }
    
    function errorHandler(errorString, exception){
     alert(exception.message);
    }
    function exceptionHandler(exceptionString, exception){
     alert(exception.message);
    }
    


    还有一种更简单的就是在页面上写上
    Jsp代码 复制代码
    1. DWREngine.setErrorHandler(dispatchErr);   
    2.   
    3. function dispatchErr( msg , ex )   
    4. {   
    5.     alert( msg );   
    6. }  
    DWREngine.setErrorHandler(dispatchErr);
    
    function dispatchErr( msg , ex )
    {
        alert( msg );
    }
    

    写的都不用改就OK了
    参考:
    http://flower-city.spaces.live.com/blog/cns!5CDF3197CFFC015F!518.entry
    dwr异常解决
    环境dwr2.0 原因是据说dwr2.0的异常处理支持比1.0好很多

    定义异常处理函数:
    function errorHandler(errorString, exception){
    alert(exception.message);
    }
    function exceptionHandler(exceptionString, exception){
    alert(exception.message);
    }

    设置通用的异常处理函数:
    dwr.engine.setExceptionHandler(exceptionHandler)
    dwr.engine.setErrorHandler(errorHandler);

    在dwr.xml中配置异常类转换器:
    <convert converter="exception" match="com.jeyo.monica.service.OrderServiceException">
      <param name='include' value='message,lineNumber'/>
    </convert>
    <convert converter="exception" match="java.lang.Exception">
      <param name='include' value='message,lineNumber'/>
    </convert>

    业务处理过程中一定需要将对应的异常转换为上面定义的异常才可以被dwr捕捉的
    如下:
    try{
    }catch(Exception e){
    throw new OrderServiceException(e);
    }
    .....

    自定义的异常处理
    调用dwr远程调用时多带若干参数:
    如下格式:
    OrderService.create(order,
      {
       callback:finishSaveOrderTicket,
       errorHandler:errorHandler,
       exceptionHandler:exceptionHandler
      }
    );

    ok,上面的处理完成后,发生异常时就会把你的异常中的message 使用alert函数打印出来
  • 相关阅读:
    3月6日
    2月28日
    2月23日
    2月20日
    2月19日
    2月18日
    2月17日
    2月16日
    2月15日
    面试算法题——硬币找零
  • 原文地址:https://www.cnblogs.com/wangle1001986/p/3098582.html
Copyright © 2011-2022 走看看