<%@ page import="java.io.*,java.util.*,javax.script.*" %> <% // A script console jsp for Java // Last modified: Zemian Deng <saltnlight5@gmail.com> 05/15/2014 ScriptEngineManager factory = new ScriptEngineManager(); // Get all the script engine names available by inspecting the classpath List<String> scriptEngineNames = new ArrayList<String>(); for (ScriptEngineFactory fac : factory.getEngineFactories()) { String name = fac.getLanguageName(); if (name.toLowerCase().equals("ecmascript")) { name = "JavaScript"; } scriptEngineNames.add(name); } // Process Form String scriptText = request.getParameter("scriptText"); String scriptEngineName = request.getParameter("scriptEngineName"); if (scriptEngineName == null) scriptEngineName = "JavaScript"; request.setAttribute("scriptText", scriptText); request.setAttribute("scriptEngineName", scriptEngineName); if (scriptText != null) { ScriptEngine scriptEngine = factory.getEngineByName(scriptEngineName); if (scriptEngine == null) throw new RuntimeException("Failed to find ScriptEngine " + scriptEngineName); ByteArrayOutputStream outStream = new ByteArrayOutputStream(); PrintWriter webOut = new PrintWriter(outStream); // Script engine binding variables. Bindings bindings = scriptEngine.createBindings(); bindings.put("page", page); bindings.put("config", config); bindings.put("pageContext", pageContext); bindings.put("request", request); bindings.put("response", response); bindings.put("out", out); bindings.put("session", session); bindings.put("application", application); bindings.put("scriptEngine", scriptEngine); bindings.put("webout", webOut); // Run the scriptText try { Object scriptingOutput = scriptEngine.eval(scriptText, bindings); if (scriptingOutput == null) scriptingOutput = ""; request.setAttribute("scriptingOutput", scriptingOutput); } catch (Exception e) { throw new RuntimeException("Failed execute scriptText.", e); } finally { webOut.close(); String webOutResult = outStream.toString(); if (webOutResult == null) webOutResult = ""; request.setAttribute("webOutResult", webOutResult); } } else { request.setAttribute("scriptText", ""); request.setAttribute("scriptingOutput", ""); request.setAttribute("webOutResult", ""); } %> <html> <head> <!-- Use a nice and simple JavaScript editor from http://codemirror.net --> <script src="//raw.githubusercontent.com/marijnh/CodeMirror/4.1.0/lib/codemirror.js"></script> <script src="//raw.githubusercontent.com/marijnh/CodeMirror/4.1.0/mode/javascript/javascript.js"></script> <script src="//raw.githubusercontent.com/marijnh/CodeMirror/4.1.0/mode/groovy/groovy.js"></script> <link rel="stylesheet" href="//raw.githubusercontent.com/marijnh/CodeMirror/4.1.0/lib/codemirror.css"> </head> <body> <h4>Script Console for Java</h4> <form method="post"> <textarea id="code" name="scriptText" rows="20" cols="80"><%= request.getAttribute("scriptText") %></textarea> <br/> <select name="scriptEngineName"> <% for (String engineName : scriptEngineNames) { if (scriptEngineName.equals(engineName)) out.println("<option selected='true'>" + engineName + "</option>"); else out.println("<option>" + engineName + "</option>"); } %> </select> <input name="Run" type="submit" value="run"/> <hr/> <pre> <%= request.getAttribute("scriptingOutput") %> <%= request.getAttribute("webOutResult") %> </pre> </form> <script> var editor = CodeMirror.fromTextArea(document.getElementById("code"), { lineNumbers: true }); </script> </body></html>