Definitely good advice, anyone interested in a small framework that does
this kind of pre-compiling, and works with Jboss... But any Jasper distro
will do... Check out http://www.nsdev.org/jboss and look at the bottom of
the framework story.

I'm working on integrating that framework with AndroMDA too, which I'll
release when I get a chance to.

Cheers.

-Neal

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] 
> Sent: November 11, 2003 6:23 AM
> To: [EMAIL PROTECTED]
> Subject: [Andromda-user] improving your web application
> 
> 
> Hello everybody,
> 
> I know it is a little off-topic, but I thought I'd share this 
> anyway since it might help people a lot.
> 
> I have always found it unnatural for enterprise application 
> to deploy code that would still need to be compiled at 
> runtime, I am thinking about JSPs not Velocity (which is 
> interpreted). Think about it, you put your JSPs on the 
> server, the server lazily compiles them into Java files which 
> are then compiled into classes. A lot of work that can easily 
> be avoided.
> 
> What I am going to describe next is a way to include those 
> final classes into your WAR bundle instead of the regular 
> JSPs. I just succeeded in doing so and noticed a tremendous 
> performance increase; also, this time JSPs are compiled 
> during development which means it is easier to spot possible 
> compilation problems. You don't want to click and wait for 
> each page at runtime to see if they show or not.
> 
> The idea is probably so simple that not too much people 
> really thought about it.
> 
> 1. JSP --> Java
> 
> You will need to use the JSP compiler from a JSP/Servlet 
> container in order to compile the JSPs into Java code, I used 
> org.apache.jasper.JspC from the tomcat 
> jasper-compiler-4.0.4.jar bundle (also need jasper-runtime-4.0.4.jar)
> 
> 2. Java --> Classes
> 
> Simply compile the generated classes into bytecode, you will 
> need to put all the classes from your /WEB-INF/lib into the 
> classpath (Struts, Servlet, ...)
> 
> 3. WAR
> 
> but all those classes either in /WEB-INF/classes or bundle 
> them in a jar and put the jar in /WEB-INF/lib, these classes 
> are the servlets
> 
> 4. web.xml
> 
> one thing remains, since your code still refers to JSPs you 
> will need to explain somehow which JSP corresponds to which 
> servlet, well, the org.apache.jasper.JspC can also generate a 
> piece of XML with web.xml directives, you will need to merge 
> it with your original web.xml
> 
> 5. ready to deploy
> 
> deploy that puppy into your container, sit back and smile (to 
> be honest, I still have a small issue where the welcome file 
> is not picked up for some reason, so I have to type 
> http://127.0.0.1:8080/project/index.jsp manually instead of 
> only http://127.0.0.1:8080/project/)
> 
> here is an Ant snippet that'll do the job
> 
>  <echo message="Generating Java sources from JSPs"/>
>  <java classname="org.apache.jasper.JspC" fork="true" 
> classpathref="classpath">
>    <arg value="-d"/>
>    <arg value="${jspc.output.java}"/>
>    <arg value="-webinc"/>
>    <arg value="${jspc.output.webxml}"/>
>    <arg value="-webapp"/>
>    <arg value="${jspc.input.webapp}"/>
>  </java>
> 
> optionally you can use the -p argument to generate into a 
> subdir, read the jasper docs for more info
> 
> jspc.output.java=where jspc puts the generated java files 
> (dir) jspc.output.webxml=where jspc puts the generated 
> web.xml directives (file) jspc.input.webapp=where YOU will 
> put your exploded WAR file (dir)
> 
> it seems the order of the arguments is important
> 
> so after that compile the java sources, put them in 
> /WEB-INF/classes, remove the JSPs (!), merge web.xml and 
> bundle your war again
> 
> while I'm at it, you merge like this:
> 
>  <!-- merging additional web.xml directives -->
>  <echo message="Merging additional web.xml directives"/>  
> <loadfile property="directives" 
> srcFile="${jspc.output.webxml}"/>  <replace 
> file="${jsp.input.webapp}/WEB-INF/web.xml"
>           value="${directives}"
>           token="<!-- precompilation merge-point -->"/>
> 
> I have a line after the last servlet declaration in my web.xml:
> 
> <!-- precompilation merge-point -->
> 
> it will be replaced by the generated directives
> 
> 
> btw, in my classpath I have:
> 
> servletapi 2.3
> struts 1.1
> jasper-compiler 4.0.4 (tomcat)
> jasper-runtime 4.0.4 (tomcat)
> commons (collections, beanutils, digester and logging)
> 
> 
> 
> I hope this helps, it will surely have a good impact on 
> performance, trust me.
> 
> best regards
> Wouter.
> 
> __________________________________________________________________
> McAfee VirusScan Online from the Netscape Network. 
> Comprehensive protection for your entire computer. Get your 
> free trial today! 
> http://channels.netscape.com/ns/computing/mcafee/index.jsp?pro
mo=393397

Get AOL Instant Messenger 5.1 free of charge.  Download Now!
http://aim.aol.com/aimnew/Aim/register.adp?promo=380455


-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest developments in
Apache, PHP, Perl, XML, Java, MySQL, WebDAV, and more!
http://www.apachecon.com/ _______________________________________________
Andromda-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/andromda-user


-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/
_______________________________________________
Andromda-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/andromda-user

Reply via email to