Sunday, February 22, 2004

Java Revisited

In quite an interesting turn of events this week, a Java application I wrote two years ago so impressed the company to which it was being presented that they want to buy it. Since this application also represented more or less the last line of Java code I've written before switching to a position where I do ColdFusion full time, I decided I better invest in the latest Java books and see what I need to do to update the application to modern Java standards. The results were actually an extremely pleasant surprise.


 


Java has changed quite a bit since I was last using it regularly, particularly in the arena of Java web application programming. Most notably is the addition of the the JSP Standard Tag Library (JSTL), which was designed in order to take a lot of common tasks that used to be a headache in JSP and encapsulate them into easy-to-use tags. (Sounding familiar?) I'm also pretty interested in the JSTL because you can now use Java tag libraries in ColdFusion, so I was curious to see if there's anything in the JSTL that might be useful in ColdFusion.


I was really struck with the numerous similarities between what CF does natively and what JSP does through the JSTL, but it really hit home when I got to the chapter in the latest O'Reilly Java Server Pages book that covers SQL and database access.


Prior to JSTL, developers were stuck rolling their own solutions to the extremely typical SQL interaction that happens in 99% of all web applications. Once you tackle it the first time all the subsequent times you have to do these sorts of things aren't *that* big a deal, but JSP was still lacking a native way to do this simply, which ColdFusion has had since day 1. The JSTL now contains a SQL tag library, which is an extremely welcome addition, and a quick code sample might make my point better for me than simply describing it.


The sample code in the book that introduces the SQL JSTL is a typical Employee database. I won't put the complete example in here, but let's take a look at an insert into the database of a new employee. This is the "action" page to which a JSP form for entering a new employee is submitted. First we import a couple of tag libraries, one for SQL functionality, the other for data formatting:



<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
<%@ taglib prefix="fmt" uri="http:/java.sun.com/jsp/jstl/fmt" %>


Then we have to deal with the employee's hire date momentarily:


<fmt:parseDate value="{$param.empDate}" var="parsedEmpDate" pattern="yyyy-MM-dd" />

Then we grab the current date using a Date bean:


<jsp:useBean id="now" class="java.util.Date" />

Then we do our insert using the SQL tag library:


<sql:update>

INSERT INTO Employee

(UserName, Password, FirstName, LastName,

Dept, EmpDate, EmailAddr, ModDate)

VALUES (?, ?, ?, ?, ?, ?, ?, ?)

<sql:param value="${param.userName}" />

<sql:param value="${param.password}" />

<sql:param value="${param.firstName}" />

<sql:param value="${param.lastName}" />

<sql:param value="${param.dept}" />

<sql:dateParam value="${parsedEmpDate}" type="date" />

<sql:param value="${param.emailAddr}" />

<sql:param value="${now}" />

</sql:update>

For those of you who remember doing this sort of thing in Java two or three years ago, this may seem A) completely foreign, and B) very, very cool. Now let's look at this same action in ColdFusion just to drive my point home:


<cfquery name="qInsertEmployee" datasource="myDataSource">

INSERT INTO Employee

(UserName, Password, FirstName, LastName,

Dept, EmpDate, EmailAddr, ModDate)

VALUES

(<cfqueryparam value="#form.userName#" cfsqltype="cf_sql_varchar" />,

<cfqueryparam value="#form.password#" cfsqltype="cf_sql_varchar" />,

<cfqueryparam value="#form.firstName#" cfsqltype="cf_sql_varchar" />,

<cfqueryparam value="#form.lastName#" cfsqltype="cf_sql_varchar" />,

<cfqueryparam value="#form.dept#" cfsqltype="cf_sql_varchar" />,

<cfqueryparam value="#CreateODBCDateTime(form.empDate)#" cfsqltype="cf_sql_date" />,

<cfqueryparam value="#form.emailAddr#" cfsqltype="cf_sql_varchar" />,

<cfqueryparam value="#CreateODBCDateTime(Now())#" type="cf_sql_timestamp" />)

</cfquery>

Is Java starting to look more like ColdFusion? I think so, and personally I think this is a very good thing. The Java camp is finally starting to realize that while Java is exteremely powerful, it previously lacked a way to handle mundane, repetitive tasks such as this. Developers were rolling their own solutions of course, but then one application implements the exact same task completely differently than another, which can be a problem from a compatibility and maintenance perspective.


When I first got the word I was going to have to resurrect my long-forgotten application to prepare it for sale, I had mixed feelings. I remember being incredibly less productive in Java than I can be in ColdFusion, but I must say that the changes to Java almost have me excited about Java again! The JSTL of course has a ton more functionality that I won't go into at the moment, but suffice it to say that Java has come a long way in the last couple of years, and web application development in Java will no longer be the headache it once was. Why? Because ColdFusion had it right all along of course, and Java is finally starting to catch on. ;-)

3 comments:

arkadash said...

Pretty good post.I found this site very informative.Ready to hear more in the future.thank you for share. buy steroids

markken said...

I'm also pretty interested in the JSTL because you can now use Java tag libraries in ColdFusion, so I was curious to see steroid profiles if there's anything in the JSTL that might be useful in ColdFusion.

markken said...

Java has changed quite a bit since I was last using it regularly, particularly in the arena of Java web application programming. Most notably is the addition of the the JSP Standard Tag Library (JSTL), injectable steroids which was designed in order to take a lot of common tasks that used to be a