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

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

          Posted on 2011-03-09 01:15 penngo 閱讀(5810) 評論(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幾乎絕跡了
          主站蜘蛛池模板: 城步| 博乐市| 通州区| 华安县| 荣昌县| 廊坊市| 资讯 | 高清| 洛南县| 昌图县| 德格县| 乌鲁木齐县| 库尔勒市| 康平县| 郸城县| 腾冲县| 辛集市| 合肥市| 牙克石市| 宣恩县| 会同县| 康定县| 平安县| 贵阳市| 越西县| 桐城市| 嫩江县| 湄潭县| 宜都市| 琼中| 石泉县| 博爱县| 沭阳县| 大足县| 巴林右旗| 南城县| 会泽县| 襄汾县| 望城县| 绵阳市| 龙里县|