Applets y servlets

Tengo un applet que pide al usuario que introduzca un dato, después el applet llama a un servlet que utiliza ese dato para consultar una base de datos, y el resultado se lo vuelve a pasar al applet y este lo muestra.
Estoy trabajando con Kawa y puedo ejecutar sin ningún problema el applet en el applet viewer, pero si intento ejecutarlo en el explorador no me devuelve los resultados.
¿Tienes idea de que puedo hacer?

1 respuesta

Respuesta
1
¿Applet y servlet están en el mismo dominio (fíjate en la URL) con la que se accede a ambos?
De momento no los tengo subidos en ninguna página web, trabajo en modo local. El servlet lo tengo en el directorio servlets de JavaWebServer y el applet lo tengo en otro carpeta el .java, .class y .html juntos.
Aunque he probado a meterlos tres ficheros en el mismo directorio que el servlet y tampoco ha funcionado.
¿Si te lanza algún tipo de excepción o te algún error el applet en la consola de java?
Cuando lo lanzo desde Kawa no me da ningún tipo de error ni de excepción, y va perfectamente, pero al ejecutar el html es como si no hiciera la llamada al servlet
A parte tengo otro error, cuando lo que hago en la base de datos es una consulta no tengo ningún problema, peri si quiero hacer una actualización de los datos me da un error en la ejecución de la sentencia SQL. La orden que le pongo es esta:
"UPDATE stock SET cantidad=cantidad-1 WHERE codigo='"+cod+"'"
Muchas gracias por ti interés
Que lo que te da es una excepción cuando usas el navegador, para verlo, si usas el plugin de java JRE puede hacer doble click sobre el icono que te sale de java en la barra de tareas, si no, vete al menu del Explorer Herramientas/Opciones Internet/Avanzadas/Java VM y activa todas las opciones, entonces reinicia el ordenador y vuelve a ejecutar la URL, ahora en el menú del Explorer vete a Ver/COnsola Java y dime si te sale algún mensaje de error ahí.
En cuanto a lo del SQL, ¿Qué error te da?, la sentencia parece ser correcta
He hecho lo que me has dicho y me sale una lista muy grande. Lo primero que me sale es esto:
Exception occurred during event dispatching:
com.ms.security.SecurityExceptionEx[applet.action]: cannot access "127.0.0.1":8080
at com/ms/security/permissions/NetIOPermission.check
at com/ms/security/PolicyEngine.deepCheck
at com/ms/security/PolicyEngine.checkPermission
at com/ms/net/wininet/WininetURLConnection.checkSecurity
at com/ms/net/wininet/WininetURLConnection.connect
at com/ms/net/wininet/WininetURLConnection.getInputStream
at applet.action
La lista de "at" es mucho más larga.
El error que me da de sql todavía no he conseguido saber cual es, porque la excepción se produce en el servlet y no se como puedo verla
Te esta dando una excepción de seguridad, que tiene que ver con que el applet y el servlet están ubicados en distinto dominio, aunque si dices que están en el mismos servidor, ponlos los dos en el mismo directorio a ver si así funciona.
En cuanto al error del servlet, basta con que pongas la url del servlet con los parámetros en el navegador para simular un paeticion y ver que te devuelve.
He probado a ponerlo todo en la carpeta servlets de Java Web Server, y sigue dándome la misma excepción.
El servlet si lo ejecuto directamente en el explorador no me dice nada de la excepción. Para capturarla tengo puesto el siguiente código:
catch(SQLException e){
System.out.println(e)
}
Solo me saca lo que pongo a través de un ServletOutputStream, pero no se como puedo coger la excepción y hacer que me la saque por el ServletOutputStream.
No se si me he explicado muy bien, y si me podrás ayudar, de todas formas debes estar ya un poco harto de mi. Si es así dímelo y finalizare ya la pregunta, de igual manera te voy a poner un montón de estrellas porque me estas ayudando mucho.
Muchas gracias
¿Trozo de código donde haces la conexión y lees el resultado del servlet?
En cuanto a lo del sql, mira en la consola del tomcat (o del servidor de aplicaciones que tengas) o sino, escribe simplemente out. Println, sin el system, o bien lo escribes en un fichero que luego puedas leer.
private Connection con;
public void init(ServletConfig config) throws ServletException{
try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con=DriverManager.getConnection("jdbc:odbc:midb");
}catch (Exception e){
System.out.println(e);
}
}
public void service (HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {
String cod, sentencia, nombre;
cod=req.getParameter("codigo");
sentencia="SELECT nombre FROM productos WHERE codigo='"+ cod+"'";
res.setContentType("text");
ServletOutputStream out = res.getOutputStream();
try{
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery(sentencia);
while (rs.next()){
nombre=rs.getString(1);
out.println("nombre: " + nombre);
}
}catch (SQLException e){
System.out.println(e);
}
}
Ya he conseguido que me ejecute la sentencia de UPDATE. Me sigue dando un error pero por lo menos si que me modifica la base de datos. El mensaje de error que me da es "No resulset was produced"
una orden update, insert o deelete no devuelve resultset, solo te lo devuelve si haces una select. Para ello usa mejor executeUpdate en vez de executeQuery. Aunque en el código que me enviaste no venia nada de un UPDATE.
Lo que tenias que neviarme es el código de l applet que hace la conexión con el servlet
import java.awt.*;
import java.applet.*;
import java.net.*;
import java.io.*;
public class applet extends Applet{
TextField parametro;
int i;
String cadena;
String inputLine[];
String result="";
public void init(){
Color c1=new Color(100,100,255);
setBackground(c1);
Label param= new Label("Introduce el codigo: ", Label.RIGHT);
parametro=new TextField(14);
add(param);
add(parametro);
}
public boolean action(Event evtObj, Object arg){
if(evtObj.target instanceof TextField){
cadena="http://127.0.0.1:8080/servlet/disminuir?codigo="+ parametro.getText();
try{
URL servlet=new URL(cadena);
URLConnection servletconnection=servlet.openConnection();
DataInputStream dat=new DataInputStream(servletconnection.getInputStream());
inputLine=new String[10];
i=1;
while((inputLine=dat.readLine())!=null){
System.out.println(inputLine);
i++;
}
dat.close();
removeAll();
result=inputLine[5];
repaint();
}catch (MalformedURLException me){
System.out.println("Error: " +me);
}catch (IOException ioe){
System.out.println("Error: " +ioe);
}
return true;
}
return false;
}
public void paint(Graphics g){
g.drawString(result,6,100);
}
}
Ya he cambiado la orden por executeUpdate y ya me va.
Gracias
Que me envíes la url de la página con la que accedes al applet (http://...)
Te comente que no tengo la página subida en ningún sitio, directamente le doy al archivo html, pero te digo las cosas que he probado:
-Poner el html junto con el .java y el . class en la misma carpeta que el servlet.
-Ponerlos en una carpeta de java web server que esta dentro de la carpeta servlets y se llama public_html
He intentado teniendo el .html en esas ubicaciones intentar acceder a través de la url (127.0.0.1:8080/servlet/public_html) pero no me deja
¿Me puedes pasar el código html también?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas