views:

44

answers:

2

Since JSPs adhere to a standard API, can I precompile them in my projects and then deploy the result on any server?

Specifically, I'm using Tomcat, JBoss and WebSphere.

+1  A: 

Since the servlet/JSP engines are different between app servers there could be byte code added that's not portable.

I'd have to write a test to confirm it. If I have time I'll try it with Tomcat and WebLogic and report back.

duffymo
I'm not worried about byte code added at runtime.
Aaron Digulla
You will be if it expects app server specific JARs to be in the CLASSPATH and doesn't find them.
duffymo
+4  A: 

No, not really. If you look at the java source that gets created by the JSP compiler, you'll see that it extends a base class that's proprietary to the container. For example, JBoss 4's servlet container generates JSP classes that extend org.apache.jasper.runtime.HttpJspBase, which is Tomcat and JBossWeb-specific.

So you might be able to reuse pre-compiled JSPs between different tomcat-based servers, but even then it might not work.

skaffman
+1. Another point is that the compiler itself tends to be a different class altogether - Tomcat uses the Jasper compiler, which need not be the case with other servlet/JSP containers. NB: WebLogic uses the weblogic.appc class to flag off the compilation process.
Vineet Reynolds