Just for kicks, here is the JOT (http://www.jotobjects.com) version of
the example from Hans' article. The EachDay bean would be roughly
similar to the ForEachDayTag class in the article, with methods getNext,
getIsSunday, and getFormatDate (you don't have to know anything about
custom tags, JSTL, or EL syntax to implement this version).
----------------------------------------
<table>
    JOT.Repeat(JOT.EachDay.Next)
        JOT.If(JOT.EachDay.isSunday())
            <tr bgcolor="white">
        JOT.Else
            <tr bgcolor="red">
        JOT.End
            <td>
                JOT.EachDay.formatDate("EE dd, MMM yyyy")
            </td>
        </tr>
    JOT.End
</table>
----------------------------------------
Paul Copeland, JOT Object Technologies - http://www.jotobjects.com

On Thu, Oct 31, 2002 at 12:15:08PM -0800, Hans Bergsten wrote:

Dror Matalon wrote:

Hans,

I just read the article which is very interesting for people that want
to use libraries to develop JSTL style tags.

In reading the article, I realized that I had a nagging question
about JSTL, tag libraries, etc vs JSP.
Before I answer, let's just clarify what "JSTL vs JSP" means. JSTL is
defined as a tag library that can be implemented (by anyone, but
typically by container implementors) using the standard JSP API for
custom tag libraries. So there's really no "JSTL vs JSP"; using JSTL
_is_ using JSP, just as using the standard <jsp:useBean>, scriptlets,
etc. means using JSP.

The only difference between JSTL and any other tag library is that JSTL
is defined by a spec, and therefore more likely to be supported by all
containers (eventually) without having to install it. This also means
that a container vendor can choice to support it by generating highly
optimized code when converting a JSP page to a servlet, e.g. generate
a regular Java if statement instead of calls to the tag handler for
<c:if>.

With this in mind, I therefore assume that you really wonder about
"using custom tag libraries, such as JSTL, vs using Java code in
scriptlets" based on your comments below. That's a fair question (even
though it's been asked and answered many times on this list and
elsewhere ;-)


To quote from your article some code:

----------------------------------------
<table>
  <xmp:forEachDay var="curr">
     <c:set var="bg" value="white" />
     <xmp:ifSunday>
        <c:set var="bg" value="red" />
     </xmp:ifSunday>
     <tr bgcolor="<c:out value="${bg}" />">
        <td>
           <fmt:formatDate value="${curr.time}"
              pattern="EE dd, MMM yyyy" />
        </td>
     </tr>
  </xmp:forEachDay>
</table>
----------------------------------------


Is JSTL clearly easier than JSP? I'll admit that I'm biased. As
someone who know Java this looks more complicated than doing the
same or similar things with JSP. But rather than use anecdotal
evidence one way or another I'd be intrested in more systematic
research on this.
The best way I can answer this question is to show how this
example can be written with Java code in scriptlets instead:

 <%
   Calendar calendar = new GregorianCalendar();
   calendar.set(Calendar.DAY_OF_MONTH, 1);
   int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
   int thisMonth = calendar.get(Calendar.MONTH);
   int currMonth = thisMonth;
   int currDay = calendar.get(Calendar.DAY_OF_MONTH);
   SimpleDateFormat dateFormat = new SimpleDateFormat("EE dd, MM yyy");
 %>
 <table>
   <%
     while (currMonth == thisMonth && currDay <= lastDay) {
       String bg = "white";
       if (calendar.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) {
         bg = "red";
       }
   %>
   <tr bgcolor="<%= bg %>">
     <td>
       <%= dateFormat.format(calendar.getTime()) %>
     </td>
   </tr>
   <%
       calendar.set(Calendar.DAY_OF_MONTH,
         calendar.get(Calendar.DAY_OF_MONTH) + 1);
       currMonth = calendar.get(Calendar.MONTH);
       currDay = calendar.get(Calendar.DAY_OF_MONTH);
     }
   %>
 </table>

Which version looks looks easier to you? The, of course, answer
depends on your background. In both versions, it's clearly
"programming"; the primary difference is syntax, but there are also
a few other important differences:
1) Code size
  The scripting version is double the size of the JSTL version
  (30 lines vs 14 lines)
2) Knowledge requirements
  For the scripting version I need to know about the Calendar and
  how to set and get its values, and the SimpleDateFormat class.
  For the JSTL version, I need to know about the custom tags,
  their attributes, and the properties of the exposed data I can
  access using the EL.
3) Syntax error handling
  With the scripting version, if I make a syntax error, I get cryptic
  javac error messages (e.g. "'catch' without 'try'") with line
  numbers that refer to the generated servlet source code.
  With the JSTL version, I (mostly) get error messages that identify
  the custom action and attribute names with line numbers that refer
  to the JSP page source.
4) Development tools
  If I put the Java code (custom actions, beans) in standard class
  files, I can develop the code with a regular Java IDE or syntax
  aware text editor (e.g. emacs), and debug it using standard Java
  debuggers.
  If I put the Java code in the JSP pages, I need special tools that
  understands both Java and JSP syntax.

So, even if you really know Java, I think the above shows that using
JSTL and other custom actions still have advantages. And if you're
new to Java and primarily want to get some dynamic web pages working,
there's no doubt that using custom actions and JSTL saves you from a
lot of headaches ;-)

As a side note I can say that, even though I've been a programmer for
more than 20 years, the last 5 or so in Java, it took me a lot longer
to write the Java scriptlet version than the JSTL version, and I made a
number of silly mistakes along the way (resulting in syntax errors and
even infinite loops).


Do you know of any focus groups or other research to compare how
long/hard it is to get people up to speed with JSTL/Tags vs standard
JSP.  How about vs ASP, PHP and other competing technologies?
It's not exactly what you ask about, but there's a project starting
up at the URL below to compare different web application development
frameworks:

 <http://www.waferproject.org/index.html>

The last time I looked, they hadn't got very far, but you may want to
join them and help out.


On a similar note, there's been a recent presentation made comparing
these different technologies by a yahoo engineer explaining why, at
least for some projects, they're migrating to PHP.
http://public.yahoo.com/~radwin/talks/yahoo-phpcon2002.htm

The only reasons they mention against Java/JSP is that native thread
support on FreeBSD is not available yet.
Right, I saw that. It's not really related to this issue, though.


Thanks for the article and any responses,
You're welcome.

Hans
--
Hans Bergsten           [EMAIL PROTECTED]
Gefion Software         http://www.gefionsoftware.com
JavaServer Pages        http://TheJSPBook.com

===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
For digest: mailto [EMAIL PROTECTED] with body: "set JSP-INTEREST DIGEST".
Some relevant FAQs on JSP/Servlets can be found at:

http://archives.java.sun.com/jsp-interest.html
http://java.sun.com/products/jsp/faq.html
http://www.esperanto.org.nz/jsp/jspfaq.jsp
http://www.jguru.com/faq/index.jsp
http://www.jspinsider.com

Reply via email to