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

Running a Django Application on Windows Server 2012 with IIS

This is a first for me since under normal circumstances we run all our Django applications on Linux with Nginx, but we're in the process of developing an application for another department and due to the requirements around this project, we'll be handing the code off to them to deploy. They don't have any experience with Linux or web servers other than IIS, so I recently took up the challenge of figuring out how to run Django applications on Windows Server 2012 with IIS.

Based on the dated or complete lack of information around this I'm assuming it's not something that's very common in the wild, so I thought I'd share what I came up with in case others need to do this.


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

Assumptions and CaveatsThe operating system is Windows Server 2012 R2, 64-bit. If another variant of the operating system is being used, these instructions may not work properly.All of the soft…

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 …

Fixing DPI Scaling Issues in Skype for Business on Windows 10

My setup for my day job these days is a Surface Pro 4 and either an LG 34UC87M-B or a Dell P2715Q monitor, depending on where I'm working. This is a fantastic setup, but some applications have trouble dealing with the high pixel density and don't scale appropriately.
One case in point is Skype for Business. For some reason it scales correctly as I move between the Surface screen and the external monitor when I use the Dell, but on the LG monitor Skype is either massive on the external monitor, or tiny on the Surface screen.
After a big of digging around I came across a solution that worked for me, which is to change a setting in Skype's manifest file (who knew there was one?). On my machine the file is here: C:\Program Files\Microsoft Office\Office16\LYNC.EXE.MANIFEST
And the setting in question is this:
<dpiAware>True/PM</dpiAware>
Which I changed to this: <dpiAware>False/PM</dpiAware>
Note that you'll probably have to edit the file as administr…