4

I have just started learning java and i have about 8 months time. My main aim is to build web application using java. But as there are many java technologies/frameworks available i am conufused how should i go IDE i am using is eclipse

The path which i am thinking is below

1)Learn Core Java
2)Project: Build Java Invoicing System with JDBC or mysql to test java knowledge

3)Learn Servlets / JSP to 
4)Build small site like simple logon/memberarea/catalogue using servlets/jsp

Now guys I really don't know where the following things stand in my path and which things they will help

1)Java EE
2)Spring or spring MVC, what's the difference?
3)Hibernate
4)Wicket
5)Struts

I really don't know how should i learn those and which things to choose from.

what should be my final project which can be build using those because if i see from my current stage even website can be build using servlets/jsp. then why do i need those other technologies

Can anyone give an example of a project which can be build using new technologies and not using jsp/servlet, so that I can get an idea why we need those?

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
  • See this post and its first answer http://stackoverflow.com/questions/1958808/java-web-development-what-skills-do-i-need/ – Roman Jan 08 '11 at 15:50
  • Could you please also include why you actually want to learn Java for web development in your question? IMO it would help recommending specific paths with regards to J2EE vs. Non-J2EE technologies. – Horst Gutmann Jan 08 '11 at 16:29
  • I develop websites using php. there were few clients who wanted to build site in java so thats why. The site was ecommerce site using java –  Jan 08 '11 at 18:22

4 Answers4

8

Lot's of stuff to learn in here so I would take it a bit at a time. I'm going to assume you are relatively comfortable with the Java language and core APIs.

First learn about JDBC and databases. Get a basic functional JDBC example app working (not visual just some a vanilla Java app) that does read/insert/update/delete of some records in a table. This will give you the basis for building whatever app you choose. Almost all interesting applications involve some sort of persistence/database.

Learn the main JDBC APIs (Connection, PreparedStatement, ResultSet) and write some code that uses these to get comfortable.

Learn about how transactions work in databases if you aren't familiar already and how JDBC uses them (Connection.commit and rollback)

Next you could look into the spring framework. This has a several useful features that come in handy when building these applications. The main ones to get to know the dependency injection functionality and the JDBC libraries it has. The DI stuff is a bit of a "duh"? if you haven't used it before but it is very useful/powerful especially for medium size + apps. The JDBC libraries help with the cruft of dealing with the raw JDBC APIs and make your code less error-prone.

Once you've got some basic JDBC and Spring stuff worked out you can then start bringing in a web framework.

This is more difficult because there are so many. In the interest of getting something up and running quickly I would probably go with Wicket. It runs inside a servlet container like Jetty, easy to get up and running with a basic web page or two and relatively easy to evolve of the project over time without going down too many blind alleys. I've found that frameworks like JSF (the Java EE default web/view framework) takes a lot of up front time investment to get going on. Most of these frameworks, including Wicket, can leverage the spring stuff you've got above.

Avoid JSP, it's unpleasent technology and outdated by virtually everything else.

To answer some of your other points.

Hibernate is a tool for mapping an object model to a relational model. In it's most basic form you define a Java class for each DB table with the class having one Java property (variable+getter+setter) for each DB column. You can also add references from one class to another to model database relations. It is good but it takes a bit of getting used to.

Spring I've explained partly above. Spring is much bigger than just DI and some JDBC libraries. It also has transaction management libs and bunch of other stuff. Spring MVC is a web framework which lives under the spring umbrella and makes use of a lot of the spring libraries internally. I've never used it so can't offer an opinion on it.

Java EE is an umbrella term for a large set of "enterprise" specifications/libraries. JSF is a web view framework that is part of Java EE.

That's my very high level advice. To summarise I would learn basic DB/JDBC then some spring stuff and then start building a basic web app using what you've learned already.

Hope that helps. There's plenty of info out there on the web on all these topics and you can always ask questions here on more specific parts if you need help. Good luck and enjoy!

EDIT (to address comment):

All of the above is my recommendation/opinion on how to approach learning Java web development.

In summary

  • Learning JDBC/transactions/databases is a must
  • Spring is optional but I strongly recommend. Spring is a big library but you can pick and choose the bits you like/need.
  • Web frameworks the choice is really yours. From what I have tried (JSF/JSP/Wicket) Wicket is the easiest to get going with so you don't spend too much time frustrated with the getting the initial setup. JSP is awful, it's very easy to make a mess with it. JSF is powerful but heavy and probably more suited to very enterprisy projects than a first web app.
  • Hibernate is optional but can make life easier simply because you can work with Java objects when you do DB queries/updates rather than writing tedious insert/update statements. Hibernate isn't the only tool like this but it's the one I've used most and does the job well. Just don't go too overboard with the "clever" hibernate features initially.

You could easily use Spring MVC instead of Wicket. That may be a perfectly good choice, I've not used Spring MVC myself so can't comment. I'm sure it will integrate well with spring stuff tho so that would certainly be a positive factor.

