On 18.10.2019 13:32, Rony G. Flatscher (Apache) wrote:
> Thank you very much for your remarks and pointers, Mark!
>
> ---rony
>
> P.S.: Not sure as of yet, what scope it should be. The idea would be to allow
> any of the Java script
> languages to be used. Currently the naive assumption is that one could
> redirect the script's stdout
> to the servlet's 'out' object (by using ScriptContext.setWriter(out)) and
> using ScriptEngineFactory
> helper methods getOutputStatement(...), getProgram(...) and maybe
> getMethodCallSyntax(...) for
> creating the appropriate script program from the JSP that then gets
> dispatched via
> ScriptEngine.eval(...) from the created Java program.
... cut ...
Just to give an idea what the Java code employing javax.script might look like
(untested), assuming
that from the JSP the respective script program got created (referred to by
"String
scriptFromJSP=..." in the Java snippet to be generated below):
import javax.script.*;
... cut ...
// the scriptCode value is created when transforming the JSP to
its script code
representation using
// ScriptEngineFactory utility methods
String scriptFromJSP="...script created from JSP ...";
try
{
// create a ScriptContext for this run
ScriptContext sc=new SimpleScriptContext();
sc.setWriter(out); // set stdout to 'out'
// get its ENGINE_SCOPE Bindings
Bindings
engineScope=sc.getBindings(ScriptContext.ENGINE_SCOPE);
// set JSP file name for the script
engineScope.put(ScriptEngine.FILENAME, jspFileName);
// define arguments for the script program
engineScope.put(ScriptEngine.ARGV, new
Object[]{request,response});
// set JSP objects
engineScope.put("application", application);
engineScope.put("config", config);
engineScope.put("out", out);
engineScope.put("pageContext", pageContext);
engineScope.put("request" , request);
engineScope.put("response", response);
// get ScriptEngine, evaluate (run) script program
ScriptEngineManager sem=new ScriptEngineManager();
ScriptEngine se=sem.getEngineByName("LANGUAGE_NAME"); //
language name used for JSP
"language" attribute in the page directive
// run (execute) the script with the ScriptContext
Object res=se.eval(scriptFromJSP, sc); // run the script
}
catch (ScriptException sexc) // an error occurred
{
sexc.printStackTrace();
System.exit(-1);
}
... cut ...
---rony