posts - 59, comments - 244, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          瀏覽器客戶端js中調(diào)用java代碼

          Posted on 2011-03-09 01:15 penngo 閱讀(5813) 評論(1)  編輯  收藏 所屬分類: Java
          上一篇是直接在客戶端調(diào)用服務(wù)器端的方法,不過其實可以直接在客戶端調(diào)用java代碼。以前寫過一篇用javascript編寫swing程序,不過這種方式是需要java的腳本引擎。在瀏覽器中也可以使用js來調(diào)用java,不過需要借助applet,applet可以直接調(diào)用js代碼,js也可以直接調(diào)用applet代碼,只要在applet中實現(xiàn)一個例實例化的接口或直接把實例化后的類返回給js,這樣在js中就可以調(diào)用java代碼。下面開始測試代碼。
          ScriptEngine.java
          import javax.swing.JApplet;
          import javax.swing.JOptionPane;
          public class ScriptEngine extends JApplet{
              
          public void init() {
                  
              }
              
          public Object classInstance(String name){
                  
          try{
                      Class cls 
          = Class.forName(name);
                      Object obj 
          = cls.newInstance();
                      
          return obj;
                  }
                  
          catch(Exception e){
                      e.printStackTrace();
                      
          return null;
                  }
                  
              }
              
          public void showMessage(String ale){
                  JOptionPane.showMessageDialog(
          null, ale);
              }
              
          public void destroy(){
                  
              }
          }

          測試被調(diào)用的代碼
          MD5.java
          import java.security.MessageDigest;
          public class MD5 {
              
          public final static String Md5(String s) {
                  
          char hexDigits[] = { '0''1''2''3''4''5''6''7''8''9',
                          
          'a''b''c''d''e''f' };
                  
          try {
                      
          byte[] strTemp = s.getBytes();
                      MessageDigest mdTemp 
          = MessageDigest.getInstance("MD5");
                      mdTemp.update(strTemp);
                      
          byte[] md = mdTemp.digest();
                      
          int j = md.length;
                      
          char str[] = new char[j * 2];
                      
          int k = 0;
                      
          for (int i = 0; i < j; i++) {
                          
          byte byte0 = md[i];
                          str[k
          ++= hexDigits[byte0 >>> 4 & 0xf];
                          str[k
          ++= hexDigits[byte0 & 0xf];
                      }
                      
          return new String(str);
                  } 
          catch (Exception e) {
                      
          return null;
                  }
              }
          }

          測試頁面
          test.jsp
          <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
          <html>
          <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
          <title>Insert title here</title>
          </head>
          <body>
          <APPLET id="engine" CODE = "com.agent.util.ScriptEngine" JAVA_CODEBASE = "./" ARCHIVE = "Engine.jar"  WIDTH = "0" HEIGHT = "0">
          </APPLET>
          <script type="text/javascript">
          //直接調(diào)用MD5加密類
          function md5(){
              var md5 
          = engine.classInstance("com.agent.util.MD5");
              alert(md5.Md5(
          "這是MD5測試!"));
          }
          //直接調(diào)用Applet方法
          function AppletMessage(){
              engine.showMessage(
          "這是測試數(shù)據(jù),AppletMessage!");
          }
          //直接調(diào)用swing組件
          function initJOptionPane(){
              var file 
          = engine.classInstance("javax.swing.JOptionPane");
              file.showMessageDialog(
          null"這是直接在js中調(diào)用java代碼方法!""測試確認窗口",2);
          }
          </script>
          <input type="button" onclick="md5();" value="MD5加密">
          <input type="button" onclick="AppletMessage();" value="AppletMessage">
          <input type="button" onclick="initJOptionPane();" value="JOptionPane">
          </body>
          </html>

          運行效果:


          使用這方法,可以非常方便的調(diào)用java類,我們可以把一些js不方便操作的東西,直接放在applet里面給客戶端調(diào)用.但如果調(diào)用一些涉及系統(tǒng)安全的功能,jar需要簽名才有足夠權(quán)限。
          不過這方法最大的不足是需要客戶端jre的支持,使用范圍有限制,只適合一些企業(yè)內(nèi)部使用的系統(tǒng)。


          評論

          # re: 瀏覽器客戶端js中調(diào)用java代碼  回復(fù)  更多評論   

          2011-03-09 11:32 by HiMagic!
          applet幾乎絕跡了
          主站蜘蛛池模板: 赣榆县| 青神县| 六安市| 孟连| 湟源县| 南澳县| 玉门市| 沂南县| 嘉鱼县| 平安县| 申扎县| 蓬安县| 陆丰市| 射洪县| 沂源县| 无为县| 平谷区| 贵州省| 同江市| 沙雅县| 南安市| 尼玛县| 金溪县| 子洲县| 舞钢市| 永靖县| 溧水县| 广州市| 怀来县| 吉安市| 开远市| 遵化市| 土默特右旗| 临朐县| 昌宁县| 威远县| 上思县| 台山市| 胶南市| 庆安县| 大港区|