views:

574

answers:

5

I have been tasked to develop an interactive website using java & mysql: using servlets to retrieve & massage data, applets to do special handling of the data client-side, and to handle requests from the client for different data views.

What would you recommend as an proper general-purpose toolkit/environment for web development using java.

I need to know what to use for the following:

  • Server side (tomcat?/?)
  • CMS
  • Editor / IDE
  • General tools/utilities
  • Directed (special purpose) tools/utilities
  • Testing and QA tools/utilities/techniques
  • Reference material (both on- & off-line)

Please evaluate the suggested solution(s) and supply alternatives/improvements/support.


Suggested Java web-development toolkit/environment

By cdb:

  • Server side:
    Tomcat6
  • CMS:
    Drupal (not necessary in preliminary phase)
  • Editor/IDE:
    NetBeans (good for a beginner)
  • General tools:
    (Almost everything is in NetBeans... go for it later)
  • Directed (special purpose):
    (Almost everything is in NetBeans... go for it later)
  • Testing and QA:
    JUNIT and use FireBug (Do manual testing first)
  • Reference material:
    HeadFirst Series on JSP, JavaScript, etc.
    SCRIBD (online)
    [edit]
  • Framework:
    Spring Web MVC 2.5 - (this seems to contain most of the other frameworks)


Options distilled from the answers

Server side

  • Apache Tomcat - "HTTP web server environment for Java code to run"
  • Jetty - "HTTP server, HTTP client and javax.servlet container"
  • Glassfish - application server (based on tomcat + more features)
  • jboss - application server ("J2EE based application server implemented in 100% Pure Java")

CMS

Editor / IDE

General tools/utilities

  • Maven - ".. a tool that can now be used for building and managing any Java-based project."
  • log5j also here[SourceForge] - "java logging library for Java versions 5 and above"

Directed (special purpose) tools/utilities

Testing and QA tools/utilities/techniques

  • Watij - "Java API created to allow for the automation of web applications"
  • HtmlUnit - "It models HTML documents and provides an API that allows you to invoke pages, fill out forms, click links, etc..."
  • Firebug - (Firefox) "edit, debug, and monitor CSS, HTML, and JavaScript live in any web page"
  • Hudson - "Building/testing software projects [...] Monitoring executions of externally-run jobs"
  • LiveHttpHeaders - view & edit http request headers live
  • JUnit - "framework to write repeatable tests"

Reference material (both on- & off-line)

+2  A: 

For web-development I use (and would recommend) the following:

  • JSP/Servlet API
  • Spring MVC
  • JQuery
  • XHTML & CSS
  • Fitnesse

With regards to resources, all these technologies are well documented on their respective sites, the only exception being XHTML & CSS for which I'd suggest http://www.alistapart.com.

With regards to editors both IntelliJ and (I believe) Eclipse have very good HTML, CSS, JSP and JavaScript editors.

Also use Firefox (as Brian has suggested) with both the Web Developer plugin and Firebug - both of these are indispensable.

Nick Holt
+2  A: 

Tomcat and Jetty are both well-known/supported servlet containers. If you're building a deployable for customers you may want to test on both, if you don't control the deployment.

For testing, check out (along with your normal unit test frameworks of JUnit/TestNG) Watij and/or HtmlUnit. These will allow you to automate the actual web/browser interactions and will save you a world of grief in the long run. The downside is that you'll have to invest some time in setting up your tests.

Related to automated tests, I think you need an automated build / continuous integration system. Numerous abound in the Java world. Two common ones are CruiseControl and Hudson.

For a lot of the above, standard Java/development tooling applies e.g. the 'standard' IDEs (Netbeans/Eclipse/Intellij - Intellij is worth paying for, btw). The same applies for CMS and there are lots of resources on this website about the pros/cons of SVN/Git/Mercurial etc. It's worth checking that your choice of CMS integrates with your IDE.

