title: Can't configure ViewResolver in Spring Boot application
body: <p>I'm developing Spring Web application using Spring Boot using traditional war deployment. Now I have main configuration file:</p>
  
  <pre><code>package org.aze.accountingprogram;
  
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.boot.builder.SpringApplicationBuilder;
  import org.springframework.boot.context.embedded.FilterRegistrationBean;
  import org.springframework.boot.context.web.SpringBootServletInitializer;
  import org.springframework.context.annotation.Bean;
  import org.springframework.web.filter.CharacterEncodingFilter;
  
  import java.util.ArrayList;
  import java.util.List;
  
  @SpringBootApplication
  public class Application extends SpringBootServletInitializer {
  
      @Override
      protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
          return builder.sources(Application.class);
      }
  
      @Bean
      public FilterRegistrationBean encodingFilter() {
          CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter("UTF-8", true);
          FilterRegistrationBean filterRegBean = new FilterRegistrationBean();
          filterRegBean.setUrlPatterns(getRootPathUrls());
          filterRegBean.setFilter(encodingFilter);
          filterRegBean.setOrder(1);
          return filterRegBean;
      }
  
      private List&lt;String&gt; getRootPathUrls() {
          List&lt;String&gt; urlPatterns = new ArrayList&lt;String&gt;();
          urlPatterns.add("/*");
          return urlPatterns;
      }
  
      public static void main(String[] args) {
          SpringApplication.run(Application.class, args);
      }
  
  }
  </code></pre>
  
  <p>MVC configuration:</p>
  
  <pre><code>package org.aze.accountingprogram;
  
  import org.springframework.context.annotation.Bean;
  import org.springframework.context.annotation.Configuration;
  import org.springframework.web.servlet.config.annotation.EnableWebMvc;
  import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  import org.springframework.web.servlet.view.InternalResourceViewResolver;
  import org.springframework.web.servlet.view.JstlView;
  
  @Configuration
  @EnableWebMvc
  public class MvcConfiguration extends WebMvcConfigurerAdapter {
  
      @Bean
      public InternalResourceViewResolver setupViewResolver() {
          InternalResourceViewResolver resolver = new InternalResourceViewResolver();
          resolver.setPrefix("/WEB-INF/views/");
          resolver.setSuffix(".jsp");
          resolver.setViewClass(JstlView.class);
  
          return resolver;
      }
  
  }
  </code></pre>
  
  <p>one simple controller:</p>
  
  <pre><code>package org.aze.accountingprogram.controllers;
  
  import org.springframework.stereotype.Controller;
  import org.springframework.web.bind.annotation.RequestMapping;
  
  @Controller
  public class IndexController {
  
      @RequestMapping("/index")
      public String slash() {
          return "index";
      }
  
  }
  </code></pre>
  
  <p>and one simple jsp named "index.jsp":</p>
  
  <pre><code>&lt;%@ page contentType="text/html;charset=UTF-8" language="java" %&gt;
  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
      "http://www.w3.org/TR/html4/loose.dtd"&gt;
  &lt;html&gt;
    &lt;head&gt;&lt;title&gt;Simple jsp page&lt;/title&gt;&lt;/head&gt;
    &lt;body&gt;Place your content here&lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>Gradle file:</p>
  
  <pre><code>group 'org.aze.accountingprogram'
  version '1.0-SNAPSHOT'
  
  apply plugin: 'java'
  apply plugin: 'idea'
  apply plugin: 'war'
  apply plugin: 'spring-boot'
  
  allprojects {
      sourceCompatibility = '1.8'
      targetCompatibility = '1.8'
  }
  
  repositories {
      mavenCentral()
  }
  
  buildscript {
      repositories {
          jcenter()
      }
  
      dependencies {
          classpath("org.springframework.boot:spring-boot-gradle-plugin:1.3.2.RELEASE")
      }
  }
  
  dependencies {
      compile("org.springframework.boot:spring-boot-starter")
      compile("org.springframework.boot:spring-boot-starter-web")
  //    compile("org.springframework.boot:spring-boot-starter-jdbc")
  //    runtime("mysql:mysql-connector-java")
      compile("org.springframework.boot:spring-boot-starter-logging")
      compile("javax.servlet:jstl")
      providedRuntime("org.apache.tomcat.embed:tomcat-embed-jasper")
      providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")
      testCompile("org.springframework.boot:spring-boot-starter-test")
      testCompile group: 'junit', name: 'junit', version: '4.11'
  }
  
  configurations {
      compile.exclude group: 'commons-logging'
      compile.exclude group: 'org.apache.logging.log4j'
      compile.exclude group: 'log4j'
      providedRuntime
  }
  
  war {
      archiveName = 'AZEAccountingProgram.war'
      destinationDir = file('dist')
  }
  
  idea {
      project {
          //if you want to set specific jdk and language level
          jdkName = '1.8'
          languageLevel = '1.8'
      }
      module {
          //if you love browsing Javadoc
          downloadJavadoc = true
          jdkName = '1.8'
          excludeDirs += file('.nb-gradle')
          excludeDirs += file('.gradle')
          excludeDirs += file('out')
          excludeDirs += file('gradle')
          excludeDirs += file('build')
          excludeDirs += file('dist')
      }
  }
  </code></pre>
  
  <p>When I run application via Tomcat (IDE calls "build" command of Gradle and creates war file, then IDE deploys this war file into Tomcat and run it) I receive the following log:</p>
  
  <pre><code>  .   ____          _            __ _ _
   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
   =========|_|==============|___/=/_/_/_/
   :: Spring Boot ::        (v1.3.2.RELEASE)
  
  2016-02-01 18:59:55.684  INFO 3360 --- [on(2)-127.0.0.1] org.aze.accountingprogram.Application    : Starting Application on ICT-255L with PID 3360 (started by ittural in C:\Program Files\Apache Software Foundation\Tomcat 8.0\bin)
  2016-02-01 18:59:55.692  INFO 3360 --- [on(2)-127.0.0.1] org.aze.accountingprogram.Application    : The following profiles are active: dev
  2016-02-01 18:59:55.786  INFO 3360 --- [on(2)-127.0.0.1] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@69f965da: startup date [Mon Feb 01 18:59:55 AZT 2016]; root of context hierarchy
  2016-02-01 18:59:57.893  INFO 3360 --- [on(2)-127.0.0.1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 2107 ms
  2016-02-01 18:59:59.261  INFO 3360 --- [on(2)-127.0.0.1] b.a.w.TomcatWebSocketContainerCustomizer : NonEmbeddedServletContainerFactory detected. Websockets support should be native so this normally is not a problem.
  2016-02-01 18:59:59.326  INFO 3360 --- [on(2)-127.0.0.1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'errorPageFilter' to: [/*]
  2016-02-01 18:59:59.327  INFO 3360 --- [on(2)-127.0.0.1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
  2016-02-01 18:59:59.327  INFO 3360 --- [on(2)-127.0.0.1] o.s.b.c.embedded.FilterRegistrationBean  : Filter characterEncodingFilter was not registered (possibly already registered?)
  2016-02-01 18:59:59.327  INFO 3360 --- [on(2)-127.0.0.1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
  01-Feb-2016 18:59:59.556 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deploying web application directory C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\manager
  2016-02-01 18:59:59.973  INFO 3360 --- [on(2)-127.0.0.1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/index]}" onto public java.lang.String org.aze.accountingprogram.controllers.IndexController.slash()
  2016-02-01 19:00:00.007  INFO 3360 --- [on(2)-127.0.0.1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity&lt;java.util.Map&lt;java.lang.String, java.lang.Object&gt;&gt; org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
  2016-02-01 19:00:00.008  INFO 3360 --- [on(2)-127.0.0.1] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
  2016-02-01 19:00:00.222  INFO 3360 --- [on(2)-127.0.0.1] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@69f965da: startup date [Mon Feb 01 18:59:55 AZT 2016]; root of context hierarchy
  2016-02-01 19:00:00.258  INFO 3360 --- [ost-startStop-1] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
  01-Feb-2016 19:00:00.296 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory Deployment of web application directory C:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\manager has finished in 739 ms
  2016-02-01 19:00:01.419  INFO 3360 --- [on(2)-127.0.0.1] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
  2016-02-01 19:00:01.454  INFO 3360 --- [on(2)-127.0.0.1] org.aze.accountingprogram.Application    : Started Application in 7.461 seconds (JVM running for 14.918)
  [2016-02-01 07:00:01,487] Artifact AZEAccountingProgram.war: Artifact is deployed successfully
  [2016-02-01 07:00:01,487] Artifact AZEAccountingProgram.war: Deploy took 11 792 milliseconds
  </code></pre>
  
  <p>When I open URL <a href="http://localhost:8080/AZEAccountingProgram/index" rel="nofollow">http://localhost:8080/AZEAccountingProgram/index</a> it returns blank page (empty response).</p>
  
  <p>When I run application using command "bootRun" and try to open page, I receive and error page:</p>
  
  <hr>
  
  <p><strong>Whitelabel Error Page</strong></p>
  
  <p>This application has no explicit mapping for /error, so you are seeing this as a fallback.</p>
  
  <p>Mon Feb 01 19:08:53 AZT 2016
  There was an unexpected error (type=Not Found, status=404).
  No message available</p>
  
  <hr>
  
  <p>and log:</p>
  
  <pre><code>  .   ____          _            __ _ _
   /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
  ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
   \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
    '  |____| .__|_| |_|_| |_\__, | / / / /
   =========|_|==============|___/=/_/_/_/
   :: Spring Boot ::        (v1.3.2.RELEASE)
  
  2016-02-01 19:08:18.194  INFO 4424 --- [           main] org.aze.accountingprogram.Application    : Starting Application on ICT-255L with PID 4424 (D:\Projects\AZEAccountingProgram\build\classes\main started by ittural in D:\Projects\AZEAccountingProgram)
  2016-02-01 19:08:18.194  INFO 4424 --- [           main] org.aze.accountingprogram.Application    : The following profiles are active: dev
  2016-02-01 19:08:18.303  INFO 4424 --- [           main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4dbb42b7: startup date [Mon Feb 01 19:08:18 AZT 2016]; root of context hierarchy
  2016-02-01 19:08:21.040  INFO 4424 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
  2016-02-01 19:08:21.071  INFO 4424 --- [           main] o.apache.catalina.core.StandardService   : Starting service Tomcat
  2016-02-01 19:08:21.071  INFO 4424 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/8.0.30
  2016-02-01 19:08:21.607  INFO 4424 --- [ost-startStop-1] org.apache.jasper.servlet.TldScanner     : At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
  2016-02-01 19:08:21.607  INFO 4424 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
  2016-02-01 19:08:21.607  INFO 4424 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 3319 ms
  2016-02-01 19:08:21.795  INFO 4424 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Mapping filter: 'characterEncodingFilter' to: [/*]
  2016-02-01 19:08:21.795  INFO 4424 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean  : Filter characterEncodingFilter was not registered (possibly already registered?)
  2016-02-01 19:08:21.795  INFO 4424 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
  2016-02-01 19:08:22.068  INFO 4424 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/index]}" onto public java.lang.String org.aze.accountingprogram.controllers.IndexController.slash()
  2016-02-01 19:08:22.083  INFO 4424 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity&lt;java.util.Map&lt;java.lang.String, java.lang.Object&gt;&gt; org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
  2016-02-01 19:08:22.083  INFO 4424 --- [           main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
  2016-02-01 19:08:22.208  INFO 4424 --- [           main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@4dbb42b7: startup date [Mon Feb 01 19:08:18 AZT 2016]; root of context hierarchy
  2016-02-01 19:08:22.758  INFO 4424 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
  2016-02-01 19:08:22.852  INFO 4424 --- [           main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
  2016-02-01 19:08:22.852  INFO 4424 --- [           main] org.aze.accountingprogram.Application    : Started Application in 5.319 seconds (JVM running for 5.994)
  2016-02-01 19:08:52.995  INFO 4424 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'
  2016-02-01 19:08:52.995  INFO 4424 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started
  2016-02-01 19:08:53.028  INFO 4424 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 33 ms
  2016-02-01 19:08:53.057  WARN 4424 --- [nio-8080-exec-1] o.s.web.servlet.PageNotFound             : No mapping found for HTTP request with URI [/AZEAccountingProgram/index] in DispatcherServlet with name 'dispatcherServlet'
  </code></pre>
  
  <p>I don't understand why it says "Mapped "{[/index]}" onto public java.lang.String org.aze.accountingprogram.controllers.IndexController.slash()" but do not call it when opening URL /AZEAccountingProgram/index?</p>