Wykorzystanie zasobów na serwerze Tomcat przy użyciu wbudowanego Wiosna Boot

głosy
1

Mam projekt, w którym dane z kilku źródeł są przetwarzane w niektórych struktur danych. Po zakończeniu programu odbywa się budowa tych struktur, chcę go skonfigurować serwer, który pozwala użytkownikom na dostrojenie tych struktur ręcznie. Uznałem, że wiosna MVC na wbudowany serwer Tomcat skonfigurować za pomocą Boot wiosna jest właśnie to, czego potrzebuję.

Chcę używać Thymeleaf jak widzenia technologii, a zatem nie

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Main {

    public static void main(String... args) throws Exception {
        // Lots of initialization ...

        SpringApplication.run(Main.class, args);
    }

    @Bean
    public ServletContextTemplateResolver templateResolver() {
        ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
        resolver.setPrefix(/resources/views/);
        resolver.setSuffix(.html);
        resolver.setTemplateMode(HTML5);
        resolver.setCacheable(false);
        return resolver;

    }

    public SpringTemplateEngine templateEngine() {
        SpringTemplateEngine engine = new SpringTemplateEngine();
        engine.setTemplateResolver(templateResolver());
        return engine;
    }

    @Bean
    public ViewResolver viewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(templateEngine());
        viewResolver.setOrder(1);
        viewResolver.setViewNames(new String[]{*});
        viewResolver.setCache(false);
        return viewResolver;
    }
}

i

@Controller
public class WebController {
    @RequestMapping(value=/greeting, method=RequestMethod.GET)
    public String greeting() {
        return greeting;
    }
}

Ale nawet jeśli nie jest to plik w widoku /resources/views/greeting.html, Odpowiedź serwera do adresu URL http://localhost:8080/greetingjest

org.thymeleaf.exceptions.TemplateInputException: Error resolving template greeting, template might not exist or might not be accessible by any of the configured Template Resolvers

Po wstępnej poprzez kod w debugger wydaje się, że w pewnym momencie ServletContext, który ma przywrócić plik widoku w postaci strumienia, patrzy w folderze tymczasowym jak

C:\Users\Michael\AppData\Local\Temp\tomcat-docbase.971027024999448548.8080

który jest pusty.

Teraz rozumiem, że muszę albo

  1. Mają środków wdrożonych do folderu tymczasowego, gdy serwer uruchamia się

  2. Że serwer działa w katalogu, w którym zasoby są już

Moim problemem jest to, że po prostu nie wiem jak to zrobić albo, lub, które podejście jest najlepsze. Coś mi mówi, że 1 jest lepszym mądrość, ale wszelkie sugestie są mile widziane.

Edytować

Ok, skończyło się z czymś, co wydaje się działać. Chociaż odpowiedź Joe zdecydowanie pomógł mi dostać się na drodze, wydaje się również, że musiałem zmienić konfigurację Maven w sposób, który mnie zagadek.

Po włożeniu szablonu greeting.htmldo /resources/templates/greeting.htmli dodając resourcesdo ścieżki kompilacji, mam błąd

javax.servlet.ServletException: Circular view path [greeting]: would dispatch back to the current handler URL [/word/greeting] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

Innymi słowy, Thymeleaf wydawał się nie być prawidłowo skonfigurowany. Po pewnym fiddling skończyło się na zmianę wersji spring-boot-starter-parentIN pom.xmlod 0.5.0.BUILD-SNAPSHOTdo 0.5.0.M6:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <!--<version>0.5.0.BUILD-SNAPSHOT</version>-->
    <version>0.5.0.M6</version>
</parent>

i usuwania tag wersji z uzależnienia Thymeleaf

<dependencies>
    <!-- ... -->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring3</artifactId>
        <!--<version>${thymeleaf-spring3-version}</version>-->
    </dependency>
</dependencies>

Po tym, to działało.

Czy ktoś mógłby wyjaśnić, dlaczego musiałem zmienić wersję spring-boot-starter-parent, aby móc usunąć tag wersji z thymeleaf-spring3, i dlatego, że było to konieczne?

Utwórz 04/01/2014 o 05:46
źródło użytkownik
W innych językach...                            


1 odpowiedzi

głosy
3

Korzeń kontekstu serwletu nie jest najlepszym miejscem do szablonów w wbudowany serwer. Jest sposób, aby to zrobić, ale gdybym był tobą chciałbym iść z prądem i użyć ścieżki klasy. Jeśli pozwolisz Wiosna Boot do skonfigurowania rozpoznawania nazw szablonów (również zalecane) to będzie wyglądać w classpath:/templatesdomyślnie. Istnieje kilka próbek, które używają thymeleaf w bazie kodu Boot, więc powinno być łatwe do modyfikacji jednego z nich, jeśli mają różne wymagania.

Odpowiedział 04/01/2014 o 10:35
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more