I am implementing the spring MVC in 100% java code mode This is the code i have written
index.jsp
<!-- forward to home page -->
<jsp:forward page="home.htm"></jsp:forward>
home.jsp
<!-- header page -->
<jsp:include page="header.jsp"></jsp:include>
<h1>Hi this is Home Page</h1>
<!-- footer page -->
<jsp:include page="footer.jsp"></jsp:include>
this is my dispatcher servlet initializer class
package com.example.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ExampleAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// return rootapp config class
return null;
}
@Override
protected Class<?>[] getServletConfigClasses() {
// return webmvc config class
return new Class[] {ExampleConfig.class};
}
@Override
protected String[] getServletMappings() {
//retunr url
return new String[] {"*.htm"};
}
}//ExampleAppInitializer
this is spring web MVC configuration class code
package com.example.config;
import java.util.Properties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerMapping;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
import org.springframework.web.servlet.mvc.Controller;
import org.springframework.web.servlet.mvc.ParameterizableViewController;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@EnableWebMvc
@Configuration
@ComponentScan(basePackages="com.example.*")
public class ExampleConfig extends WebMvcConfigurerAdapter{
@Bean(id="createHandlerMapping")
public HandlerMapping createHandlerMapping() {
System.out.println("createHandlerMapping ");
// lcal variable declarations
SimpleUrlHandlerMapping simpleUrlHandlerMapping = null;
Properties mappingProperties = null;
// create object of handler
simpleUrlHandlerMapping = new SimpleUrlHandlerMapping();
mappingProperties = new Properties();
// mapping the urls
mappingProperties.put("/home.htm", "homePageController");
simpleUrlHandlerMapping.setMappings(mappingProperties);
return simpleUrlHandlerMapping;
}// createHandlerMapping
@Bean(id="homePageController")
public Controller homePageController() {
System.out.println("homePageController ");
// local variable declarations
ParameterizableViewController homePageController = null;
// create the objects
homePageController = new ParameterizableViewController();
homePageController.setViewName("home");
// return homePageController
return homePageController;
}// homePageController
@Bean(id="getViewName")
public ViewResolver getViewName() {
System.out.println("getViewName ");
// local variable declarations
InternalResourceViewResolver getViewName = null;
// create the objects
getViewName = new InternalResourceViewResolver();
// setting the paths
getViewName.setPrefix("/WEB-INF/view/");
getViewNa me.setSuffix(".jsp");
// return
return getViewName;
}// getViewName
}// ExampleConfig
so when I deploy it in tomcat 8 server I am getting the 404 error like http://localhost:7979/example/ /example/home.htm not found can anyone help me to solve this
first you need to change this method
@Override
protected String[] getServletMappings() {
//retunr url
return new String[] {"*.htm"};
}
to this
@Override
protected String[] getServletMappings() {
//retunr url
return new String[] {"/"};
}
Class WebMvcConfigurerAdapter Deprecated . as of 5.0 WebMvcConfigurer has default methods (made possible by a Java 8 baseline) and can be implemented directly without the need for this adapter
here, do not use WebMvcConfigurerAdapter, because it is Deprecated in Spring 5 and later version. (I think you refered an old tutorial)
public class ExampleConfig extends WebMvcConfigurerAdapter{
instead of that config try this kind of config
@Configuration
@EnableWebMvc
@ComponentScan("com.example") //no need to put .* after package name
public class ExampleConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/pages/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry
.addResourceHandler("/resources/**")
.addResourceLocations("/resources/");
}
}
above code is worked for me, let me know anything happened wrong and I recommend you to refer this Java config example
Please check Spring web MVC examples( https://spring.io/guides/gs/serving-web-content/ ). This looks overly complicated for what you seem to want to achieve.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.