Take the 2-minute tour ×

I am a Java SE developer but I have rich web-background (PHP, Perl/CGI and so on) and now I am starting new project. It will have web interface, spaghetti business logic, relational database as storage and connections to other services. I do it from the scratch.

My colleagues told me to use spring, spring security and struts. I look briefly at Java EE 6 spec and found that it covers almost all aspects of enterprise application. I asked my colleagues why do they need spring and struts, but looks like they use technologies simply because they are familiar with them and not familiar with classic Java EE 6 stack.

So, my question is: what is bad about Java EE 6? Why do I need spring if there are JNDI lookups? It will take a day or two to create fake InitialContext for unit-tests. And that is all: I stand with out of external tools like spring. Why do I need spring-security if there is a security built in Servlets spec? I can map any request to any servlet using web.xml, no struts.xml is needed. I can use servlet-filters instead of struts interceptors. There is RMI, so I do not need spring-remote. And so on..

Why should I bother my self with all that fancy stuff if there is Java EE 6?

I really want to find situation when Java EE 6 is not enough. Do you have any?


share|improve this question
There's quite a huge difference between the vintage J2EE from then and the modern Java EE 6 from now. What one are you talking about? Then, Spring and Struts were great add-ons on top of J2EE. But now, Java EE 6 provides almost the same already out the box. Your colleagues might be still hanging in the ancient ages. –  BalusC Jan 15 '11 at 3:32
Sorry) Java EE 6. I am not going to use Java 1.2 ))) –  Ilya K Jan 15 '11 at 3:33
Please revise/retag your question then. You might as well reconsider it :) Similar question here and here. –  BalusC Jan 15 '11 at 3:35
Done) But my question remains the same: why everybody use alternative technologies but not java enterprise? –  Ilya K Jan 15 '11 at 3:39
You're still talking about "J2EE". As to the why, well, they still need to meet the relatively new Java EE 6. –  BalusC Jan 15 '11 at 3:43

5 Answers 5

Spring a model-view-controller that makes Java EE cleaner and more organized. It is structurally more correct to separate your models, views and controller.

I agree with you. If it is a simple website then I think you can do everything with just Java EE. However, imagine having lots of code that handles form input and lots of models. Each controller may have a view. You can create a servlet and then forward to the correct jsp page, or you can use spring because it already does all of this.

The decision is your of how much you need to use spring. A good framework is one that lets you pick and choose what parts to use. I think spring does this well because you can just use the mvc model or go further and do more with it.

Final thing, spring has dependency injection which makes configuration much easier.

share|improve this answer
Thanks. I can implement MVC pattern my self: Each servlet is a controller and JSP page is just a view. I would not use any logic inside JSP (because it is impossible to test). I can use JNDI (service lookup) with out for spring. It is as good as dependency injection, is not it? –  Ilya K Jan 15 '11 at 3:51
I think you are trying to reinvent the wheel. Which is cool but why would you do that when Spring has already been tested by millions of users. If you say a learning experience then I am totally with you. Otherwise, you are off just reusing it libs that have been created and tested. –  Amir Raminfar Jan 15 '11 at 3:54
In a good MVC design you would have only one servlet. –  BalusC Jan 15 '11 at 3:56
@BalusC could you elaborate on that? Let's say I have a shopping application. Wouldn't I want one servlet for item lookup, one servlet for order creation, one servlet for customer history, etc? –  corsiKa Sep 20 '11 at 20:32
@glowcoder, look at existing MVC frameworks like JSF, Spring MVC, Struts, Vaadin, Echo, etc. All use a single servlet as MVC entry point (controller). To get the basic idea, you may find this answer useful: stackoverflow.com/questions/3541077/… –  BalusC Sep 20 '11 at 20:42

Spring is not necessary to Java EE. Spring just makes complex Java EE components easy to use.

share|improve this answer
I know it) But I can use JNDI instead of spring DI. So, why do I need spring? –  Ilya K Jan 15 '11 at 3:29
JNDI is in no way comparable to Spring DI. CDI is. –  BalusC Jan 15 '11 at 3:54

Sounds like you need to POC particular capabilities with Spring and then with Java EE 6 so you can compare the two like for like with a real working practical prototype.

The reasons I use spring however, are:

  • ability to abstract my application away from the application server. I can thus run on any application server, or outside of AS for unit testing
  • a lot of the boiler plate code that I would have to write, to improve my design is already available
  • IOC/DI - the object that needs dependencies does not know about how to get them - all it knows is what interfaces it requires. Some third party provides them. Yes, you could roll your own version of this third party in Java EE 6 but it is already available in Spring.
  • Bean Managed Transactions - Spring provides all the tools you need to have complete low level control on your transactions. I would always suggest using BMT as it gives you the flexibility you might need.
share|improve this answer

Why people use Spring and why it is so popular requires a little history.

It used to be that Spring was simpler than Java EE applications. I refer to the EJB2.x spec. I get the sense there was sort of a rebellion against the complicated nature of that spec. Developers wanted a simpler architecture, and Spring provided that for them by allowing them to write POJOs (Plain Old Java Objects) instead of classes that had to implement specific interfaces to get the desired functionality.

Spring also made 2 principles more popular: Inversion of Control (IoC) and Dependency Injection. Combined, those two principles provided a different way of wiring up the various components of an application, and getting those components into the application when it ran. That, combined with the idea of just writing POJOs was very compelling for many people, because code was simpler and it was easier to wire up all of you components.

The newer EJB3 spec nullifies some of what Spring has to offer, but Spring is much more than an IoC container. It provides great templates for JDBC access to the database, multiple simple ways of handling transactions, testing utilities, an MVC stack, and so on. It was popular and remains popular. One joke I have heard is

"EJB3, the answer to the question noone asked..."

EJB3 is a fine choice. Spring is a fine choice. Grails is also a fine choice (uses Spring, Hibernate under the covers).

share|improve this answer
I am a big fan of Grails! Amazing how fast you can get up and running. –  Amir Raminfar Jan 15 '11 at 3:55
@amir, I agree completely. –  hvgotcodes Jan 15 '11 at 3:56
and I don't. Grails is nice, but as of the version we are using - 1.3.3 - still rather unstable. We had to fix a few bugs ourselves (after reporting them, of course). And they were not some corner-case bugs. –  Bozho Jan 15 '11 at 7:19
@bozho, yep, I agree that there are issues; its not perfect yet. But in the end, it has allowed me to move faster on many projects. –  hvgotcodes Jan 15 '11 at 13:47
I have to dispute the "question no one asked" part. Everyone hated EJB2 and wanted something better... The obvious question was can we get this out of a universal spec? But I upvoted this for being a good, pithy answer. –  hsanders Feb 18 '13 at 15:19

"So, why do I need spring?"

Ilya! Finally you have convinced me (and hopefully yourself) that you do not need Spring. Actually there is nothing much special good in all this heap ... unless you have already are used to it. They write a book about web technology, then add the rest of computer science into it and call that RESTfull.

"However, imagine having lots of code that handles form input and lots of models. Each controller may have a view".

Amir! - very good consideration. The real difference between web frameworks I know is in what a definition of component is. Struts has three types of components - View, Controler and Model components. At first glance looks good (better than some others for sure). But what can you build of those components? - One page View, one Page Controller and one page Model. God knows what will be the cost of binding items from these three rows of components - maybe a huge configuration if at all possible.

The real solution is (as you practically stated in the quoted above) is a concept of components that each has its view, its controller and its model. Only one framework went that far so far - HybridJava. What is a web page building block in Spring?

share|improve this answer

Your Answer


