Spring MVC java Configuration类没有调用,所以我收到404错误

问题描述 投票:0回答:2

我在100%java代码模式下实现spring MVC这是我编写的代码

的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>

这是我的调度程序servlet初始化程序类

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

这是spring web MVC配置类代码

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

因此,当我在tomcat 8服务器中部署它时,我收到404错误,如http://localhost:7979/example/ /example/home.htm未找到任何人都可以帮我解决这个问题

java spring spring-mvc http-status-code-404 spring-java-config
2个回答
0
投票

首先,您需要更改此方法

@Override
    protected String[] getServletMappings() {
        //retunr url 
        return new String[] {"*.htm"};
    }

对此

@Override
    protected String[] getServletMappings() {
        //retunr url 
        return new String[] {"/"};
    }

Class WebMvcConfigurerAdapter Deprecated。从5.0开始,WebMvcConfigurer具有默认方法(由Java 8基线实现)并且可以直接实现而无需此适配器

在这里,不要使用WebMvcConfigurerAdapter,因为它在Spring 5及更高版本中已弃用。 (我认为你提到了一个旧教程)

public class ExampleConfig extends WebMvcConfigurerAdapter{

而不是那个配置尝试这种配置

@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/");
    }

} 

上面的代码对我有用,让我知道发生了什么错误,我建议你参考this Java config example


0
投票

请查看Spring web MVC示例(https://spring.io/guides/gs/serving-web-content/)。对于您似乎想要实现的目标,这看起来过于复杂。

© www.soinside.com 2019 - 2024. All rights reserved.