{"id":177,"date":"2016-02-05T18:56:04","date_gmt":"2016-02-05T18:56:04","guid":{"rendered":"http:\/\/kaizen-koka.com\/?p=177"},"modified":"2018-03-21T14:04:21","modified_gmt":"2018-03-21T14:04:21","slug":"spring-mvc","status":"publish","type":"post","link":"https:\/\/kaizen-koka.com\/?p=177","title":{"rendered":"Spring MVC"},"content":{"rendered":"<p>\n\tWorking Example :&nbsp;<a href=\"https:\/\/github.com\/teachkoka\/spring-mvc-xml\">https:\/\/github.com\/teachkoka\/spring-mvc-xml<\/a>\n<\/p>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Spring MVC Supports<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">.Form backup support(using Spring tags) &nbsp;&#8211; for Presentation, we can hold bean data into bean classes and do validations<br \/>\n\t.Controllers support(MultiAction Controllers and MultiForm Controllers)<br \/>\n\t.Validation<br \/>\n\t.I18n<br \/>\n\t.Interceptors<br \/>\n\t.ViewResolver<br \/>\n\t.Exception Handling<br \/>\n\t.Modularazition Support<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">1. Spring MVC &#8211; Support upto Presentation to Controller only.&nbsp;<br \/>\n\t2. IOC Container for SpringMVC -&gt; WebApplicationContext Container<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">3.<\/span><\/span><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Spring mvc desinged based on jsp-model architecture -&gt; multiple view request with single controller<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">4.Common validations, form data read operations and populate in to beans, redirect it to corresponding Controller and this is nothing but FrontController(multiple inputs to single controller).&nbsp;<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>Front Controllers &nbsp; &#8211; Model<\/strong><br \/>\n\t&#8212;&#8212;&#8212;&#8212;&#8212;- &nbsp; &nbsp; &nbsp; &nbsp; &#8212;&#8212;&#8212;&#8212;<br \/>\n\tJSP &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#8211; JSP-Model1&nbsp;<br \/>\n\tServlets &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8211; JSP-Model2 (Struts 1x, SpringMVC)<br \/>\n\tFilter &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8211; JSP-Model3 (Struts 2x)<br \/>\n\tTag support &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#8211; JSP-Model4<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">FrontController for SpringMVC is DispactherServlet<br \/>\n\tFrontController for Struts1.x is ActionServlet<br \/>\n\tFrontController for Struts2.x is FilterDispatcher (Struts prepare and execute Filter)<br \/>\n\tFrontController for JSF is FacesServlet<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;web-app&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp;&lt;servlet&gt;\r\n&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;servlet-name&gt;mvc-dispatcher&lt;\/servlet-name&gt;\r\n&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;\/servlet-class&gt;\r\n&nbsp; &nbsp; &nbsp; &nbsp; &lt;load-on-startup&gt;1&lt;\/load-on-startup&gt;\r\n&nbsp;&nbsp; &nbsp;&lt;\/servlet&gt;\r\n\r\n&nbsp;&nbsp; &nbsp;&lt;servlet-mapping&gt;\r\n&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;servlet-name&gt;mvc-dispatcher&lt;\/servlet-name&gt;\r\n&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&lt;url-pattern&gt;\/&lt;\/url-pattern&gt;\r\n&nbsp;&nbsp; &nbsp;&lt;\/servlet-mapping&gt;\r\n&lt;\/web-app&gt;<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Spring xml file name should be <strong>${servlet-name}-servlet.xml<\/strong><\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Tomcat supports 3 types of url patterns<br \/>\n\t1) Complete character sequence<br \/>\n\t2) \/*<br \/>\n\t3) *.extension (any extension *.do, *.bell)<\/span><\/span>\n<\/p>\n<p>\n\t<br \/>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>Programatic Approach<\/strong><br \/>\n\t1)Controller<br \/>\n\t2)AbstractController<br \/>\n\t3)AbstractCommandController<br \/>\n\t4)SimpleFormController<br \/>\n\t5)AbstractWizardFormController<br \/>\n\t6)MultiActionController<br \/>\n\tOr&nbsp;<br \/>\n\t<strong>Annotation<\/strong> through @Controller<\/span><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;context:component-scan base-package=&quot;com.springapp.mvc&quot;\/&gt;\r\n\r\n&lt;bean class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;\r\n&nbsp; &lt;property name=&quot;prefix&quot; value=&quot;\/WEB-INF\/pages\/&quot;\/&gt;\r\n&nbsp; &lt;property name=&quot;suffix&quot; value=&quot;.jsp&quot;\/&gt;\r\n&lt;\/bean&gt;<\/pre>\n<p>\n\t<br \/>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">${data}- OGNl-&gt;ObjectGraphNotationLanguage<br \/>\n\t&#8211;Controller Classes<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>1)CoreControllers<\/strong><br \/>\n\t&nbsp; Controller(I) -&gt; handlerRequest<br \/>\n\t&nbsp; AbstractController -&gt;handleRequestInternal<br \/>\n\t<strong>2)FormControllers<\/strong><br \/>\n\t&nbsp; ParameterizableViewController &nbsp;-&gt; one additional method -&gt; setViewName()<br \/>\n\t&nbsp; UrlFileNameViewController &nbsp;-&gt; acts like simple forward requests<br \/>\n\t<strong>3)Command<\/strong><br \/>\n\t&nbsp;BaseCommand<br \/>\n\t&nbsp;AbstractFormController<br \/>\n\t&nbsp;AbstractWizardFormController<br \/>\n\t&nbsp;SimpleFormController<br \/>\n\t&nbsp;AbstractCommandController<br \/>\n\t<strong>4)ThrowAway Controller<\/strong><br \/>\n\t&nbsp;ThrowAwayController<br \/>\n\t<strong>5)MultiActionController <\/strong>(Recommended)<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>&#8211;HandlerMapping Classes:<\/strong><br \/>\n\t&nbsp;.BeanNameUrlMapping(Default) &nbsp;&#8211; Mapping URL with corresponding bean<br \/>\n\t&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;bean name=&quot;\/hello.do&quot; class=&quot;HelloController&quot;\/&gt;<br \/>\n\t.SimpleUrlHandlerMapping(Recommended) &#8211;&nbsp;<br \/>\n\t&nbsp;&lt;bean class=&quot;SimpleUrlHandlerMapping&quot;&gt;&nbsp;<br \/>\n\t&nbsp; &nbsp; &lt;property name=&quot;mapping&quot;&gt;<br \/>\n\t&nbsp; &nbsp; &lt;props&gt;&lt;prop key=&quot;hello.ds&quot;&gt;hc&lt;\/prop&gt;&lt;\/props&gt;<br \/>\n\t&nbsp;&lt;\/bean&gt;<br \/>\n\t&nbsp;&lt;bean id=&quot;hc&quot; class=&quot;HelloController&quot;\/&gt;<br \/>\n\t&nbsp;.ControllerClassNameHandlerMapping &#8211; by following NamingConventions &nbsp;hello.do &lt;-&gt; HelloController.java<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;bean class=&quot;ControllerURLMapping&quot;\/&gt;<br \/>\n\t&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;bean id=&quot;hc&quot; class=&quot;HelloController&quot;\/&gt;<br \/>\n\t&nbsp;.CommonPathMapHandlerMapping<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>&#8211;ViewResolver Classes<\/strong><br \/>\n\t&nbsp;TilesViewResolver<\/span><\/span>\n<\/p>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\t<a href=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"178\" data-permalink=\"https:\/\/kaizen-koka.com\/?attachment_id=178\" data-orig-file=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg?fit=538%2C383&amp;ssl=1\" data-orig-size=\"538,383\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Spring-MVC-Example-by-Crunchify\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg?fit=300%2C214&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg?fit=538%2C383&amp;ssl=1\" alt=\"Spring-MVC-Example-by-Crunchify\" class=\"aligncenter size-full wp-image-178\" height=\"383\" src=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg?resize=538%2C383\" width=\"538\" srcset=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg?w=538&amp;ssl=1 538w, https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Spring-MVC-Example-by-Crunchify.jpg?resize=300%2C214&amp;ssl=1 300w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/a>\n<\/p>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">How to Configure Spring xml file<br \/>\n\t1)Using {servlet-name}-servlet.xml<br \/>\n\t2)Using init-param<br \/>\n\t&lt;init-param&gt;<br \/>\n\t&lt;param-name&gt;ContextConfigLocation&lt;param-value&gt;<br \/>\n\t&lt;\/init-param&gt;<br \/>\n\t3)Using ContextParams&nbsp;<br \/>\n\t&lt;listner&gt;ContextLoaderListner&lt;\/listner&gt;<br \/>\n\t&lt;context-param&gt;<br \/>\n\t&nbsp; &lt;param-name&gt;&lt;\/param-value&gt;<br \/>\n\t&nbsp; &lt;param-value&gt;&lt;\/param-value&gt;<br \/>\n\t&lt;\/context-param&gt;<\/span><\/span>\n<\/p>\n<p>\n\t<br \/>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">public class YourController implements Controller{<br \/>\n\t&nbsp;&nbsp; &nbsp;<br \/>\n\t&nbsp;&nbsp; &nbsp;public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res){<br \/>\n\t&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;String name = req.getParameter(&quot;name&quot;);<br \/>\n\t&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Map m = new HashMap();<br \/>\n\t&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;m.put(&quot;msg&quot;,&quot;Hey&quot;+name);<br \/>\n\t&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;ModelAndView mav = new ModelAndView(&quot;success&quot;,m);<br \/>\n\t&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;return mav;<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">&nbsp;&nbsp; &nbsp;}<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">}<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Validations &amp; ResultBinding<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">@Valid asks spring to validate the associated object(student).&nbsp;<br \/>\n\tBindingResult contains the outcome of this validation and any error that might have occurred during this validation. Notice that BindingResult must come right after the validated object else spring won&rsquo;t be able to validate and an exception been thrown.<\/span><\/span>\n<\/p>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Note that in case of validation failure, default\/ generalized error messages are shown on screen which may not be desirable. Instead, you can override this behavior providing internationalized messages specific to each field. To do that, we need to configure MessageSource in application configuration class and provide properties files containing actual messages which we will do next.<br \/>\n\t<a href=\"https:\/\/docs.oracle.com\/javaee\/6\/api\/javax\/validation\/constraints\/package-summary.html\">https:\/\/docs.oracle.com\/javaee\/6\/api\/javax\/validation\/constraints\/package-summary.html<\/a><br \/>\n\t<a href=\"https:\/\/docs.jboss.org\/hibernate\/validator\/4.1\/api\/org\/hibernate\/validator\/constraints\/package-summary.html\">https:\/\/docs.jboss.org\/hibernate\/validator\/4.1\/api\/org\/hibernate\/validator\/constraints\/package-summary.html<\/a><\/span><\/span>\n<\/p>\n<p>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">Spring MVC dependencies sample pom.xm<\/span><\/span>l<\/strong>\n<\/p>\n<pre>\r\n&lt;project xmlns=&quot;http:\/\/maven.apache.org\/POM\/4.0.0&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n  xsi:schemaLocation=&quot;http:\/\/maven.apache.org\/POM\/4.0.0 http:\/\/maven.apache.org\/maven-v4_0_0.xsd&quot;&gt;\r\n  &lt;modelVersion&gt;4.0.0&lt;\/modelVersion&gt;\r\n  &lt;groupId&gt;com.training.jdbctemplate&lt;\/groupId&gt;\r\n  &lt;artifactId&gt;jdbctemplate-demo&lt;\/artifactId&gt;\r\n  &lt;packaging&gt;war&lt;\/packaging&gt;\r\n  &lt;version&gt;1.0-SNAPSHOT&lt;\/version&gt;\r\n  &lt;name&gt;jdbctemplate-demo Maven Webapp&lt;\/name&gt;\r\n  &lt;url&gt;http:\/\/maven.apache.org&lt;\/url&gt;\r\n  &lt;properties&gt;\r\n    &lt;hibernate.version&gt;4.2.0.Final&lt;\/hibernate.version&gt;\r\n    &lt;mysql.connector.version&gt;5.1.21&lt;\/mysql.connector.version&gt;\r\n    &lt;spring.version&gt;4.2.0.RELEASE&lt;\/spring.version&gt;\r\n  &lt;\/properties&gt;\r\n\r\n  &lt;dependencies&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;hibernate-core&lt;\/artifactId&gt;\r\n      &lt;version&gt;${hibernate.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;hibernate-entitymanager&lt;\/artifactId&gt;\r\n      &lt;version&gt;${hibernate.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n\r\n    &lt;!-- Servlet API and JSTL --&gt;\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;javax.servlet&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;javax.servlet-api&lt;\/artifactId&gt;\r\n      &lt;version&gt;3.0.1&lt;\/version&gt;\r\n      &lt;scope&gt;provided&lt;\/scope&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;jstl&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;jstl&lt;\/artifactId&gt;\r\n      &lt;version&gt;1.2&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;javax.validation&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;validation-api&lt;\/artifactId&gt;\r\n      &lt;version&gt;1.1.0.Final&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;spring-jdbc&lt;\/artifactId&gt;\r\n      &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;!-- DB related dependencies --&gt;\r\n  &lt;!--  &lt;dependency&gt;\r\n      &lt;groupId&gt;org.postgresql&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\r\n      &lt;version&gt;9.3-1100-jdbc4&lt;\/version&gt;\r\n    &lt;\/dependency&gt;--&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.postgresql&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;postgresql&lt;\/artifactId&gt;\r\n      &lt;version&gt;42.2.1&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;mysql&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;mysql-connector-java&lt;\/artifactId&gt;\r\n      &lt;version&gt;5.1.6&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.hibernate&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;hibernate-validator&lt;\/artifactId&gt;\r\n      &lt;version&gt;5.1.0.Final&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;spring-core&lt;\/artifactId&gt;\r\n      &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;spring-web&lt;\/artifactId&gt;\r\n      &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;javax.servlet&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;servlet-api&lt;\/artifactId&gt;\r\n      &lt;version&gt;2.5&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;javax.servlet.jsp&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;jsp-api&lt;\/artifactId&gt;\r\n      &lt;version&gt;2.1&lt;\/version&gt;\r\n      &lt;scope&gt;provided&lt;\/scope&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;spring-webmvc&lt;\/artifactId&gt;\r\n      &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.springframework&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;spring-test&lt;\/artifactId&gt;\r\n      &lt;version&gt;${spring.version}&lt;\/version&gt;\r\n      &lt;scope&gt;test&lt;\/scope&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;junit&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;junit&lt;\/artifactId&gt;\r\n      &lt;version&gt;4.11&lt;\/version&gt;\r\n      &lt;scope&gt;test&lt;\/scope&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.apache.tiles&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;tiles-core&lt;\/artifactId&gt;\r\n      &lt;version&gt;3.0.5&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.apache.tiles&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;tiles-jsp&lt;\/artifactId&gt;\r\n      &lt;version&gt;3.0.5&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.apache.tiles&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;tiles-api&lt;\/artifactId&gt;\r\n      &lt;version&gt;3.0.5&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.apache.tiles&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;tiles-servlet&lt;\/artifactId&gt;\r\n      &lt;version&gt;3.0.5&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n    &lt;dependency&gt;\r\n      &lt;groupId&gt;org.apache.tiles&lt;\/groupId&gt;\r\n      &lt;artifactId&gt;tiles-template&lt;\/artifactId&gt;\r\n      &lt;version&gt;3.0.5&lt;\/version&gt;\r\n    &lt;\/dependency&gt;\r\n  &lt;\/dependencies&gt;\r\n\r\n  &lt;repositories&gt;\r\n    &lt;repository&gt;\r\n      &lt;id&gt;spring-maven-milestone&lt;\/id&gt;\r\n      &lt;name&gt;Spring Maven Milestone Repository&lt;\/name&gt;\r\n      &lt;url&gt;http:\/\/maven.springframework.org\/milestone&lt;\/url&gt;\r\n    &lt;\/repository&gt;\r\n  &lt;\/repositories&gt;\r\n\r\n  &lt;build&gt;\r\n    &lt;finalName&gt;jdbctemplate-demo&lt;\/finalName&gt;\r\n    &lt;plugins&gt;\r\n      &lt;plugin&gt;\r\n        &lt;artifactId&gt;maven-compiler-plugin&lt;\/artifactId&gt;\r\n        &lt;version&gt;3.3&lt;\/version&gt;\r\n        &lt;configuration&gt;\r\n          &lt;source&gt;1.8&lt;\/source&gt;\r\n          &lt;target&gt;1.8&lt;\/target&gt;\r\n        &lt;\/configuration&gt;\r\n      &lt;\/plugin&gt;\r\n    &lt;\/plugins&gt;\r\n  &lt;\/build&gt;\r\n&lt;\/project&gt;<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">web.xml<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">with 2.4<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;web-app version=&quot;2.4&quot;\r\n\txmlns=&quot;http:\/\/java.sun.com\/xml\/ns\/j2ee&quot; xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n\txsi:schemaLocation=&quot;http:\/\/java.sun.com\/xml\/ns\/j2ee \r\n\thttp:\/\/java.sun.com\/xml\/ns\/j2ee\/web-app_2_4.xsd&quot;&gt;\r\n\r\n\t&lt;display-name&gt;Spring MVC Application&lt;\/display-name&gt;\r\n\r\n    &lt;servlet&gt;\r\n\t\t&lt;servlet-name&gt;mvc-dispatcher&lt;\/servlet-name&gt;\r\n\t\t&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;\/servlet-class&gt;\r\n        &lt;load-on-startup&gt;1&lt;\/load-on-startup&gt;\r\n\t&lt;\/servlet&gt;\r\n\r\n\t&lt;servlet-mapping&gt;\r\n\t\t&lt;servlet-name&gt;mvc-dispatcher&lt;\/servlet-name&gt;\r\n\t\t&lt;url-pattern&gt;\/&lt;\/url-pattern&gt;\r\n\t&lt;\/servlet-mapping&gt;\r\n&lt;\/web-app&gt;<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\t<strong>web.xml 3.0<\/strong>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;web-app xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n    xmlns=&quot;http:\/\/java.sun.com\/xml\/ns\/javaee&quot; xmlns:web=&quot;http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_2_5.xsd&quot;\r\n    xsi:schemaLocation=&quot;http:\/\/java.sun.com\/xml\/ns\/javaee http:\/\/java.sun.com\/xml\/ns\/javaee\/web-app_3_0.xsd&quot;\r\n    version=&quot;3.0&quot;&gt;\r\n \r\n\t &lt;servlet&gt;\r\n\t   &lt;servlet-name&gt;xmlconfig&lt;\/servlet-name&gt;\r\n\t   &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;\/servlet-class&gt;\r\n\t   &lt;load-on-startup&gt;1&lt;\/load-on-startup&gt;\r\n\t &lt;\/servlet&gt;\r\n\t \r\n\t &lt;servlet-mapping&gt;\r\n\t  &lt;servlet-name&gt;xmlconfig&lt;\/servlet-name&gt;\r\n\t  &lt;url-pattern&gt;\/&lt;\/url-pattern&gt;\r\n\t &lt;\/servlet-mapping&gt;\r\n \r\n&lt;\/web-app&gt;<\/pre>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">mvc-dispatcher-servlet.xml&nbsp;<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;\r\n&lt;beans xmlns=&quot;http:\/\/www.springframework.org\/schema\/beans&quot;\r\n       xmlns:xsi=&quot;http:\/\/www.w3.org\/2001\/XMLSchema-instance&quot;\r\n       xmlns:mvc=&quot;http:\/\/www.springframework.org\/schema\/mvc&quot;\r\n       xmlns:context=&quot;http:\/\/www.springframework.org\/schema\/context&quot;\r\n       xsi:schemaLocation=&quot;http:\/\/www.springframework.org\/schema\/beans http:\/\/www.springframework.org\/schema\/beans\/spring-beans.xsd\r\n        http:\/\/www.springframework.org\/schema\/context http:\/\/www.springframework.org\/schema\/context\/spring-context.xsd\r\n        http:\/\/www.springframework.org\/schema\/mvc http:\/\/www.springframework.org\/schema\/mvc\/spring-mvc.xsd&quot;&gt;\r\n\r\n\r\n    &lt;context:annotation-config\/&gt;\r\n    &lt;context:component-scan base-package=&quot;com.springapp.mvc&quot;\/&gt;\r\n    &lt;mvc:annotation-driven\/&gt;\r\n\r\n    &lt;bean class=&quot;org.springframework.web.servlet.view.InternalResourceViewResolver&quot;&gt;\r\n        &lt;property name=&quot;prefix&quot; value=&quot;\/WEB-INF\/pages\/&quot;\/&gt;\r\n        &lt;property name=&quot;suffix&quot; value=&quot;.jsp&quot;\/&gt;\r\n    &lt;\/bean&gt;\r\n\r\n\r\n    &lt;bean id=&quot;messageSource&quot; class=&quot;org.springframework.context.support.ResourceBundleMessageSource&quot;&gt;\r\n        &lt;property name=&quot;basename&quot;&gt;\r\n            &lt;value&gt;messages&lt;\/value&gt;\r\n        &lt;\/property&gt;\r\n    &lt;\/bean&gt;\r\n\r\n&lt;\/beans&gt;<\/pre>\n<p>\n\t<strong>JSP Pages Tags<\/strong>\n<\/p>\n<pre class=\"brush:php;\">\r\n&lt;%@ page language=&quot;java&quot; contentType=&quot;text\/html; charset=ISO-8859-1&quot;\r\n    pageEncoding=&quot;ISO-8859-1&quot;%&gt;\r\n&lt;%@taglib uri=&quot;http:\/\/java.sun.com\/jsp\/jstl\/core&quot; prefix=&quot;c&quot;%&gt;\r\n&lt;%@taglib uri=&quot;http:\/\/www.springframework.org\/tags\/form&quot; prefix=&quot;form&quot; %&gt;\r\n&lt;%@taglib uri=&quot;http:\/\/www.springframework.org\/tags&quot; prefix=&quot;spring&quot; %&gt;\r\n\r\n&lt;!DOCTYPE html PUBLIC &quot;-\/\/W3C\/\/DTD HTML 4.01 Transitional\/\/EN&quot; &quot;http:\/\/www.w3.org\/TR\/html4\/loose.dtd&quot;&gt;<\/pre>\n<p>\n\t<span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\"><strong>Path\/Location<\/strong>: &nbsp;\/src\/main\/resources\/messages.properties &nbsp;<br \/>\n\t{ValidationAnnotationClass}.{modelObject}.{fieldName}<br \/>\n\tyou can also pass the arguments to these messages using {0},{1},..{i}&nbsp;<\/span><\/span>\n<\/p>\n<pre class=\"brush:plain;\">\r\nSize.student.name = name should be minimum of {1} and maximum of {2};\r\nNotNull.student.name = please provide student name\r\nNotEmpty.student.name = blank student name not allowed<\/pre>\n<p>\n\t<strong><span style=\"font-family:verdana,geneva,sans-serif;\"><span style=\"font-size:14px;\">Controller Class &nbsp;<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:java;\">\r\n@Controller\r\n@RequestMapping(value =&quot;\/student&quot;)\r\npublic class StudentController {\r\n\r\n\r\n    @RequestMapping(value=&quot;&quot;, method = RequestMethod.GET)\r\n    public String getStudent(Model model){\r\n        Student student = new Student();\r\n        model.addAttribute(&quot;student&quot;, student);\r\n        return &quot;student-login&quot;;\r\n    }\r\n\r\n    @RequestMapping(value=&quot;&quot;, method = RequestMethod.POST)\r\n    public String studentDetails(@Valid @ModelAttribute Student student, BindingResult result, Model model){\r\n\r\n        if(result.hasErrors()){\r\n            return &quot;student-login&quot;;\r\n        }\r\n        model.addAttribute(&quot;message&quot;, &quot;Hey...welcome &quot;+student.getName());\r\n        return &quot;success&quot;;\r\n    }\r\n}<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\"><strong>Student.java&nbsp;<\/strong><\/span><\/span>\n<\/p>\n<pre class=\"brush:java;\">\r\npackage com.springapp.mvc;\r\n\r\nimport org.hibernate.validator.constraints.NotEmpty;\r\n\r\nimport javax.validation.constraints.NotNull;\r\nimport javax.validation.constraints.Size;\r\n\r\n\/**\r\n * Created by iue820 on 2\/5\/16.\r\n *\/\r\n\r\npublic class Student {\r\n\r\n    @NotEmpty\r\n    @Size(min=4, max=15)\r\n    @NotNull\r\n    private String name;\r\n\r\n\r\n    public String getName() {\r\n        return name;\r\n    }\r\n\r\n    public void setName(String name) {\r\n        this.name = name;\r\n    }\r\n\r\n    @Override\r\n    public String toString() {\r\n        return &quot;Student{&quot; +\r\n                &quot;name=&#39;&quot; + name + &#39;\\&#39;&#39; +\r\n                &#39;}&#39;;\r\n    }\r\n<\/pre>\n<p>\n\t&nbsp;\n<\/p>\n<p>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:tahoma,geneva,sans-serif;\">How to load images&nbsp;<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:tahoma,geneva,sans-serif;\">Load images in 3 steps<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:tahoma,geneva,sans-serif;\">1. create a folder &#39;resources&#39; under webapp and create sub-folders as required &nbsp;and keep the images there.<\/span><\/span><\/strong>\n<\/p>\n<p>\n\t<a href=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" data-attachment-id=\"239\" data-permalink=\"https:\/\/kaizen-koka.com\/?attachment_id=239\" data-orig-file=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png?fit=285%2C603&amp;ssl=1\" data-orig-size=\"285,603\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screen Shot 2016-02-24 at 11.51.22 AM\" data-image-description=\"\" data-image-caption=\"\" data-medium-file=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png?fit=142%2C300&amp;ssl=1\" data-large-file=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png?fit=285%2C603&amp;ssl=1\" alt=\"Screen Shot 2016-02-24 at 11.51.22 AM\" class=\"aligncenter size-full wp-image-239\" height=\"603\" src=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png?resize=285%2C603\" width=\"285\" srcset=\"https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png?w=285&amp;ssl=1 285w, https:\/\/i0.wp.com\/kaizen-koka.com\/wp-content\/uploads\/2016\/02\/Screen-Shot-2016-02-24-at-11.51.22-AM.png?resize=142%2C300&amp;ssl=1 142w\" sizes=\"auto, (max-width: 285px) 100vw, 285px\" \/><\/a>\n<\/p>\n<p>\n\t<strong><span style=\"font-size:14px;\"><span style=\"font-family:verdana,geneva,sans-serif;\">Add resources location in spring configuration file<\/span><\/span><\/strong>\n<\/p>\n<pre class=\"brush:xml;\">\r\n\r\n &lt;mvc:resources mapping=&quot;\/resources\/**&quot; location=&quot;\/resources\/&quot;\/&gt;<\/pre>\n<p>\n\t<span style=\"font-size:14px;\"><strong>Acess your image&nbsp;<\/strong><\/span>\n<\/p>\n<pre class=\"brush:xml;\">\r\n&lt;img src= &quot;&lt;c:url value=&quot;\/resources\/images\/simple.jpg&quot;\/&gt;&quot; alt=&quot;my image &quot;\/&gt;<\/pre>\n<p>\n\t&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Working Example :&nbsp;https:\/\/github.com\/teachkoka\/spring-mvc-xml Spring MVC Supports .Form backup support(using Spring tags) &nbsp;&#8211; for Presentation, we can hold bean data into bean classes and do validations .Controllers support(MultiAction Controllers and MultiForm [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false},"version":2}},"categories":[9,2],"tags":[],"class_list":["post-177","post","type-post","status-publish","format-standard","hentry","category-advance","category-technology"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p70lnf-2R","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts\/177","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=177"}],"version-history":[{"count":10,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts\/177\/revisions"}],"predecessor-version":[{"id":504,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=\/wp\/v2\/posts\/177\/revisions\/504"}],"wp:attachment":[{"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=177"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=177"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kaizen-koka.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=177"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}