1. 程式人生 > >在web應用程式中嵌入Applet

在web應用程式中嵌入Applet

小程式是一個小型的以任務為中心的小型應用程式,可在更大的應用程式或程式中執行 在網路上,小程式通常用Java編寫,並插入到網頁中以提供一些特定的功能。

本教程指導您開發Java Applet,並將該applet嵌入Web應用程式,使其在網站上可見。我將使用以下技術:

  • NetBeansIDE 7.3
  • Java 1.7
  • JSP(Java Server Pages)
  • Apache Tomcat伺服器

介紹

在開始本教程之前,我想介紹一下有關技術的內容:

  • NetBeansIDE:由Oracle Corporation在Java開發的整合開發環境。它可以在支援相容的Java虛擬機器(JVM)的Windows,Linux,Solaris和其他平臺上執行。
  • Java:它是由James Gosling在1995年開發的一種程式語言,它從C和C ++得出其語法。
  • Applet:它基本上是一個寫在Web頁面上的程式。可以建立按鈕,標籤,複選框,文字框等控制元件,也可以捕獲滑鼠輸入。
  • Web應用程式:Web應用程式使用的客戶端是Web瀏覽器。它主要使用伺服器端指令碼(JSP,ASP)和客戶端指令碼(HTML,JavaScript)的組合,
  • JSP(Java Server Pages): JSP用於開發動態生成的網頁。Applet將嵌入JSP頁面。
  • Apache Tomcat伺服器:它是一個實現JSP和Java Servlet規範的開源Web伺服器。

在Java應用程式中開發和執行Applet

按照這些簡單的步驟在Java應用程式中使用NetBeansIDE建立一個Applet:

File - > NewProject - > ChooseProject - > Java Application開啟NetBeansIDE專案,如下所示:

appletfig1
圖1:新的Java應用程式

現在,新增專案名稱,專案位置:

專案名稱: AmitJavaApplication 
專案位置: C:\ Users \ amit \ Documents \ NetBeansProjects 
主類:amitjavaapplication.AmitJavaApplication

appletfig2
圖2:專案名稱為AmitJavaApplication

當您點選“完成”時,會生成以下程式碼:

軟體包: amitjavaapplication 
主類: amitjavaapplication.AmitJavaApplication

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package amitjavaapplication;

/**
 *
 * @author amit
 */
public class AmitJavaApplication {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
    }
}

目錄結構可以在左側面板的“ 專案 ”和“ 檔案 ” 下看到

appletfig3
圖3:AmitJavaApplication.java程式碼

要建立Applet,請按照以下步驟操作:

右鍵點選AmitJavaApplication-> New-> Other

appletfig4
圖4:建立新Applet的步驟

選擇Swing GUI窗體 - > JAppletForm,單擊Next如下所示:

appletfig5
圖5:從Swing GUI窗體中選擇“JApplet Form”

完成上述步驟後,輸入以下內容:

類名: AmitApplet 
包: tutorial.me

該檔案在“tutorial.me”包下建立,位於以下位置:

檔案位置: C:\ Users \ amit \ Documents \ NetBeansProjects \ AmitJavaApplication \ src \ tutorial \ me

點選完成後點擊

appletfig6
圖6:設定類名和包

現在可以看到“ AmitApplet.java ” 的設計畫面它配有一個選項“ Palette ”來新增任何Swing容器/控制元件到Applet:

appletfig7
圖7:Applet類的設計部分

以下使用以下Swing容器和控制元件顯示Applet的設計:

擺動容器/控制 變數名
JPanel(集裝箱) 1 JPANEL1
JLabel(控制) 1 jLabel1的
JTextField(控制元件) 3 textNum1 
textNum2 
textResult
JButton(控制) 1 btnMultiply

appletfig8
圖8:Applet設計為乘以2個數字

“ 設計 ”完成後,“ 原始碼編輯器 ” 可以看到以下程式碼,Applet應用程式的截圖和程式碼如下所示:

