Skip to main content

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. ;-)

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

Popular posts from this blog

Installing and Configuring NextPVR as a Replacement for Windows Media Center

If you follow me on Google+ you'll know I had a recent rant about Windows Media Center, which after running fine for about a year suddenly decided as of January 29 it was done downloading the program guide and by extension was therefore done recording any TV shows.

I'll spare you more ranting and simply say that none of the suggestions I got (which I appreciate!) worked, and rather than spending more time figuring out why, I decided to try something different.

NextPVR is an awesome free (as in beer, not as in freedom unfortunately ...) PVR application for Windows that with a little bit of tweaking handily replaced Windows Media Center. It can even download guide data, which is apparently something WMC no longer feels like doing.

Background I wound up going down this road in a rather circuitous way. My initial goal for the weekend project was to get Raspbmc running on one of my Raspberry Pis. The latest version of XBMC has PVR functionality so I was anxious to try that out as a …

Setting Up Django On a Raspberry Pi

This past weekend I finally got a chance to set up one of my two Raspberry Pis to use as a Django server so I thought I'd share the steps I went through both to save someone else attempting to do this some time as well as get any feedback in case there are different/better ways to do any of this.

I'm running this from my house (URL forthcoming once I get the real Django app finalized and put on the Raspberry Pi) using dyndns.org. I don't cover that aspect of things in this post but I'm happy to write that up as well if people are interested.

General Comments and Assumptions

Using latest Raspbian “wheezy” distro as of 1/19/2013 (http://www.raspberrypi.org/downloads)We’lll be using Nginx (http://nginx.org) as the web server/proxy and Gunicorn (http://gunicorn.org) as the WSGI serverI used http://www.apreche.net/complete-single-server-django-stack-tutorial/ heavily as I was creating this, so many thanks to the author of that tutorial. If you’re looking for more details on …

The Definitive Guide to CouchDB Authentication and Security

With a bold title like that I suppose I should clarify a bit. I finally got frustrated enough with all the disparate and seemingly incomplete information on this topic to want to gather everything I know about this topic into a single place, both so I have it for my own reference but also in the hopes that it will help others.Since CouchDB is just an HTTP resource and can be secured at that level along the same lines as you'd secure any HTTP resource, I should also point out that I will not be covering things like putting a proxy in front of CouchDB, using SSL with CouchDB, or anything along those lines. This post is strictly limited to how authentication and security work within CouchDB itself.CouchDB security is powerful and granular but frankly it's also a bit quirky and counterintuitive. What I'm outlining here is my understanding of all of this after taking several runs at it, reading everything I could find on the Internet (yes, the whole Internet!), and a great deal…