Puedes hacer la llamada al applet y dentro de ella, invocar a un servlet de por medio, donde los puntos o lo que quieras del applet, puedas escribirlos a través del canal de comunicaciones del mismo servlet <<outputStream>> guardándolos en un vector de objetos si así lo quieres, e internamente lo procesas y si quieres retornas nuevamente el valor resultado al mismo applet o todo lo que tú quieras hacer con ello.
Puedes usar como referencia esta clase Java y este applet, y luego tú le das forma para tu aplicación:    
 Código PHP:
    package myPackage;
 
public class AppObjJavaScript extends Applet {
 
    private static String strError = "Error";
    private JSObject win;
    private Vector vectorSalida = new Vector();
    private Vector vectorEntrada = new Vector();
 
    public AppObjJavaScript() {}
 
    public String devolverDatos() {
 
        int i;
        StringBuffer strRespuesta = new StringBuffer();
        if (this.vectorEntrada.size() == 0)
            return "Ningun valor devuelto";
        else {
            if (this.vectorEntrada.size() > 1)
                for (i = 0; i < this.vectorEntrada.size(); i++) {
                    try {
                        strRespuesta.append(this.vectorEntrada.elementAt(i).toString());
                        strRespuesta.append(clsConstantes.DELIMITADOR_COMPONENTE);
                    } catch (Exception e) {
                    }
                } else
                strRespuesta.append(this.vectorEntrada.elementAt(0).toString());
        }
        return strRespuesta.toString();
    }
 
    public int enviarDatos(String strUrl) {
        URL con = null;
        URLConnection conAbierta = null;
        ObjectOutputStream objOutServlet = null;
        ObjectInputStream objInput = null;
        Object o = null;
        ExcepcionGenerica clex = null;
        String strPantallaerror = "";
        String pantallaerror = "";
        String strPantallaError = "";
 
        try {
            con = new URL(strUrl);
            conAbierta = con.openConnection();
            conAbierta.setDoInput(true);
            conAbierta.setDoOutput(true);
            conAbierta.setUseCaches(false);
            conAbierta.setRequestProperty("Content-Type", "application/octet-stream");
 
            // Obtiene el canal de escritura
            objOutServlet = new ObjectOutputStream(conAbierta.getOutputStream());
 
            // Escribe en el canal
            objOutServlet.writeObject(this.vectorSalida);
            objOutServlet.flush();
            objOutServlet.close();
 
            // Vacia el vector de salida
            this.vectorSalida = null;
            this.vectorSalida = new Vector();
 
            // Espera de resultado
            objInput = new ObjectInputStream(conAbierta.getInputStream());
            o = objInput.readObject();
            objInput.close();
            if (o instanceof ExcepcionGenerica) {
                clex = (ExcepcionGenerica) o;
                /**/
                System.out.println("Error de tipo ExcepcionGenerica --> " + clex.getBolErrorControlado());
                // En función del tipo de error se muestra una pantalla de error u otra
                if (clex.getBolErrorControlado()) {
                    strPantallaerror = "window.showModalDialog('/html/errores/avisousuario.html','" + 
                       clex.getStrError() + "','dialogWidth:300px;dialogHeight:175px;status:no;help:no;resizable:no');";
                    win.eval(strPantallaerror);
                } else {
                    pantallaerror = clex.fncMostrarPantallaError().trim();
                    strPantallaError = pantallaerror.substring(28, pantallaerror.length() - 9).trim();
                    win.eval(strPantallaError);
                }
                return Integer.valueOf(clex.getIntFilaTablaError()).intValue();
            } else
                if (o instanceof Vector) {
                    this.vectorEntrada = (Vector) o;
                    return -1;
                } else
                    return -1;
        } catch (java.io.IOException e) {
            System.out.println("catch IO: Error de tipo Excepcion Generica --> " + e.getMessage());
            clex = new ExcepcionGenerica("ERROR en la comunicación con el Servlet (datoSimple): " + e.getMessage());
 
            pantallaerror = clex.fncMostrarPantallaError().trim();
            strPantallaError = pantallaerror.substring(28, pantallaerror.length() - 9).trim();
 
            win.eval(strPantallaError);
            return 0;
 
        } catch (Exception e) {
            /**/
            System.out.println("catch: Error de tipo Excepcion Generica --> " + e.getMessage());
            clex = new ExcepcionGenerica("ERROR en la comunicación con el Servlet (datoSimple): " + e.getMessage());
 
            pantallaerror = clex.fncMostrarPantallaError().trim();
            strPantallaError = pantallaerror.substring(28, pantallaerror.length() - 9).trim();
 
            win.eval(strPantallaError);
            return 0;
        }
    }
 
 
    public String getAppletInfo() {
        return "Carga una serie de componentes de la factoría de presentación";
    }
 
