简体   繁体   中英

Spring MVC java Configuration class is not calling , so i am getting 404 error

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM