16

I was trying to understand how the Web Services work and I came across this tutorial.

Now, I've seen Spring being used in enterprise applications and always wondered where the main method was and how everything worked? And whenever I would go to a Spring tutorial they'll start with beanFactory and Contexts and what not, all in a main Java method and from there just keep getting beans as required. This is totally different from what I see in the applications.

How exactly does Spring work in this case? What is the sequence of calls? I guess there will be some hidden main method somewhere, but I am not sure of that.

Normally if I were to run a simple Java project from command line, I'd do java mainClass. Now how would it happen in this case?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Kraken
  • 23,393
  • 37
  • 102
  • 162

5 Answers5

19

There is still a main method. It's just not written by the developer of the application, but by the developer of the container.

You can still see the main method being called by using the debugger like this:

  • Put a breakpoint in some initialization method, such as the init method of some servlet Servlet.init()
  • When the breakpoint hits, scroll down the call trace and the main method should be at the bottom.

This is an example with Jetty:

Enter image description here

To see this we need to put the breakpoint in an initialization method so that we get the main thread of the application.

Putting the breakpoint in the processing of a request instead of an initialization method would show Thread.run() at the bottom of the stack trace and not main().

Thread.run() is the equivalent of the main method for threads other than the main thread.

So the main method still exists. It's just being handled at the level of the container.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Angular University
  • 42,341
  • 15
  • 74
  • 81
14

Web applications don't have a main; the 'program' that is running is actually the web container (Apache Tomcat, Glassfish, JBoss, Weblogic, whatever) and that program will service the web application(s) you deploy into it. You might want to read the JEE tutorial to learn and understand what a Java web environment is.

https://docs.oracle.com/javaee/7/tutorial/

Gimby
  • 5,095
  • 2
  • 35
  • 47
  • Looks like that hyperlink leads to a 404. You need to use the a URL with 'https' at the beginning. [https://docs.oracle.com/javaee/7/tutorial/](https://docs.oracle.com/javaee/7/tutorial/) – Cale Sweeney Jan 15 '17 at 00:30
  • @CaleSweeney fixed the link. – Gimby Jan 16 '17 at 08:33
7

You don't see any explicit main method just because it is a Web project. This project is built into a web application archive (WAR) file which is deployed into a web server / servlet container, e.g., Tomcat in this tutorial.

Web applications do not have to contain main methods. This is because you don't need to explicitly start any Java process from within your web application. Somewhere in its depths, Tomcat calls a main method of the code it has been built from. This happens at server startup time.

Then, it will bind your code to incoming HTTP calls, but it will not start new processes for that. It will rather start new threads.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Andrei Nicusan
  • 4,555
  • 1
  • 23
  • 36
5

Web applications are not stand-alone applications. They run on some applications what we call a servletContainer in a Java context so there aren't any "main method or Java process (OS)" for any web application. They are just deployed on those containers that have a main method and Java process in OS runtime.

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
Sachin Verma
  • 3,712
  • 10
  • 41
  • 74
0

If you've created a basic program in Java then you must know that every Java program has a main() method, which is the starting point of the program. So, how come servlets don't have a main()? That is because servlets are served using Web containers.

A Web container will perform all the underlying work on behalf of the servlet so the programmer can focus on the business logic. When a client requests a servlet, the server hands requests to a Web container where the servlet is deployed.

Enter image description here

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131