2 votes

Spring Mvc Java n'a pas pu résoudre la vue avec le nom 'home' dans la servlet avec le nom 'dispatcher'.

J'ai un problème avec ma première application. J'essaie de le résoudre pendant plusieurs heures. Une idée ?

HTTP Status 500 – Internal Server Error

Type de rapport d'exception

Message Impossible de résoudre la vue avec le nom 'home' dans la servlet avec le nom dispatcher

Description Le serveur a rencontré une condition inattendue qui l'a empêché de répondre à la demande.

Exception

javax.servlet.ServletException : Impossible de résoudre la vue avec le nom 'home' dans la servlet avec le nom 'dispatcher'. org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1251) org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1037) org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:980) org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897) org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Remarque La trace de la pile complète de la cause première est disponible dans les journaux du serveur. Apache Tomcat/9.0.1

//Contrôleur

public class SystemController {

@Autowired
private SysDeaUseService sysDeaUseService;

@RequestMapping(value = {"/","/home"}, method = RequestMethod.GET)
public String home(ModelMap model) {
    return "home";
}

@RequestMapping(path = "/system", method = RequestMethod.GET)
public String sys(ModelMap model) {
    return "system";
}

@RequestMapping(path = "/system/get", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> getAllSystem() {
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("Result", "Ok");
    resultMap.put("Records", sysDeaUseService.getAllSystem());
    return new ResponseEntity<Map<String, Object>>(resultMap, HttpStatus.OK);
}

@RequestMapping(path = "/system/save-edit", method = RequestMethod.POST, consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE
        , produces = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<Map<String, Object>> saveSystem(@ModelAttribute System system) {
    sysDeaUseService.saveSystem(system);
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("Result", "Ok");
    resultMap.put("Records", sysDeaUseService.getAllSystem());
    return new ResponseEntity<Map<String, Object>>(resultMap, HttpStatus.OK);
}

@RequestMapping(path = "/system/delete", method = RequestMethod.POST)
public ResponseEntity<Map<String, Object>> deleteSystem(Integer systemId) {
    sysDeaUseService.deleteSystem(systemId);
    Map<String, Object> resultMap = new HashMap<>();
    resultMap.put("Result", "Ok");
    return new ResponseEntity<Map<String, Object>>(resultMap, HttpStatus.OK);

}

//AppConfig

@Configuration
@EnableWebMvc
@EnableTransactionManagement
@PropertySource({"classpath:application.properties"})
@ComponentScan(basePackages = {"com.wn"})
public class AppConfig extends WebMvcConfigurerAdapter {

@Autowired
private Environment env;

@Bean
public TilesViewResolver getTilesViewResolver() {
    TilesViewResolver tilesViewResolver = new TilesViewResolver();
    tilesViewResolver.setPrefix("/WEB-INF/Views/Page");
    tilesViewResolver.setSuffix(".jsp");
    tilesViewResolver.setViewClass(TilesView.class);
    return tilesViewResolver;
}

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("/static/");
}

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    Jackson2ObjectMapperBuilder builder = new Jackson2ObjectMapperBuilder().indentOutput(true);
    converters.add(new MappingJackson2HttpMessageConverter(builder.build()));
}

private Properties setHibernateProperties() {
    Properties props = new Properties() {
        {
            setProperty("hibernate.hbm2ddl.auto", env.getProperty("hibernate.hbm2ddl.auto"));
            setProperty("hibernate.dialect", env.getProperty("hibernate.dialect"));
            setProperty("hibernate.generate_statistics", "true");
            setProperty("hibernate.show.sql", "true");
        }
    };
    return props;
}

@Bean
public LocalSessionFactoryBean sessionFactory() {
    LocalSessionFactoryBean sessionFactoryBuilder = new LocalSessionFactoryBean();

    sessionFactoryBuilder.setDataSource(prepareDataSource());
    sessionFactoryBuilder.setPackagesToScan(new String[]{"com.wn.entity"});
    sessionFactoryBuilder.setHibernateProperties(setHibernateProperties());

    return sessionFactoryBuilder;
}

@Bean
public DataSource prepareDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setDriverClassName(env.getProperty("jdb.driver.class.name"));
    dataSource.setUrl(env.getProperty("jdbc.url"));
    dataSource.setUsername(env.getProperty("jdbc.user.name"));
    dataSource.setPassword(env.getProperty("jdbc.password"));

    return dataSource;
}

@Bean
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {

    HibernateTransactionManager txManager = new HibernateTransactionManager();
    txManager.setSessionFactory(sessionFactory);

    return txManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor exceptionTranslation() {
    return new PersistenceExceptionTranslationPostProcessor();
}

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**");
        }
    };
}

