Project Structure in Eclipse:

project-structure

First get the dependency using Maven :

pom.xml



<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sample</groupId>
  <artifactId>allinone</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>allinone Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <properties>
		<java-version>1.7</java-version>
		<org.springframework-version>4.0.0.RELEASE</org.springframework-version>
		<org.springframework.security-version>3.2.0.RELEASE</org.springframework.security-version>
		<org.aspectj-version>1.7.4</org.aspectj-version>
		<org.slf4j-version>1.6.1</org.slf4j-version>
	</properties>
  
  
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.2</version>
      <scope>test</scope>
    </dependency>
     <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
        <version>3.2.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
    </dependency>
    
    <!-- Logging -->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
			<version>${org.slf4j-version}</version>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>jcl-over-slf4j</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>${org.slf4j-version}</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>log4j</groupId>
			<artifactId>log4j</artifactId>
			<version>1.2.16</version>
			<scope>runtime</scope>
		</dependency>

		<!-- @Inject -->
		<dependency>
			<groupId>javax.inject</groupId>
			<artifactId>javax.inject</artifactId>
			<version>1</version>
		</dependency>
				
		<!-- Servlet -->
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-servlet-api</artifactId>
			<version>7.0.30</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>jsp-api</artifactId>
			<version>2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp.jstl</groupId>
			<artifactId>jstl-api</artifactId>
			<version>1.2</version>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<dependency>
			<groupId>org.glassfish.web</groupId>
			<artifactId>jstl-impl</artifactId>
			<version>1.2</version>
			<exclusions>
				<exclusion>
					<groupId>javax.servlet</groupId>
					<artifactId>servlet-api</artifactId>
				</exclusion>
			</exclusions>
		</dependency>
		<!-- Jackson JSON Processor -->
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.8.1</version>
		</dependency>
    
  </dependencies>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-framework-bom</artifactId>
        <version>4.0.0.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
</dependencyManagement>
  <build>
    <finalName>allinone</finalName>
    <plugins>
    	<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.3.2</version>				
				<configuration>
					<source>${java-version}</source>
					<target>${java-version}</target>
				</configuration>
			</plugin>
    </plugins>
  </build>
</project>



Then next entry point is web.xml




<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">
      
  <display-name>Archetype Created Web Application</display-name>
  
  <!-- 
  Creates the Spring Container shared by all Servlets and Filters
  ContextLoaderListener class loads below context file.
  <context-param>
  	<param-name>contextConfigLocation</param-name>
  	<param-value>/WEB-INF/root-context.xml</param-value>
  </context-param
   
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
  -->
  
  <servlet>
  	<servlet-name>dispatcherServlet</servlet-name>	
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- 
  	DispatcherServlet by default will load context file from /WEB-INF/dispatcherServlet-servlet.xml (<servlet-name>-servlet.xml) file.
  	If you want to change location or use another file name for spring context file, use below init-param to give new location/new file name.
  	<init-param>
  		<param-name>contextConfigLocation</param-name>	
  		<param-value>classpath:myservlet-context.xml</param-value>
  	</init-param>
  	 -->
  	<!-- 
  	The load-on-startup element indicates that this servlet should be
	loaded (instantiated and have its init() called) on the startup
	of the web application. If the value is a positive integer
	or 0, the container must load and initialize the servlet as the
	application is deployed.-->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>dispatcherServlet</servlet-name>
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
</web-app>


Then we need to create spring context file, as per web.xml my default spring context file location is /WEB-INF/dispatcherServlet-servlet.xml,
and I have put controller configuration in separate context file at /WEB-INF/controllers.xml.

/WEB-INF/dispatcherServlet-servlet.xml


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
	
	<mvc:annotation-driven></mvc:annotation-driven>
	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources/ directory -->
	<mvc:resources location="/resources/" mapping="/resources/**"/>
	
	<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
	
	<!-- Kept controllers in different xml file -->	
	<import resource="controllers.xml"/>
	
</beans>


/WEB-INF/controllers.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

	<!-- Maps '/' requests to the 'home' view, using internalViewResolver configured in dispatcherServlet-servlet.xml, the final view
	will be /WEB-INF/views/home.jsp-->
	<mvc:view-controller path="/" view-name="home"/>
	
	<!-- All controllers will be loaded from this package-->
	<context:component-scan base-package="org.springframework.samples.mvc" />
	 
</beans>

/WEB-INF/views/home.jsp : mapped by

<mvc:view-controller path="/" view-name="home"/>

in controller.xml


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>

<html>
<body>
	<h2>home page!</h2>
	<c:url var="helloWorldUrl"
		value="helloWorld?message=hello world spring sample" />
	<a href="${helloWorldUrl}">Say hello world to spring mvc</a>
</body>
</html>



com.sample.springmvc.controller.HelloWorldController : Called from home.jsp, passing message param to sayHelloWorld() method.

package com.sample.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController {

	@RequestMapping("/helloWorld")
	public String sayHelloWorld(final ModelMap modelMap, final String message/*message will be populated by request parameter sent in url..., spring does this...*/){
		//this modelMap will be visible on helloWorld.jsp, message will be retrieved using ${message} simply
		//see code in /WEB-INF/views/helloWorld.jsp -> using internalViewResolver configured in dispatcherServlet-servlet.xml
		modelMap.put("message", message);
		return "helloWorld";
	}
}

/WEB-INF/views/helloWorld.jsp : forwarded by HelloWorldController.sayHelloWorld() method.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Spring MVC Sample</title>
</head>
<body>
	Message from model map :
	<strong>${message}</strong>
</body>
</html>

src/main/resources/log4j.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
  <appender name="console" class="org.apache.log4j.FileAppender"> 
    <param name="File" value="/log4j.log" />
    <param name="Append" value="false" />
    <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d %c{1} %F:%L - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>
  
</log4j:configuration>

This is basic flow and set-up of Spring MVC sample, comments are welcome :).