Yes, Velocity has been around for quite awhile now, and it was intended to
address many of the problems inherent in (older versions of) JSP.

Nowdays JSP (especially JSP2) coding techniques and technologies have rather
caught up with velocity. Your assesment that it doesnt add much value over
the EL capabilities in JSP2 is pretty much on the mark. Of course it wasnt
always this way and for a long time velocity was much nicer. (Still looks
nicer ;->)

I reckon you are also correct in believing that velocity design provided a
lot of the inspiration for the jstl stuff.

-----Original Message-----
From: Larry Meadors [mailto:[EMAIL PROTECTED]
Sent: Friday, 27 February 2004 21:26
To: [EMAIL PROTECTED]
Subject: Re: [OT] JSP or Velocity


>>> [EMAIL PROTECTED] 02/27/04 5:44 AM >>>
> I am starting to develop an application using struts and have been
> looking round the rest of the Jakarta project and came across the
> Velocity project.
>
> I was interested to see which which people recommended for a relative
> newbie

After looking at velocity, I am certainly of the opinion that it adds no
value over
jsp2/jstl. It offers absolutely nothing that the jsp2/jstl combination
does not.
The only difference is that velocity is a bit more terse (if/else/end
instead of
<c:choose>/<c:when>/<c:otherwise>) and that it uses # instead of the <>.

It is important to note that I am talking about jsp2 and tomcat 5, not
the jsp1 in
tomcat 4.

A while back I looked in detail at the jsp/velocity comparison on the
velocity site.

There are several issues with the comparison. The person writing the
case study
was cleary biased towards velocity and had never even considered JSTL
(which
in all fairness may not have been available at that time). Looking at
the code
(both the velocity and jstl versions are below) I think that velocity
clearly had
an influence on the jsp2/jstl constructs.

The first thing I noticed was that the two pages do not do the same
thing.
The jsp turns off the session (the vm does not). The jsp stores
variables that
are never used which were factored out in the vm version. The vm version

is missing required code (for example, the repCode and urlEvent
variables
are never defined).

The jsp page is also *very* poorly written using scriptlets. You should
rarely need
to use scriptlets in jsp1/jstl pages, and I suspect with jsp2/jstl, you
will not ever
*need* to.

With struts, you do not need to use <jsp:useBean> tags either because
the controller
does that for you.

The jsp2/jstl version is a bit more verbose because it is based on xml
so you
cannot have things like if/else/end because they are unbalanced, but
other than
that, there are no significant differences.

After converting the page to use JSTL and eliminating ALL of the <% %>
stuff, we
get something more like this:

===
The JSP version:
===
<table width="600" border="0" cellspacing="0" cellpadding="4"
   bgcolor="white">
   <tr>
       <td>
           <i><b>Topic: ${meeting.topic}</b></i>

           <c:forEach list="${meeting.storedEventsIterator}"
var="event">
               <c:set var="yapper"
value="${meeting.participation[event.fromId]}" />
               <c:choose>
                   <c:when test="${event.class.name eq
'fqcn.URLPushedEvent'}">
                       <c:choose>
                           <c:when test="${yapper.role eq 'R'}">
                               <c:set var="repId"
value="${yapper.participantId}" />
                               <font
color="#000000"><b>${yapper.name}:</b></font>
                           </c:when>
                           <c:otherwise>
                               <font
color="#0000f0"><b>${yapper.name}:</b></font>
                           </c:otherwise>
                       </c:choose>
                       <a
href="${event.storedData}">"${event.storedData}"</a> <br>
                   </c:when>
                   <c:when test="${event.class.name eq
'fqcn.ChatEvent'}">
                       <c:choose>
                           <c:when test="${yapper.role eq 'R'}">
                               <font
color="#000000"><b>${yapper.name}:</b></font>
                               <c:set var="repId"
value="${yapper.participantId}" />
                           </c:when>
                           <c:otherwise>
                               <font
color="#0000f0"><b>${yapper.name}:</b></font>
                           </c:otherwise>
                       </c:choose>
                       <a
href="${event.storedData}">"${event.storedData}"</a> <br>
                   </c:when>
               </c:choose>
           </c:forEach>
           <hr>
           <br>${meeting.meetingId}:${repId}<br>
       </td>
   </tr>
</table>
===
The velocity version:
===
<table width="600" border="0" cellspacing="0" cellpadding="4"
   bgcolor="white">
   <tr>
       <td>
           <i><b>Topic: $meeting.getTopic()</b></i><p>

           #foreach( $event in $meeting.getStoredEventsIterator() )
               #set( $yapper =
$meeting.getParticipation($event.getFromId()) )

               #if( $event.getClass().getName().equals($urlEvent) )

                   #if( $repRole.equals($yapper.getRole()) )
                       #set( $repId = $yapper.getParticipantId() )
                       <font
color="$blk"><b>$yapper.getName()</b></font>

                   #else
                       <font
color="$blu"><b>$yapper.getName()</b></font>
                   #end

                   <a
href="$event.getStoredData()">$event.getStoredData()</a> <br>

               #elseif( $event.getClass().getName().equals($chatEvent) )

                   #if($repRole.equals($yapper.getRole()) )
                       #set( $repId = $yapper.getParticipantId() )
                       <font
color="$blk"><b>$yapper.getName()</b></font>

                   #else
                       <font
color="$blu"><b>$yapper.getName()</b></font>
                   #end

                   $event.getStoredData() <br>
               #end

           #end
           <hr>
           <br>$meeting.getMeetingId():$repId<br>
       </td>
   </tr>
</table>
===

Larry


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to