Выполнить апплет jdbc в браузере

import java.sql.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

/*
<applet code="A0" width=250 height=200>
</applet>
*/

public class A0 extends Applet implements ActionListener,ItemListener
{
String msg="";

Button view,delete,create,edit,reapp,exit;
TextField M_head;
int x,i,ans=0,flag;

public void init()
{
setLayout(new FlowLayout(FlowLayout.CENTER,50,3));

view = new Button("view");
delete = new Button("delete");
create = new Button("create");
edit = new Button("edit");
reapp = new Button("reapp");
exit= new Button("exit");
M_head = new TextField(15);

add(view);
add(delete);
add(create);
System.out.println("vikram");
add(edit);
add(reapp);
add(exit);
System.out.println("phaneendra");
add(M_head);

view.addActionListener(this);
delete.addActionListener(this);
create.addActionListener(this);
edit.addActionListener(this);
reapp.addActionListener(this);
exit.addActionListener(this);
M_head.addActionListener(this);




}

public void actionPerformed(ActionEvent ae)
{

String str=ae.getActionCommand();

if(str.equals("view"))
{msg ="1";}
if(str.equals("delete"))
{msg ="2";}
if(str.equals("create"))
{msg ="3";}
if(str.equals("edit"))
{msg ="4";}
if(str.equals("reapp"))
{msg ="5";}
if(str.equals("exit"))
{msg ="6";}

if(msg=="3")
{

try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//String filename = "E:/vikram/conn/new/db/north.mdb";
String filename = "./db/north.mdb";
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
//String url ="jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\cheminDeMaBaseEtNomdeLaBdd";
database+=filename.trim();
String head = M_head.getText();
String head1 = head.trim();
Connection con = DriverManager.getConnection(database,"","");
Statement doo = con.createStatement();
//String vi ="create table head1 (Reapporder integer, Amount integer)";
String vi="insert into head1 values(1,2);";

boolean i=false;
i=doo.execute(vi);

if(i)
M_head.setText("Failed to insert");

else
M_head.setText("record inserted");

}


catch(Exception err)
{
System.out.println("Error :"+err);
}


}




}

public void itemStateChanged(ItemEvent ie)
{
repaint();
}

public void paint(Graphics g)
{
g.drawString(msg,70,200); //No use

g.drawString("ANSWER=",6,200); // No use

}
}

Это A0.txt

grant {
permission java.lang.RuntimePermission
"accessClassInPackage.sun.jdbc.odbc";
permission java.util.PropertyPermission
"file.encoding", "read";
};

файл A0.html

<html>
<head>


</head>
<body>
<applet code=A0     width=250 height=200></applet>
</body>
</html>

Этот код выполняется в команде Appletviewer, но не в любом браузере


person Vikram Phaneendra    schedule 14.12.2009    source источник
comment
Использование JDBC в апплете — не лучшая идея. Попытка использовать JDBC-ODBC безнадежна.   -  person Tom Hawtin - tackline    schedule 14.12.2009


Ответы (2)


Как прокомментировали другие, вы действительно не хотите этого делать.

Просто создайте веб-сервис на стороне сервера (который может быть простым ванильным сервлетом) и используйте java.net.URLConnection в апплете.

Пример базового сервлета:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    String action = request.getParameter("action"); // Or request.getPathInfo() whatever you want.
    String result = someDAO.doAction(action);
    response.getWriter().write(result);
}

Пример базового апплета:

URL url = new URL("http://example.com/databaseservlet?action=someaction");
URLConnection connection = url.openConnection();
InputStream result = connection.getInputStream(); // Important. This actually fires the request! 

Однако будьте осторожны с инъекциями SQL. Ни в коем случае не передавайте необработанные SQL-запросы в качестве параметров запроса или информации о пути и используйте PreparedStatement все время в коде DAO.

В качестве формата данных ответа вы можете использовать обычную ванильную строку (как показано в примере) или строку XML или строку JSON или даже полноценный Java-объект с небольшим помощь по сериализации.

person BalusC    schedule 14.12.2009
comment
в драйвере типа 1, как я могу загрузить свой сайт в ftp-область. и возможно ли без tomcat или любого другого сервера запускать сервлеты? таким образом я использую апплеты. - person Vikram Phaneendra; 14.12.2009

Вы не можете использовать JDBC на апплете по соображениям безопасности.

Вы должны написать корпоративное приложение (на Java, .NET, Python, PHP) и развернуть его на сервере приложений. В этом приложении вы можете опубликовать некоторые веб-сервисы, чтобы ваш апплет, наконец, смог получить доступ к вашей базе данных.

Что-то вроде этого:

APPLET ‹-> СЕРВЕР ПРИЛОЖЕНИЙ (HTTP-связь) ‹-> BACKEND (база данных)

Вот веб-сайт, объясняющий некоторые аспекты апплета, связанные с безопасностью.

person Pablo Santa Cruz    schedule 14.12.2009
comment
предоставить {разрешение java.lang.RuntimePermissionaccessClassInPackage.sun.jdbc.odbc; разрешение java.util.PropertyPermissionfile.encoding, чтение;}; Этот файл хранится в файле .jar, а затем добавляется в атрибут архива тега апплета ????? - person Vikram Phaneendra; 14.12.2009