首页 > 解决方案 > Spring MVC java配置类没有调用,所以我收到404错误

问题描述

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

索引.jsp

<!-- forward to home page -->
<jsp:forward page="home.htm"></jsp:forward>

主页.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 not found 谁能帮我解决这个问题

标签: javaspringspring-mvchttp-status-code-404spring-java-config

解决方案


首先你需要改变这个方法

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

对此

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

类 WebMvcConfigurerAdapter 已弃用。从 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/");
    }

} 

上面的代码对我有用,让我知道发生了什么错误,我建议你参考这个 Java 配置示例


推荐阅读