|
From: <php...@li...> - 2010-09-14 20:15:11
|
On 9/14/2010 1:03 PM, php...@li... wrote:
Darn, I misspoke, see correction below... Marc
> On 9/12/2010 3:48 AM, php...@li... wrote:
>> Hi again,
>>
>> insert a
>>
>> instance.getEngine().setContext(new
>> PhpCompiledHttpScriptContext(instance.getEngine().getContext(),this,application,request,response));
>>
>> before calling instance.eval(). Otherwise JSR223 will use the default
>> context, which isn't very usable in a web-context.
> Hi Jost - Hmmmm since the method evalPHP, as you sent it to me in your
> previous email, is declared private static final, one cannot use the
> 'this' parameter. Do you see any problem with removing the static final
> from the declaration? That allows this to be called in the context of
> the instance of the servlet that is running. But doing so will then
OOPS! I meant this to say -
> cause the parameters of PhpCompiledHttpScriptContext
> - application, request, and response to be undefined since this code is within the Declaration section of the
> servlet. I think the application parameter can be retrieved via a call
> to this.getServletContext(), but the only way to get the request and
> response parameters will be to pass them in to the evalPHP method. Do
> you concur? I am thinking the following -
>
> private String evalPHP(String arg, HttpServletRequest request,
> HttpServletResponse response) {
> CompiledScript instance =
> (CompiledScript)((java.security.cert.CertStoreParameters)script).clone();
> instance.getEngine().put("script", arg);
> OutputStream out = new ByteArrayOutputStream();
> Writer writer = new OutputStreamWriter(out);
> instance.getEngine().getContext().setWriter(writer);
> instance.getEngine().setContext((ScriptContext)new
>
> PhpCompiledHttpScriptContext(instance.getEngine().getContext(),this,this.getServletContext(),request,response));
> try {
> instance.eval();
>
> } catch (ScriptException e) {
> throw new RuntimeException("bleh!");
> }
> try {
> writer.close();
> } catch (IOException e) {
> throw new RuntimeException("bleh!");
> }
> String result = out.toString();
> return result;
> }
>
>
> I have gone ahead and tried this, and it almost got me to what I want.
> But one problem remains and I don't grok the code enough to be able to
> solve on my own, so need a bit more guidance. The PHP script that I want
> to embed in the middle of a Javascript section generates a line of
> Javascript that I want the servlet to write back out, at the point where
> the call to evalPHP is made. But when I execute this jsp servlet, the
> generated Javascript from the PHP script is being put out at the very
> beginning of the document. (I was also surprised that the return result
> from evalPHP is null....)
>
> Thanks again for all your help! Marc...
>
>
>
|