I'm trying to setup Spring MVC project without dispatcher xml and web xml(i.e. without any xml at all). Hence, I'm using @JavaConfig technique of Spring. However, whenever I'm trying to start the application on my server my server it's not working(without throwing any exception it's getting HTTP 404).
Here is the snapshot of the project structure...
And here the code snippets:
WebConfig.java
@EnableWebMvc
@Configuration
@ComponentScan({ "com.controller" })
public class WebConfig extends WebMvcConfigurerAdapter {
private static final String VIEW_LOCATION = "/WEB-INF/views/";
private static final String SUFFIX = ".jsp";
// @Override
// public void addResourceHandlers(ResourceHandlerRegistry registry) {
// System.out.println("in resource");
// registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
// }
@Bean
public InternalResourceViewResolver viewResolver() {
System.out.println("in view");
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setPrefix(VIEW_LOCATION);
viewResolver.setSuffix(SUFFIX);
return viewResolver;
}
}
Initializer.java
public class Initializer extends AbstractAnnotationConfigDispatcherServletInitializer {
private static final String MAPPING_URL = "/";
@Override
protected Class<?>[] getRootConfigClasses() {
System.out.println("in config");
return new Class[] { WebConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebConfig.class };
}
@Override
protected String[] getServletMappings() {
System.out.println("dispatcher");
return new String[] { MAPPING_URL };
}
}
HelloController.java
@Controller
public class HelloController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public String printWelcome() {
System.out.println("in servlet");
return "index";
}
}
And here is the pox.xml snippet:
<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>com</groupId>
<artifactId>UI</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>UI Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
<finalName>UI</finalName>
</build>
</project>
Your code is all right. I was execute them without any changes on
Tomcat 8
application server. Use Maven to packagewar
,mvn clean package
.Your project structure looks good but I doubt about the Eclipse configuration. Looks like your package is not being a part of Java Source.
Please execute the following steps:
1. Verify
Source
set for project. Go to project properties,Java Build Path
and onSource
tab, look for the entriessrc\main\java
andsrc\main\resources
. If not present, click onAdd Folder
to add source folders and it should similar to the below:2. Go to
Deployment Assembly
and verify that the you have deployment entry mappings in the right way. If you do not findDeployment Assembly
, go toProject Facets
and go for the option to convert the project to faceted form. InProject Facets
, you should haveDynamic Web Module
selected.Deployment Assembly
should have mappings fromMaven Dependencies
toWEB-INF/lib
,/src/main/webapp
to/
,src/main/resources
toWEB-INF/classes
andsrc/main/java
toWEB-INF/classes
. If any of these entries are missing, you may clickAdd
and chooseFolder
orLibraries
as required.3. Make sure that you access the project using the
Context Root
name mentioned in theWeb Project Settings
of your project, if you are deploying the application through Eclipse and not through maven or some other tool.In the above case, you can access the application by
localhost:8080/UI
where the server port8080
may vary according to configuration.