@Bean
public TilesConfigurer getTilesConfigurer() {
    TilesConfigurer tilesConfigurer = new TilesConfigurer();
    tilesConfigurer.setCheckRefresh(true);
    tilesConfigurer.setDefinitionsFactoryClass(TilesDefinitionsConfig.class);
    return tilesConfigurer;
}

//ApplicationInitializer

public class ApplicationInitializer implements WebApplicationInitializer {

   @Override
   public void onStartup(ServletContext container) throws ServletException {

    AnnotationConfigWebApplicationContext rootCtx = new AnnotationConfigWebApplicationContext();

    rootCtx.register(AppConfig.class);
    container.addListener(new ContextLoaderListener(rootCtx));

    AnnotationConfigWebApplicationContext annotationConfigWebAppCtx = new AnnotationConfigWebApplicationContext();

    annotationConfigWebAppCtx.register(DispatcherServlet.class);

    ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(rootCtx));

    servlet.setLoadOnStartup(1);
    servlet.addMapping("/");
}

//TilesDefinitionConfig

public final class TilesDefinitionsConfig implements DefinitionsFactory{

private static final Map<String,Definition> tilesDefinitions = new HashMap<>();
private static final Attribute BASE_TEMPLATE = new Attribute("/WEB-INF/Views/tiles/layouts/layout.jsp");

@Override
public Definition getDefinition(String name, Request tilesContext) {
    return tilesDefinitions.get(name);
}

private static void addDefaultLayoutDef(String name, String title, String body) {
    Map<String, Attribute> attributes = new HashMap<>();

    attributes.put("title", new Attribute(title));
    attributes.put("header", new Attribute("/WEB-INF/Views/tiles/template/header.jsp"));
    attributes.put("menu", new Attribute("/WEB-INF/Views/tiles/template/menu.jsp"));
    attributes.put("body", new Attribute(body));
    attributes.put("footer", new Attribute("/WEB-INF/Views/tiles/template/footer.jsp"));

    tilesDefinitions.put(name, new Definition(name, BASE_TEMPLATE, attributes));
}

public static void addDefinitions(){
    addDefaultLayoutDef("home","Home", "/WEB-INF/Views/Page/home.jsp");
}

public static void addDefinitionsSystem() {
    addDefaultLayoutDef("system","Systemy", "/WEB-INF/Views/Page/system.jsp");
}

public static void addDefinitionsDeal() {
    addDefaultLayoutDef("deal","Umowy", "/WEB-INF/Views/Page/deal.jsp");
}

public static void addDefinitionsContact() {
    addDefaultLayoutDef("contact","Kontakt", "/WEB-INF/Views/Page/contact.jsp");
}

}

1voto

globetrotter Points 106

@Controller public class SystemController {

Mettez l'annotation de contrôleur dans la classe et redéployez. Activez le débogage sur les journaux et vérifiez ensuite cette valeur dans les journaux : RequestMappingHandlerMapping:- Mappé "{[/home],methods=[GET]}" sur ...

0voto

Wojciech Nieckarz Points 11

J'ai trouvé où il y avait un problème.

Si je configure les tuiles en classe - j'ai besoin de :

<dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-catalina</artifactId>
        <version>9.0.2</version>
    </dependency> 

Le fichier tiles.xml n'a pas besoin de

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X