tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Steph Richardson" <st...@kvasar.com>
Subject RE: Jasper, JSPC, Ant and Precompiling JSP's
Date Mon, 04 Aug 2003 20:28:45 GMT
Mark,

I have a working solution for pre-compiling jsp, that I am using successfully with all our
tomcat installations. The target looks
like :

	<target name="jspc_preparse" description="Use Jasper2 to parse jsp into java">
		<mkdir dir="${webapp.workdir}"/>

		<jspc
		    srcdir="${webapp.rootdir}"
		    destdir="${webapp.workdir}"
		    failonerror="false"
		    classpathref="jspc_parse.classpath"
		    package="org.apache.jsp"
		    compiler="jasper41">

			<exclude name="**/WEB-INF/**"/>
			<exclude name="include/**"/>
		</jspc>

		<!-- Fix all the package names -->
		<replaceregexp
			match="^package org.apache.jsp.*;"
			replace="package org.apache.jsp;" >
			<fileset dir="${webapp.workdir}" >
				<include name="**/*.java" />
			</fileset>
		</replaceregexp>

	</target>



I then use <foreach> from antcontrib to iterate over the directories and compile them
individually.
Tomcat seems to accept all the resulting class files at runtime with no problems.

Regards,

Steph


> -----Original Message-----
> From: Steph Richardson [mailto:steph@kvasar.com]
> Sent: Friday, August 01, 2003 7:06 PM
> To: Tomcat Users List
> Subject: RE: Jasper, JSPC, Ant and Precompiling JSP's
>
>
>
> That is EXACTLY what I am trying to do today. I've tooled around in the ant code, and
it seems this is more of a jasper issue than
> an ant one, because ant passes a long list of files to jasper, with the unwanted pathnames
that end up as part of your
> package name.
>
> I'm pretty sure if you used something like <foreach> to iterate through the same
fileset that is being created in the
> jspc task, and
> called jspc for each directory individually, and used the package="org.apache.jsp" attribute,
then this would work - because then
> jasper wouldn't know about you're own subdirectory. But this seems ugly so I haven't
actually done it yet.
>
> You can use the webapp element inside jspc, but then jasper doesn't know about your <exclude>
and so tries to compile some
> fragment.jsp type include files, that are not really full jsp files, and so it crashes
on those ( this is my current
> problem ). But
> if all your included files are called .inc rather than .jsp then this may work.
> <jspc
>        destdir="${webapp.workdir}"
>        failonerror="false"
>        classpathref="jspPreCompile.classpath"
>        package="org.apache.jsp"
>        compiler="jasper41">
> 	 <webapp basedir="${webapp.path}"/>
>      <exclude name="**/WEB-INF/**"/>
>      <exclude name="include/**"/>
> </jspc>
>
>
> So now I'm trying to make an ant step or task to replace the first line of every generated
_jsp.java file with the correct package
> name, between generating them and compiling them.
> Plz met me know if you have something better.
>
>
> Regards,
>
> Steph
>
>
> PS - if you're from the same HMDC i know, I suspect the site you are trying to pre-compile,
is one I wrote last summer.
>
>
>
> > -----Original Message-----
> > From: Mark R. Diggory [mailto:mdiggory@latte.harvard.edu]
> > Sent: Friday, August 01, 2003 5:19 PM
> > To: Tomcat Users List
> > Subject: Jasper, JSPC, Ant and Precompiling JSP's
> >
> >
> > Hello,
> >
> > I've done my best to review the archives to resolve my problem, but I've
> > not found a solution there so I'm posting it.
> >
> > I'm stuck back on Tomcat 4.1.24 (LE) and I'm encountering some issues
> > with JSP Precompilation using Ant and JSPC. First let me outline my problem.
> >
> > Most messages I've read to date focus on using JSP recompiling to turn
> > the JSP into Servlets stored in a WAR file and require generating a
> > fragment web.xml file and including it into your web.xml, I AM NOT
> > trying to do this. I want my JSP's to get precompiled into the work
> > directory of Tomcat and used from there, the exact same way that Tomcat
> > does it. This way afterward, if the jsp is modified, tomcat can still
> > recompile it.
> >
> >
> > I have the following jspc and javac tasks coded in my build.xml:
> >
> > <mkdir dir="/var/tomcat4/work/Standalone/localhost/Foo"/>
> >
> > <jspc srcdir="${deploy.home}"
> >        destdir="/var/tomcat4/work/Standalone/localhost/Foo"
> >        failonerror="false"
> >        compiler="jasper41">
> >      <classpath>
> >          <!-- snip -->
> >      </classpath>
> >      <exclude name="**/WEB-INF/**"/>
> > </jspc>
> >
> > <javac destdir="/var/tomcat4/work/Standalone/localhost/Foo"
> >         optimize="off"
> >         debug="on" failonerror="false"
> >         srcdir="/var/tomcat4/work/Standalone/localhost/Foo"
> >         excludes="**/*.smap">
> >       <classpath>
> >          <!-- snip -->
> >       </classpath>
> > </javac>
> >
> >
> > Both tasks get completed successfully. I observe problems in the package
> > names of the JSPC generated java files where the following is the case.
> >
> > /var/tomcat/webapps/Foo/Bar/Bam.jsp results in the package name
> >
> > package Bar;
> > ...
> >
> > which becomes a problem when I try to access this JSP included into
> > another, I get the following error
> >
> > java.lang.NoClassDefFoundError: org/apache/jsp/Bam_jsp (wrong name:
> > Bar/Bam_jsp)
> > 	at java.lang.ClassLoader.defineClass0(Native Method)
> > 	at java.lang.ClassLoader.defineClass(ClassLoader.java:502)
> > 	at java.lang.ClassLoader.defineClass(ClassLoader.java:431)
> > 	at org.apache.jasper.servlet.JasperLoader.loadClass(Unknown Source)
> > 	at org.apache.jasper.servlet.JasperLoader.loadClass(Unknown Source)
> > 	at org.apache.jasper.JspCompilationContext.load(Unknown Source)
> > 	at org.apache.jasper.servlet.JspServletWrapper.getServlet(Unknown Source)
> > 	at org.apache.jasper.compiler.Compiler.isOutDated(Unknown Source)
> > 	at org.apache.jasper.compiler.Compiler.isOutDated(Unknown Source)
> > 	...
> >
> >
> > I read somewhere that work had been done on my version (4.1.24) to
> > eliminate a naming conflict problem. I assume this is why there are now
> > package names on my _jsp.java files.  I find that when I let
> > Tomcat/Jasper compile all my jsp's the java files *all* have the package
> > name "org.apache.jsp" no matter what their directory. I assume that my
> > compilation is conflicting with Tomcats because of the package naming
> > differences.
> >
> > So, I've tried adding the following attribute package="org.apache.jsp"
> > to the jspc task, but this results in even more problems because all the
> > package names now look like:
> >
> > package org.apache.jsp.Bar;
> >
> > and when they are compiled, they end up in a separate directory
> >
> > /var/tomcat4/work/Foo/org/apache/jsp/Bar/Bam_jsp.java
> >
> > Any ideas or solutions out there would be really helpful for me. I just
> > want to have Tomcat start out using my precompiled jsp's instead of
> > initially compiling them itself.
> >
> > thanks
> > Mark Diggory
> > HMDC
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> > For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
> >
> >
> >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: tomcat-user-help@jakarta.apache.org
>
>
>


Mime
View raw message