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 Tue, 05 Aug 2003 18:55:44 GMT
Mark,

The jspc task that I used from the standard "Optional Tasks" that come with ant, does support
a webapp parameter, and this works
fine to compile the whole webapp without any regexp voodoo ( I didn't use it because it won't
allow you to exclude any files ).

I did see once a conversation on the ant-dev list that complained about how brittle the jspc
task has been to maintain.

So jasper ( with 4.1.28 ) comes with it's own built in task to completely compile a webapp.
As described here :
http://jakarta.apache.org/tomcat/tomcat-4.1-doc/jasper-howto.html#Web%20Application%20Compilation

If you ignore the part about the web.xml fragment, and make sure your output dir is the same
as your Tomcat workdir, then this works
too ( I think - I did so many experiments my mind is now cloudy ).

Steph



> -----Original Message-----
> From: Mark R. Diggory [mailto:mdiggory@latte.harvard.edu]
> Sent: Monday, August 04, 2003 5:05 PM
> To: Tomcat Users List
> Subject: Re: Jasper, JSPC, Ant and Precompiling JSP's
>
>
> Bingo! Thats pretty tight. I hadn't thought of using regexp, but I'll
> give this a try, it seems pretty logical. I didn't realize someone had
> contributed a forEach task.
>
> I'd still like to hear about if theres any work ongoing in relation to
> JspC and precompilation of entire webapplications in Tomcat?
>
> thanks again,
> Mark
>
>
> Steph Richardson wrote:
>
> > 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
> >>
> >>
> >>
> >
> >
> >
> > ---------------------------------------------------------------------
> > 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