appletfig9
圖9:程式碼截圖

這裡提供了完整的程式碼:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tutorial.me;

/**
 *
 * @author amit
 */
public class AmitApplet extends javax.swing.JApplet {

    /**
     * Initializes the applet AmitApplet
     */
    @Override
    public void init() {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AmitApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AmitApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(AmitApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AmitApplet.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the applet */
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

    /**
     * This method is called from within the init() method to initialize the
     * form. WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        textNum1 = new javax.swing.JTextField();
        textNum2 = new javax.swing.JTextField();
        btnMultiply = new javax.swing.JButton();
        textResult = new javax.swing.JTextField();

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 14)); // NOI18N
        jLabel1.setText("Multiply 2 numbers");

        textNum1.setText("0");

        textNum2.setText("0");

        btnMultiply.setText("Multiply");
        btnMultiply.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnMultiplyActionPerformed(evt);
            }
        });

        textResult.setText("Result");

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGap(0, 36, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textNum2, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(textNum1, javax.swing.GroupLayout.PREFERRED_SIZE, 119, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addComponent(btnMultiply)
                        .addGap(18, 18, 18)
                        .addComponent(textResult, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addGap(19, 19, 19))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel1)
                .addGap(28, 28, 28)
                .addComponent(textNum1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE,                     javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(textNum2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE)
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnMultiply)
                    .addComponent(textResult, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(23, 23, 23))
        );

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(100, 100, 100)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(155, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(41, 41, 41)
                .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(95, Short.MAX_VALUE))
        );
    }// </editor-fold>                        

    private void btnMultiplyActionPerformed(java.awt.event.ActionEvent evt) {                                            
        // TODO add your handling code here:
         int n1 = Integer.parseInt(textNum1.getText());
         int n2 = Integer.parseInt(textNum2.getText());
         int mul = n1 * n2;
         textResult.setText(Integer.toString(mul));
    }                                           

    // Variables declaration - do not modify                     
    private javax.swing.JButton btnMultiply;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JTextField textNum1;
    private javax.swing.JTextField textNum2;
    private javax.swing.JTextField textResult;
    // End of variables declaration                   
}

現在,通過右鍵單擊AmitApplet.java->執行檔案執行Applet,如下所示:

appletfig10
圖10:執行Applet“AmitApplet.java”

完成上述給定步驟後,可以看到Applet,現在輸入以下值乘以ie

9 * 7 = 63

appletfig11
圖11:Applet Viewer

在NetBeansIDE中執行Applet應遵循上述步驟。

開發和執行Web應用程式:

按照以下簡單步驟,使用NetBeansIDE建立Web應用程式:

轉到File-> New Project,如下所示:

appletfig12
圖12:建立新的WebApplication專案

New Project開始之後Categories中選擇Java Web現在選擇Web應用程式並單擊下一步

appletfig13
圖13:從類別“Java Web”中選擇Web應用程式

完成上述步驟後,新增ProjectName,專案位置:

專案名稱: AmitWebApplication 
專案位置: C:\ Users \ amit \ Documents \ NetBeansProjects

現在,點選下一步

appletfig14
圖14:專案名稱為“AmitWebApplication”

從“伺服器和設定”和Apache Tomcat中選擇伺服器以執行AmitWebApplication

appletfig15
圖15:選擇伺服器作為Apache Tomcat

單擊下一步啟動WebApplication專案。它將使用以下程式碼生成“ index.jsp ”檔案:

<%-- 
    Document   : index
    Created on : Nov 6, 2013, 10:46:24 AM
    Author     : amit
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; 
        charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
     </body>
              </html>

appletfig16
圖16:index.jsp

現在通過右鍵單擊AmitWebApplication - >清理和構建執行Web應用程式,如下所示:

appletfig17
圖17:構建AmitWebApplication專案

現在如上圖所示,通過使用功能鍵“F6”執行專案,或者使用如下圖所示的螢幕截圖:

appletfig18
圖18:執行專案

該專案將在本地主機上成功執行,即在Google Chrome中的下述地址(您可以考慮使用任何其他瀏覽器):

localhost:8080/AmitWebApplication/index.jsp

以下螢幕截圖顯示了我們的Web應用程式的成功執行:

appletfig19
圖19:index.jsp在本地主機上執行

在NetBeansIDE中執行WebApplication應遵循上述步驟。

將Applet嵌入/整合到Web應用程式中

按照以下簡單步驟,使用NetBeansIDE將Applet整合到WebApplication中:

RightClick AmitWebApplication->屬性

appletfig20
圖20:專案屬性

“專案屬性 ”對話方塊將開啟。

從“ 類別 ”中選擇包裝,然後單擊“ 新增專案 ”。

appletfig21
圖21:按類別轉到包裝,然後點選“新增專案”

將顯示在NetBeansIDE中開發的專案列表。只需選擇一個你要新增的,這裡我們將新增“ AmitJavaApplication ”專案。

在新增“ AmitJavaApplication ”時,它將自動新增所選的Project jar檔案,即“AmitJavaApplication.jar”,如下面的螢幕截圖所示。之後點選“ 新增專案JAR檔案”按鈕:

注意:僅當專案“AmitJavaApplication”構建時,“AmitJavaApplication”jar檔案才可見。

appletfig22
圖22:導航到AmitJavaApplication專案

新增jar檔案後,單擊確定,只需等待幾秒鐘,直到jar檔案被新增到專案中。該過程如下所示。然後按“ 確定 ”:

appletfig23
圖23:將jar檔案新增到專案中

appletfig24
圖24:Applet在WebApplication中的整合

“jar”檔案被新增到專案中,可以在“ AmitWebApplication ”專案的目錄結構下看到build / web資料夾顯示新增jar檔案:

appletfig25
圖25:在AmitWebApplication專案中顯示新增jar檔案的目錄結構

Applet在這裡嵌入了applet標籤:

<applet code="tutorial.me.AmitApplet" archive="AmitJavaApplication.jar" width="400" height="350">
</applet>

這裡,

小程式屬性 描述 專案使用
指定檔名 tutorial.me.AmitApplet
檔案 指定歸檔檔案的位置(此處為jar檔案) AmitJavaApplication.jar
高度 指定小程式高度 350
寬度 指定小程式寬度 400

appletfig26
圖26:在index.jsp中執行applet的程式碼

碼:

<%-- 
    Document   : index
    Created on : Nov 6, 2013, 10:46:24 AM
    Author     : amit
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>My first WebApplication using NetBeansIDE</title>
    </head>
    <body>
        <h1>Hello World!</h1>
        <br />
        <p>WebApplication using NetBeansIDE...</p>
        
        <!-- Embedding Applet -->
        <applet code="tutorial.me.AmitApplet" archive="AmitJavaApplication.jar"   
        width="400" height="350">
        </applet>
    </body>
             </html>

現在通過右鍵單擊 - > AmitWebApplication - >清理和構建執行Web應用程式專案,如下所示:

appletfig27
圖27:構建AmitWebApplication

專案“成功構建”,可以在“輸出”視窗中看到:

appletfig28
圖28:構建成功

現在如上圖所示的建築專案後,使用功能鍵F6執行專案,或如下所示:

appletfig29
圖29:執行專案

該專案將在本地主機上成功執行,即在Google Chrome中的下述地址(您可以考慮使用任何其他瀏覽器):

localhost:8080/AmitWebApplication/index.jsp

現在,下面顯示的安全警告將顯示為applet是無符號的:

“當它在2012年12月11日釋出Java 7 Update 10時,Oracle在其Java Web瀏覽器外掛中引入了新的安全功能。

“執行未簽名的應用程式將在以後的版本中被阻止,因為它可能是不安全的並且具有安全風險”。

為了理解這些安全問題,我們需要澄清與“Java安全模型”相關的概念,其中涵蓋“未簽名小程式”,“簽名小程式”和“自簽名小程式:

無符號小程式:這種小程式無法訪問所有系統屬性,本地檔案系統等。由於小程式未簽名,因此缺少安全性。根據“Java 7 Update 10”(如上所述),使用者在使用它之前被警告。

簽名小程式:在此,小程式由證書籤署,瀏覽器使用證書頒發機構伺服器進行驗證。在成功驗證簽名和使用者批准後,這種小程式獲得更多的權利。與自簽名(下文討論)和無符號小程式(上面討論)相比,它可以執行更多的任務。

自簽名小程式:這些小程式由開發人員簽名,也可以被視為安全問題。Java外掛仍然提供關於執行自簽名小程式的警告,因為只有開發人員保證這些applet的安全性。

有關與Applet安全模型相關的上述概念的更多資訊,請參閱以下連結。差異顯示在以下給出的連結中,有很好的解釋:http://www.mendoweb.be/blog/java-applets-unsigned-vs-self-signed-vs-signed/

要運行當前的專案“AmitWebApplication”,只需在選擇“ 我接受風險並想要執行此應用程式 ” 單擊“ 執行 ”。 此步驟將成功執行您的Applet:

相關推薦

web應用程式嵌入Applet

小程式是一個小型的以任務為中心的小型應用程式,可在更大的應用程式或程式中執行 在網路上,小程式通常用Java編寫,並插入到網頁中以提供一些特定的功能。 本教程指導您開發Java Applet,並將該applet嵌入Web應用程式,使其在網站上可見。我將使用以下技術: N

Java嵌入式資料庫H2學習總結(二)——在Web應用程式使用H2資料庫

一、搭建測試環境和專案 1.1、搭建JavaWeb測試專案   建立一個【H2DBTest】JavaWeb專案,找到H2資料庫的jar檔案,如下圖所示:      H2資料庫就一個jar檔案,這個Jar檔案裡面包含了使用JDBC方式連線H2資料庫時使用的驅動類,將"h2-1.4.183.jar"加入到

使用Boost::Python在C++應用程式嵌入Python:第二部分

在第1部分中,我們瞭解瞭如何在C++應用程式中嵌入Python,包括從應用程式呼叫Python程式碼的幾種方法。雖然我之前承諾在第2部分中完整實現一個配置解析器,但我認為看一下錯誤解析會更有建設性。一旦我們有一個很好的方法來處理Python程式碼中的錯誤,我將在第3部分中

使用Boost::Python在C++應用程式嵌入Python:第一部分

在本系列教程的簡介中,我說了將Python程式碼整合到Granola程式碼庫中的動機。簡而言之,它可以使我使用Python語言和標準庫的好處來完成在C++中通常很痛苦或笨拙的任務。當然,底線是我不必移植任何已有的C++程式碼。 今天,我們看一下使用boost::pyth

應用程式嵌入的網頁執行時出現“指令碼錯誤”解決方法

 CComPtr<IWebBrowser2> pWB2;  HRESULT hr;  hr = m_wndIE.QueryControl(&pWB2);  if (pWB2)  {   CComVariant v;   CComBSTR url(

MFC應用程式嵌入一個谷歌cef瀏覽器

#include "include/base/cef_lock.h" #include "include/cef_client.h" class ClientHandler : public CefClient, public CefDisplayHandler,

【webpack外掛使用】在開發快速掌握並使用Webpack構建web應用程式

1.webpack-dev-server外掛的基本使用 入門程式 const path = require('path'); // 匯出一個Webpack的配置物件(通過node中的模組操作,向外暴露了一個配置物件) module.exports = { // 需要在這裡手動指定入口

C# MVC按照業務建立多模組web應用程式(UI)

如果想要UI層根據業務進行模組劃分,UI層釋出的時候能達到UI層根據業務單獨打包成dll檔案, 可以在解決方案中將DataObj、DAL、BLL、UI均放在解決方案資料夾下: 1、DataObj根據業務按照模組建立對應的類庫,釋出的時候各個業務模組的DataObj.dll分開,以減低耦合

C#MVC建立多模組web應用程式

當一個應用程式有越來越多的子模組後,應用程式將變得越來越大,複雜度也越來越高,應用程式也越來越難維護。如果把每個子模組,獨立分成不同的web應用程式,則這個專案將易於維護。關於這個的好處,我也描述得不好。總之,模組分開,不同程式設計師的不同模組,不互相影響,一個龐大的專案,如果分為多個Web應用程式

ASP.NET Core與Dapper和VS 2017使用JWT身份驗證WEB API並在Angular2客戶端應用程式使用它

目錄 介紹 背景 步驟1 建立ASP.NET Core Web API專案 Fitness.JWT.API專案說明 使用程式碼 startup.cs JwtIssuerOptions.cs JwtController.cs identity.FindFir

IntelliJ IDEA web應用程式 index.jsp引用jquery,測試總是無法成功,已解決

首先感謝以下帖子的內容 https://bbs.csdn.net/topics/392054905 使用的版本是IntelliJ IDEA 2018.3.1 以下方式寫入引用路徑 <script type="text/javascript" src="${pageContext

Python的一個糟糕的Web應用程式

一、不安全的Web程式示例。 下面展示一個不安全的Web應用程式。 這個程式碼採用了Flask框架,但是不安全的原因不是因為使用了Flask。   上面的程式碼很危險,無法抵禦現在Web上諸多向量的重要攻擊。 先引入上述程式碼中出現的四個模板。 更

web.xml配置Servlet,Servlet被WEB應用程式載入過程

一,<servlet>元素及其子元素,宣告一個Servlet。            <description>*:為Servlet指定一個文字描述。             &

Web應用程式Web網站及部署在IIS

         在Visual Studio可以建立 Web 應用程式專案或網站專案。通過選擇 新建專案 或 開啟專案 建立或開啟一個 Web 應用程式專案在Visual Studio 檔案 

Spring實戰 | 第二部分 Web的Spring(第五章 構建Spring Web應用程式

第五章 構建Spring Web應用程式 對映請求到Spring控制器 透明地繫結表單引數 校驗表單提交 一

【譯】使用 WebView2 將最好的 Web 帶到 .NET 桌面應用程式

  在去年的 Build 大會上,我們引入了 WebView2,這是一個瀏覽器控制元件,可以用新的基於 Chrome 的 Microsoft Edge 來呈現 Web 內容(HTML / CSS / JavaScript)。它最初的範圍僅限於 C/C++ 應用程式。今天,我們很高興地宣佈 .NET 應用程式的

MVC模式在Java Web應用程序的實例分析

rip run writer fault esp 身份驗證 int 網站 table 結合六個基本質量屬性 可用性: 異常 可修改性: 1.維持語義的一致性,高內聚低耦合 2.維持現有的接口,Login依賴LoginIService接口,LoginService依賴ILog

MVC模式在Java Web應用程序的實例

simple handler hand resolv let handle 增加 獨立 efault 1.可用性 使用SimpleMappingExceptionResolver實現異常處理 只需要在Spring的配置文件applicationContext.xml中增加

IIS如何讓子web應用程序繼承根目錄web.config

根目錄 lec DApp color nbsp 如何 應用程序 pan onf 1、一種方式,需要改動根目錄的web.config(不是很推薦) <?xml version="1.0"?> <configuration> <location

XWAF——Web應用程式框架

XWAF框架簡介 版本:V1.0.0.0 XWAF是一個基於java反射和Servlet 技術的Web應用程式框架。其英文全稱為“eXtensible Web Applica