Do some more research if you're not sure, there's no end of people happy to give their opinion! But really you just have to dive in and try something.

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
Mike Q
  • 22,839
  • 20
  • 87
  • 129
  • Well thank you very much , that was very good answer. So you mean there is no choice , i have to learn spring+spring MVC + Wicket + Hibernate. or i can leave wicket and JSF out, as spring MVC is also web framework. are u sure i don't need to spend much time on JSP . Also can i learn struts2.1 instead of spring. –  Jan 08 '11 at 18:21
6

You are correct. If all your applications are served by servlets, JSPs, and JDBC, then maybe you don't need to learn anything else.

I commend you for learning the fundamentals first before diving into a thicket of frameworks that you don't understand. That's a good thing.

But if you reach the point where you have those down cold, maybe looking at these other technologies can help you improve your game.

1)Java EE

You are learning (part) of Java EE when you use servlets, JSPs, and JDBC. They're a subset of the full Java EE machinery - EJBs, JMS, JNDI, etc.

2)Spring or spring MVC whats difference

Spring is an alternative framework developed by Rod Johnson and Springsource, now part of VMWare, that is based on dependency injection, aspect-oriented programming, and framework modules. Spring web MVC is one module in the Spring framework, based on servlets, that acts as the front end for web applications.

3)Hibernate

An object-relational mapping technology (ORM), built on top of SQL and JDBC, that lets you map objects to tables. It has its own object-based query language.

4)Wicket

Another web MVC alternative to Spring MVC, Struts, JSF, etc.

5)Struts

The first web MVC framework. It's gone through versions 1.0 and 2.0, and has now been supplated by Java Server Faces. It's still used, though. Like all other web MVC frameworks in Java, it's based on servlets and JSPs.

Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
duffymo
  • 305,152
  • 44
  • 369
  • 561
4

From a Java perspective it might be best to start looking at Java EE. All the others you mentioned are alternative technologies, which might be useful to you if you decide that what the standard framework offers isn't your cup of tea. But for that to decide, it's never a bad idea to at least know what the standard framework is about.

Truth be told, before 2006 the standard framework had a bad reputation and some of the sentiments that form the basis for recommending alternative technologies are still based on that. Starting with version 5, Java EE got dramatically better. The latest version, Java EE 6 is arguably one of the best Java frameworks that's out there. Of course, the best is a highly subjective term and naturally it won't be the best one for each and every person out there.

At any length, Java EE 6 is a very complete framework that allows a large range of application to be written without depending on any additional library. Being the standard framework, most other frameworks at least depend on some parts of it.

Most typically EJB, CDI and JSF are replaced by alternative technologies. E.g. the core Spring container replaces EJB and CDI and Spring MVC replaces JSF. A full Spring stack typically still uses JPA, JTA, JMS and Servlet from Java EE. Wicket on its turn only replaces JSF, or when used with a Spring stack replaces Spring MVC.

Hibernate is a special case. It doesn't replace anything from Java EE, but is instead often used as an implementation for one of the key APIs of Java EE: JPA. The original creator of Hibernate, Gavin King, is one of the prime supporters of the Java EE framework and is in fact the spec lead of one of the most important parts of modern Java EE: CDI.

Wicket by itself is a very nice web framework, but in practice it isn't used as often as JSF. I won't go into the discussion whether Wicket or JSF is 'better' (this is mostly a religious battle anyway), but due to the popularity of JSF there are simply more people experienced with it and there is a large community offering many things for JSF like component libraries and extensions.

Struts has historically been completely replaced by JSF. The original creator or Struts, Craig Mcclanahan, was the one who started JSF as the successor of Struts. Nevertheless, Struts was once the absolute de-facto standard for web frameworks in Java. It's not often advised to be used for new projects, but till this day it's still used in a huge number of existing applications. So even though it's not really 'hot' to learn Struts anno 2011 knowledge of it may still be very practical for when you have to maintain existing applications.

ps

See this answer for a general description about Java EE: Frameworks for Layering reusable Architectures

Community
  • 1
  • 1
Arjan Tijms
  • 37,782
  • 12
  • 108
  • 140
1

I'm sure that nobody seriously can tell you the best way, because this would mean that (s)he would have tried all. Why do you want to learn a Java web application framework? Just to learn it to be prepared for the (next) job? In that case it is likely that you've learned the wrong one.

The next question would be what you want to do with the web application framework. Do you want to make a website a little bit active, e.g. make each page look similar (corporate design), auto-generate menus from an internal structure, or do you want to write a real web application, e.g. with database access.

I'd first define the goal what you want to achieve. IMHO a good way to motivate you to make it right is to take a small project which helps you to solve a small problem.

Then I would start with Java Server Pages (JSP) and servlets to understand the basic concepts. Then you can try to do the same with a few well-known web application frameworks, e.g. Wicket.

Mot
  • 28,248
  • 23
  • 84
  • 121