Probleme mit Java und Javascript Aufruf

Jungspund

Mitglied
Hallo ich habe folgende Probleme.
Hoffe ich bin hier richtig, denn es ist eher eine Mischung aus Java Javascript und HTML


1)

Ich versuche eine Methode aus einer vorhandenen Javascript Datei aufzurufen. Bin im Internet schon auf verschiedene Lösungen gestoßen, die Leider nicht funktionieren. Erst einmal zum Code:

Java:
<%   
    
    ScriptEngine js = new ScriptEngineManager().getEngineByName("javascript");
    Bindings bindings = js.getBindings(ScriptContext.ENGINE_SCOPE);
    
    //String f = new File(".").getCanonicalPath();
    //System.out.print(f);
    
    js.eval(new FileReader("tablescript.js"));
    DBConnection connection     = (DBConnection)    request.getSession().getAttribute("connection");
    Update_Query query          = (Update_Query)    request.getSession().getAttribute("query");
    
    String[][] files            = query.getUpdates();
    for(int i = 0;i<files.length;++i) {
       js.eval("addFiles(" + files[i][0] + "," + files[i][1] +"," + files[i][2] + ")");
    }
    DownloadListe Download = new DownloadListe();
    
    
    %>

Der Javascriptteil
Java:
function addFiles(filename, beschreibung, kategorie) {
            var table       = document.getElementById("file_table");
            var body        = table.getElementsByTagName("tbody")[0];
            var tr          = document.createElement("tr");
            var td1         = document.createElement("td");
                td1.appendChild(document.createTextNode(filename));
            var td2         = document.createElement("td");
                td2.appendChild(document.createTextNode(beschreibung));
            var td3         = document.createElement("td");
            var checkbox    = document.createElement("input");
                checkbox.setAttribute("type","checkbox");
                td3.appendChild(checkbox);
            var td4         = document.createElement("td");
                td4.appendChild(document.createTextNode(kategorie));
            
            td1.setAttribute("width", "31%");
            td2.setAttribute("width", "31%");
            td3.setAttribute("width", "7%");
            td4.setAttribute("width", "31%");
            
            tr.appendChild(td3);
            tr.appendChild(td1);
            tr.appendChild(td2);
            tr.appendChild(td4);
            tr.setAttribute("id",filename);
            
            tr.setAttribute("style", "background:rgb(245, 245, 245)");
            
            body.appendChild(tr);
            ++counter;
                
        }

Es handelt sich dabei um eine JSP Datei, in der ich Versuche via Java eine Javascript Methode in einer anderen Datei aufzurufen, und diese dann ausführen möchte, um eine Tabelle zu füllen. Dabei tritt folgender Fehler auf

Code:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "files" is not defined. (<Unknown source>#1) in <Unknown source> at line number 1
	at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
	at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
	at javax.script.AbstractScriptEngine.eval(Unknown Source)
	at org.apache.jsp.DownloadManager_jsp._jspService(DownloadManager_jsp.java:119)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

Ohne die files Angaben bekomme ich nun folgenden Fehler:
Code:
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "document" is not defined. (<Unknown source>#92) in <Unknown source> at line number 92
	at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
	at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
	at javax.script.AbstractScriptEngine.eval(Unknown Source)
	at org.apache.jsp.DownloadManager_jsp._jspService(DownloadManager_jsp.java:118)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at controller.LoginController.login(LoginController.java:56)
	at controller.LoginController.doPost(LoginController.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
17.08.2012 11:36:22 org.apache.catalina.core.StandardWrapperValve invoke
SCHWERWIEGEND: Servlet.service() for servlet LoginController threw exception
javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "document" is not defined. (<Unknown source>#92) in <Unknown source> at line number 92
	at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
	at com.sun.script.javascript.RhinoScriptEngine.eval(Unknown Source)
	at javax.script.AbstractScriptEngine.eval(Unknown Source)
	at org.apache.jsp.DownloadManager_jsp._jspService(DownloadManager_jsp.java:118)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
	at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at controller.LoginController.login(LoginController.java:56)
	at controller.LoginController.doPost(LoginController.java:33)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

Das zweite Problem folgt in der Antwort hier drauf
 
Nur ein kleiner Security Hinweis:
DBConnection connection = (DBConnection) request.getSession().getAttribute("connection");
Update_Query query = (Update_Query) request.getSession().getAttribute("query");

Das ist natürlich leichtsinnig, den query direkt aus dem parameter zu übernehmen. Stichwort sql injection.
 
@Socke: Also wenn ich nicht komplett daneben liegen,... Request-Parameter, ob POST oder GET, steht im ServletRequest unter getAttribute oder getParameter drin, nicht in der HttpSession.
 

Neue Beiträge

Zurück