    public String[][] getParameterInfo() {
        return null;
    }
    public void init() {
        try {
            System.out.println("Applet de factoria cargado.");
            jbInit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    private void jbInit() throws Exception {
        win = JSObject.getWindow(this);
    }
 
    public String obtenerDatoCompuesto(String servlet, String argumentos, int numColumnas, boolean combo) {
        ObjectInputStream objIn = null;
        Object objLeido = null;
        Vector vectorArrayObjetos = new Vector();
        Object arrayObjetos[];
        String strValorDevuelto = "";
        int indiceArray;
        ExcepcionGenerica clex = null;
 
        //Llamo al servlet
        try {
            if (!argumentos.equalsIgnoreCase(""))
                argumentos = "?" + argumentos;
 
            URL con = new URL(servlet + argumentos);
            URLConnection conAbierta = con.openConnection();
 
            conAbierta.setDoInput(true);
            conAbierta.setUseCaches(false);
            conAbierta.setRequestProperty("Content-Type", "application/octet-stream");
 
            //Leer Datos del Servlet
            objIn = new ObjectInputStream(conAbierta.getInputStream());
 
            objLeido = (Object) objIn.readObject();
            objIn.close();
 
            if (objLeido instanceof Vector) {
                vectorArrayObjetos = (Vector) objLeido;
                String haySiguiente = "F";
 
                // Comprobar si manda información de paginación.
                if (vectorArrayObjetos != null && vectorArrayObjetos.size() > 0 && vectorArrayObjetos.elementAt(0) 
                          instanceof Boolean) {
                    if (((Boolean) vectorArrayObjetos.elementAt(0)).booleanValue())
                        haySiguiente = "T";
                    else
                        haySiguiente = "F";
                    vectorArrayObjetos = (Vector) vectorArrayObjetos.elementAt(1);
                }
 
                if (combo)
                    haySiguiente = "";
 
                for (int indiceVector = 0; indiceVector < vectorArrayObjetos.size(); indiceVector++) {
                    arrayObjetos = (Object[]) vectorArrayObjetos.elementAt(indiceVector);
 
                    for (indiceArray = 0; indiceArray < numColumnas; indiceArray++) {
                        if (arrayObjetos[indiceArray] == null)
                            strValorDevuelto += " " + clsConstantes.DELIMITADOR_CAMPO;
                        else
                            strValorDevuelto += arrayObjetos[indiceArray].toString() + clsConstantes.DELIMITADOR_CAMPO;
                    }
 
                    strValorDevuelto += clsConstantes.DELIMITADOR_FILA;
                }
 
                if (strValorDevuelto.length() > 2)
                    strValorDevuelto = haySiguiente + strValorDevuelto.substring(0, (strValorDevuelto.length() - 2));
            }
            else
                if (objLeido instanceof ExcepcionGenerica) {
                    // capturamos la ClsExcepcion
                    clex = new ExcepcionGenerica((ExcepcionGenerica) objLeido);
 
                    String pantallaerror = clex.fncMostrarPantallaError().trim();
                    String strPantallaError = pantallaerror.substring(30, pantallaerror.length() - 9).trim();
 
                    win.eval(strPantallaError);
 
                }
                else
                    strValorDevuelto = strError;
 
        } //fin del try
 
        catch (Exception excServlet) {
            //clex = new ExcepcionGenerica("ERROR en la comunicación con el Servlet (datoSimple): " + excServlet.getMessage());
            clex = new ExcepcionGenerica(excServlet.getMessage());
            String pantallaerror = clex.fncMostrarPantallaError().trim();
            String strPantallaError = pantallaerror.substring(28, pantallaerror.length() - 9).trim();
            win.eval(strPantallaError);
 
            strValorDevuelto = strError;
        }
        finally {
            objIn = null;
            objLeido = null;
            return (strValorDevuelto);
        }
    } 
    
  continúa .............