Spring MVC Java-класс конфигурации не вызывает, поэтому я получаю ошибку 404 - PullRequest
0 голосов
/ 30 марта 2019

Я реализую Spring MVC в режиме 100% кода Java Это код, который я написал

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>

это мой класс инициализатора сервлет-диспетчера

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

это код класса конфигурации 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 не найден может кто-нибудь помочь мне решить это

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Пожалуйста, ознакомьтесь с примерами Spring Web MVC (https://spring.io/guides/gs/serving-web-content/). Это выглядит слишком сложно для того, чего вы, кажется, хотите достичь.

0 голосов
/ 30 марта 2019

сначала вам нужно изменить этот метод

@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

...