Rony,

On 4/20/21 07:06, Rony G. Flatscher (Apache) wrote:
Hi Chris,

On 19.04.2021 17:32, Christopher Schultz wrote:

On 4/18/21 08:06, Rony G. Flatscher (Apache) wrote:
On 11.03.2021 12:23, Rony G. Flatscher (Apache) wrote:
On 11.03.2021 11:53, Mark Thomas wrote:
On 10/03/2021 15:14, Rony G. Flatscher (Apache) wrote:
Is there a way to know/infer that a JSP got freshly compiled from e.g. a taglib 
library?

For caching purposes it would be necessary to learn whether a JSP got 
recompiled as the cache
should
be purged in that case.

Is there a way to find out whether a JSP run is the very first after 
(re-)compilation?

Or can one rely that if a JSP gets recompiled that a new PageContext gets 
created for it (or if
reused does not contain any custom attributes placed there earlier at the 
PAGE_SCOPE)?
Page scope gets reset at the end of a request so that won't work.

It might not be perfect (containers are allowed to unload unused servlets/JSPs) 
but in you are
using Tomcat and haven't configured maxLoadedJsps or jspIdleTimeout then you 
should be able to use
the jspInit() method. (See JSP spec for details).

It seems that the implicit JSP "page" object can probably be used to determine 
whether a JSP got
recompiled as its hashCode() changes after recompilation.

Something safer might be to keep a cache of datestamps keyed by JSP name (or 
whatever). When the
JSP's init() method is called, you could update the datestamp.

Or do you need to know about the recompliation before the init() is called?

The BodyTag interface [1,2] does not define an init() method, you think 
probably of the Servlet
interface [3,4].

Aha, it wasn't clear to me that you needed to know at the taglib level that a JSP had been recompiled.

Ad 'page' implicit object: if the 'page' object gets referenced in the taglib, 
then a re-compiled
version of the same JSP page is guaranteed to have a different hashCode() value

Really? That seems ... awfully convenient and also quite hacky. Do you have a reference to the spec that guarantees that modified hashcode?

and as such suffices
to determine whether a page got compiled since the last time this got checked 
in the taglib. The
motivation for learning about a (re-)fresh(ed) page is to remove any cached 
compiled scripts of that
jsp (if it got recompiled then something got changed in the jsp, so also 
scripts might have changed)
and from then on build a new cache.

Yeah, I don't see a great way to do that. You can get the ServletContext from the PageContext, but ... you would still need a lot of support in there to get what you want.

What about cheating and just putting a Tag at the top-level where you have to declare the "version" of the script, and changing the "version" causes the cache to be cleared?

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to