Spring, uruchomienie pierwszego projektu.

0

Witam.
Próbuję wystartować z pierwszym projektem springa MVC z wykorzystaniem adnotacji już jakiś czas i wszystko to jak krew w piach...
Czytam sobie książkę "Spring w akcji", ale mało tu jest o wstępnej konfiguracji projektu i za bardzo nie wiem jak to zrobić. Próbowałem stworzyć zwykły projekt mavena, dodałem to co było w książce + zależności mavenowe, ale nie mogę wystartować projektu z tomcata, w ogóle nie pokazuje mi się zapisana konfiguracja. Z tomcatem wszystko ok, ponieważ do testów wystartowałem inny projekt oparty na xml'owej konfiguracji.
W książce mam do dodania kilka klas

package spittr.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[] { RootConfig.class } ;
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { WebConfig.class };
	}

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

}

package spittr.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan(basePackages = { "spittr" }, excludeFilters = {
		@Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
public class RootConfig {

}
package spittr.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan("spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {
	@Bean
	public ViewResolver viewResolver() {
		InternalResourceViewResolver resolver= new InternalResourceViewResolver();
		resolver.setPrefix("/WEB-INF/views/");
		resolver.setSuffix(".jsp");
		resolver.setExposeContextBeansAsAttributes(true);
		return resolver;
	}
	
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
}
package spittr.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

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

i jeden widok:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false"%>
<html>
	<head>
		<title>Spittr</title>
		<link rel="stylesheet"
			type="text/css"
			href="<c:url value='/resources/style.css' />" >
	</head>
	<body>
		<h1>Witamy w serwisie</h1>
		<a href="<c:url value='/spittles' />">Spittle</a>
		<a href="<c:url value='/spitter/register' />">Rejestracja</a>
	</body>
</html>

Dodaje także załącznik z moim obecnym projektem w mavenie.

Nie wiem dlaczego tomcat nie chce tego połknąć, proszę o pomoc.
Pozdrawiam.

0

Hej, może wygeneruj sobie jakiś gotowy projekt i podpatrz jak to działa? Z tego co pamiętam to jhipster może być dobrym przykładem, a jako, że od razu daje front z Angulara, to domniemywam, że tam też jest Spring MVC (choć może mnie pamięć mylić).

0

"Nie chcę tego połknąć" - taki ci Tomcat wypisuje komunikat o błędzie? :D Wklej błędy.

1

Na przyszłość wklejaj błędy, bo nie każdemu chce się pobierać spakowany projekt.

Poprawiłem plik pom.xml i aplikacja poprawnie się uruchamia na Tomcacie (pojawia się strona z napisem "Witamy w serwisie").
Nowy plik pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>eu.csnajper.spitter</groupId>
    <artifactId>spitter</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <failOnMissingWebXml>false</failOnMissingWebXml>
        <spring-webmvc.version>4.0.3.RELEASE</spring-webmvc.version>
        <jstl.version>1.2</jstl.version>
        <javax.servlet-api.version>3.1.0</javax.servlet-api.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-webmvc.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>${jstl.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${javax.servlet-api.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

Twój błąd polegał na tym, że nie miałeś ustawionego pakowania projektu do pliku war (domyślnie projekt jest pakowany do pliku jar):

<packaging>war</packaging>

Jako że nie masz pliku web.xml (ponieważ konfigurujesz za pomocą adnotacji i kodu javowego) to również takie ustawienie musi się pojawić:

<properties>
    <failOnMissingWebXml>false</failOnMissingWebXml>
    (...ciąg dalszy ustawien...)
</properties>

1 użytkowników online, w tym zalogowanych: 0, gości: 1