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

          瀏覽器客戶端js中調用java代碼

          Posted on 2011-03-09 01:15 penngo 閱讀(5802) 評論(1)  編輯  收藏 所屬分類: Java
          上一篇是直接在客戶端調用服務器端的方法,不過其實可以直接在客戶端調用java代碼。以前寫過一篇用javascript編寫swing程序,不過這種方式是需要java的腳本引擎。在瀏覽器中也可以使用js來調用java,不過需要借助applet,applet可以直接調用js代碼,js也可以直接調用applet代碼,只要在applet中實現一個例實例化的接口或直接把實例化后的類返回給js,這樣在js中就可以調用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(){
                  
              }
          }

          測試被調用的代碼
          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">
          //直接調用MD5加密類
          function md5(){
              var md5 
          = engine.classInstance("com.agent.util.MD5");
              alert(md5.Md5(
          "這是MD5測試!"));
          }
          //直接調用Applet方法
          function AppletMessage(){
              engine.showMessage(
          "這是測試數據,AppletMessage!");
          }
          //直接調用swing組件
          function initJOptionPane(){
              var file 
          = engine.classInstance("javax.swing.JOptionPane");
              file.showMessageDialog(
          null"這是直接在js中調用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>

          運行效果:


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


          評論

          # re: 瀏覽器客戶端js中調用java代碼  回復  更多評論   

          2011-03-09 11:32 by HiMagic!
          applet幾乎絕跡了
          主站蜘蛛池模板: 房山区| 保康县| 南丰县| 内江市| 淳安县| 合阳县| 神池县| 海伦市| 尤溪县| 寿阳县| 武强县| 昭苏县| 宣武区| 页游| 安西县| 甘孜县| 土默特右旗| 抚顺市| 泾阳县| 上栗县| 蓬安县| 武城县| 华蓥市| 抚顺市| 凤阳县| 太湖县| 广水市| 德江县| 木里| 荃湾区| 浑源县| 山西省| 博爱县| 全州县| 罗山县| 新干县| 辽宁省| 竹北市| 新宁县| 大丰市| 青岛市|