嵌入jsp时,applet中不显示数据库值

时间:2012-02-14 17:49:52

标签: java jsp jdbc applet

我的applet运行良好,显示了我需要的数据库中的所有数据。但是,问题是我将创建的jar文件嵌入到jsp中。它没有显示数据库中的数据。

<applet code="myform.Form" archive="applet.jar" width="600" height="480"/>

applet正在jsp页面上运行,但在组合框中,项目(来自数据库)无法选择。 jar文件位于jsp页面所在的同一目录中。 提前致谢。

这是我的applet代码

package myform;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.swing.JComboBox;

public class Form extends javax.swing.JApplet {

    /** Initializes the applet Form */
    public void init() {
        try {
            java.awt.EventQueue.invokeAndWait(new Runnable() {
                public void run() {
                    initComponents();
                }
            });
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        try {
            String connstr="jdbc:oracle:thin:@localhost:1521/XE";
            String uname="epolicia";
            String pass="admin";
            Class.forName("oracle.jdbc.OracleDriver").newInstance();
            Connection connect =DriverManager.getConnection(connstr,uname,pass);
            // System.out.println("Oracle driver is loaded");
            Statement state=connect.createStatement();
            ResultSet rs = state.executeQuery("SELECT * FROM ZONE");

            while (rs.next()) {
                zoneList.addItem(rs.getString(2)+" ("+rs.getString(1)+")");
                //System.out.println(rs.getString(1));
            }
        } catch(Exception ex) {
            //list.addItem(ex);
        }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jTextField2 = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        zoneList = new javax.swing.JComboBox();
        addDistrict = new javax.swing.JButton();
        cancelDistrict = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        jLabel5 = new javax.swing.JLabel();

        jLabel1.setFont(new java.awt.Font("Times New Roman", 1, 12));
        jLabel1.setText("District ID :");

        jLabel2.setFont(new java.awt.Font("Times New Roman", 1, 12));
        jLabel2.setText("District Name :");

        jLabel3.setFont(new java.awt.Font("Times New Roman", 1, 12));
        jLabel3.setText("Zone :");

        addDistrict.setFont(new java.awt.Font("Times New Roman", 1, 12));
        addDistrict.setText("Add");


        addDistrict.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jLabel5.setText("index: " + zoneList.getSelectedItem());//addDistrictActionPerformed(evt);
            }
        });

        cancelDistrict.setFont(new java.awt.Font("Times New Roman", 1, 12));
        cancelDistrict.setText("Cancel");
        cancelDistrict.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cancelDistrictActionPerformed(evt);
            }
        });

        jLabel4.setFont(new java.awt.Font("Times New Roman", 1, 24));
        jLabel4.setText("Add New District");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(47, 47, 47)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel1)
                            .addComponent(jLabel2)
                            .addComponent(jLabel3))
                        .addGap(28, 28, 28)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 157, Short.MAX_VALUE)
                            .addComponent(jTextField2)
                            .addComponent(zoneList, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(101, 101, 101)
                        .addComponent(jLabel4, javax.swing.GroupLayout.PREFERRED_SIZE, 190, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(101, 101, 101)
                        .addComponent(addDistrict)
                        .addGap(28, 28, 28)
                        .addComponent(cancelDistrict))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(163, 163, 163)
                        .addComponent(jLabel5)))
                .addContainerGap(87, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addComponent(jLabel4)
                .addGap(36, 36, 36)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel1))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel2))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(zoneList, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(jLabel3))
                .addGap(36, 36, 36)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(addDistrict)
                    .addComponent(cancelDistrict))
                .addGap(35, 35, 35)
                .addComponent(jLabel5)
                .addContainerGap(77, Short.MAX_VALUE))
        );

        jLabel5.getAccessibleContext().setAccessibleName("lbl");
    }// </editor-fold>                        

    private void addDistrictActionPerformed(java.awt.event.ActionEvent evt) {                                            

    }                                           

    private void cancelDistrictActionPerformed(java.awt.event.ActionEvent evt) {                                               
        // TODO add your handling code here:
        System.exit(0);
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton addDistrict;
    private javax.swing.JButton cancelDistrict;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JTextField jTextField1;
    private javax.swing.JTextField jTextField2;
    private javax.swing.JComboBox zoneList;
    // End of variables declaration                   

}

2 个答案:

答案 0 :(得分:2)

在服务器端进行JDBC访问并为applet提供Web服务是更好的方法:this thread很好地涵盖了这个主题。

作为答案发布,因为评论变得非常拥挤,但这应该作为副本关闭。

答案 1 :(得分:0)

是不是您没有与JAR一起部署Oracle JDBC驱动程序?

要包含Oracle驱动程序依赖项,您需要将ojdbc6.jar(或其他版本)放在服务器上的applet.jar旁边(如果您在本地运行,则放在本地文件夹中)。

然后,您需要让您的浏览器Java类路径知道它。您可以通过以逗号后的archive属性添加它来执行此操作:

<applet code="myform.Form" archive="applet.jar,ojdbc6.jar" width="600" height="480"/>

或将其添加到applet.jar的清单文件中(如果有多个JAR按空格分隔):Class-Path: ojdbc6.jar

修改: Oracle在他们的文档中特别提到可以从Applet使用他们的JDBC驱动程序。但他们提到安全问题等。

ojdbc14.jar给出的异常可能意味着您正在尝试访问其他数据库服务器 - 而不是一个小程序来自。如果您正在从本地文件系统运行applet,这非常合乎逻辑。

要避免此错误,您需要按照其文档section 24.2.2中的说明对您的小程序进行签名。