Невозможно загрузить HTML-страницы при использовании конфигурации аннотаций Spring

Я работаю над POC, используя Spring с конфигурацией на основе аннотаций. Работая над этим, я столкнулся со следующими проблемами:

  • Когда я использую сопоставление сервлета диспетчера как /, я могу получить доступ к контроллерам, но не к html-странице.

  • Когда я меняю сопоставление на /**, я могу получить доступ к html-странице, но не к контроллерам.

Я не уверен, должен ли я добавить еще один диспетчерский сервлет и добавить в него одно сопоставление. Я также попытался передать оба сопоставления в сервлет диспетчера, но это не сработало.

Может кто поможет мне с проблемой.

Ниже приведен код:

Настройка приложения

package com.upload.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(WebConfig.class)
@ComponentScan(basePackages= "com.upload")
public class AppConfig {
}

Веб-конфигурация

package com.upload.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter{
}

Инициализатор сервлетов

public class ServletInitializer extends AbstractDispatcherServletInitializer {

@Override
protected WebApplicationContext createServletApplicationContext() {
    final AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
    context.register(AppConfig.class);
    context.getEnvironment().setActiveProfiles("prod");
    return context;
}

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

@Override
protected WebApplicationContext createRootApplicationContext() {
    return null;
}
}

Контроллер FileUpload

@Controller
@RequestMapping("/ws")
public class FileUploadController {

@RequestMapping(value="hello",method=RequestMethod.GET)
public String hello(){
    return "Hello";
}

}

person Logan    schedule 10.04.2015    source источник


Ответы (1)


Используйте следующий подход: вам нужно добавить addResourceHandler, чтобы получить html-страницу из структуры web-inf WEB-INF/views/viewer, где присутствуют все ваши страницы, такие как: js/html/css/images и т. д. Вы можете удалить файл AppConfig .java, показанный выше.

package com.Configuration.si.config;

@Configuration
@ComponentScan("com.Configuration.si")
@EnableWebMvc
public class Configuration extends WebMvcConfigurerAdapter {

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/viewer/**","/lib/**","/js/**","/images/**","/css/**","/swf/**")
            .addResourceLocations("/WEB-INF/views/viewer/","/WEB-INF/views/lib/","/WEB-INF/views/js/","/WEB-INF/views/images/","/WEB-INF/views/css/","/WEB-INF/views/swf/")
            .setCachePeriod(315569126);
    registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
}

Также добавьте этот класс в свою структуру

package com.Configuration.si.config;

@Configuration
public class WebMvcConfiguration  {

@Bean
public InternalResourceViewResolver internalResourceViewResolver() {
    InternalResourceViewResolver internalResourceViewResolver = new InternalResourceViewResolver();
    internalResourceViewResolver.setViewClass(JstlView.class);
    internalResourceViewResolver.setPrefix("/WEB-INF/views/");
    internalResourceViewResolver.setSuffix(".jsp");
    return internalResourceViewResolver;
    }
}

Внутренний преобразователь представлений разрешит нужную вам страницу с помощью model.setViewName("login"); в контроллере. Надеюсь, это поможет вам

person Deepak    schedule 20.08.2015