I would check out Firebug for simplifying development (on Firefox). It makes the front end development a lot easier. LiveHttpHeaders will ease diagnosis of issues relating to HTTP transfer.

Brian Agnew
(I can see why you are at 19+k)
slashmais
That's more to do with lots of time off :-)
Brian Agnew
A: 

First paragraph edited by request of slashmais : This answer is not really aligned with others, and the rephrased question. It's more of a complement to other answers. I believe the personal preferences are really important in choosing between technologies. I see it as (dis)liking some things, and choosing the technologies that correspond. The rest of the answer gives examples:


For example, suppose I believe the developer's actions should be checked in real-time as much as possible, to receive immediate feedback, and also completion if possible, and avoid early so many errors. This (dis)liking determines some preferences:

  • use a statically type language (like java)
  • use an IDE that compiles as you type (like Eclipse)
  • any Xml must be validated, via strict xsd. If the content have references to other information (such as java code), then it should be checked (like Spring checking for bean classes).
  • for the view technology, because it depends on my java code, I must have a verification that includes my actual java code. An idea could be to code my view in Java. (like Wicket).
  • my properties need to be in properties files for translation. But using String keys in my code (or view) is not acceptable. I would run a small tool that create java enums from each property file, and my code would reference the enums.
  • ... and so on


Other example, suppose I strongly prefer "Convention over Configuration". That is, I agree to follow stricts rules in my project, getting much less plumbing to do manually (because default values fit):

  • Maven is the build tool of choice. It will impose many constraints, but also provide out-of-the-box many "build" features...
  • For a web application, I couldn't use Struts 1, because they are these huge configuration files in struts-config.xml, mostly with plumbing code. I would definitely switch to something like Spring MVC, that has default values for mapping urls to controllers.
  • and so on ...


Other example, suppose I believe so much in the Model-View-Controller separation, for clarity and reuse, that I want to stretch it a bit. I could use:

  • in the view, I would cleanly separate my model (clean Html, no formatting, no script), my view (or formatting, external css only), and my controller (javascript, using the non-obstrusive javascript policy).
  • in the webapp, I could use Spring MVC to separate well those layers.
  • in the business (this example is a bit constrived :-) ), I could have a rich domain model, use extensively the command pattern ("controllers"), and expose explicitely my business services as an interface API ("view").
KLE
"There are many many ..." - Indeed! that's exactly why I ask the question: to find out what actually works [nicest|best|most-used|de-facto-standard|..]
slashmais
+2  A: 

CMS

  • Tortoise SVN

Editor / IDE

  • eclipse

General tools/utilities

  • Maven (build and deploy tool)
  • Cruise Control
  • GWT/ext-GWT/ICEFaces - web component technology
  • Spring - dependency injection framework
  • Hibernate - ORM
  • Axis 2.0 web service development kit
  • Jboss

Directed (special purpose) tools/utilities

  • log5j - for logging

Testing and QA tools/utilities/techniques

- Watij
- Firebug
- QTP for automated testing
- Junit Perf (Junit test cases for performance testing.)

Reference material (both on- & off-line)

  • Java docs of each of the technologies
  • Google ofcourse :)
Cshah
log5j looks promissing; (Tortoise SVN is a version control system) Thanks.
slashmais
+2  A: 
  • Server side
    Tomcat6
  • CMS
    Drupal (not necessary in prilim phase)
  • Editor / IDE
    NetBeans (good for a beginner)
  • General tools/utilities
    (Almost everything is in NetBeans... go for it later)
  • Directed (special purpose) tools/utilities
    (Almost everything is in NetBeans... go for it later)
  • Testing and QA tools/utilities/techniques
    JUNIT and use FireBug (Do manual testing first)
  • Reference material (both on- & off-line)
    HeadFirst Series on JSP, JavaScript, etc.
    SCRIBD (online)
cdb
THIS is the kind of answer I'm looking for - Thanks!
slashmais