Spring MVC java config - pytań kilka

0

Hej

Denerwuje mnie ten Spring niesamowicie (zwłaszcza, że ostatnio siedziałem w Sparku) i potrzebuję paru odpowiedzi.
Mam 2 działające konfiguracje w 2 różnych projektach - ale żadna nie chce działać w innej, tj. próba uruchomienia nowej konfiguracji wzorowanej na którejś z tych dwóch zawsze kończy się 404. Za każdym razem tworzę nową konfigurację dla Tomcata - dla opisanych niżej konfiguracji stworzenie nowej nie powoduje wysypania się projektu.

Konfiguracja 1:
screenshot-20180326222355.png

package com.burdzi0.mvc.config;

... importy

@Configuration
@EnableWebMvc
@ComponentScan("com.burdzi0.mvc")
public class WebConfig implements WebMvcConfigurer {

    @Bean
    public InternalResourceViewResolver resolver() {
        return new InternalResourceViewResolver("/WEB-INF/jsp", ".jsp");
    }
}

i druga klasa:

package com.burdzi0.mvc.config;

... importy

@Configuration
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

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

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

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

Konfiguracja 2 (inny projekt):
screenshot-20180326222308.png

package com.websystique.springmvc.configuration;

... importy

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.websystique.springmvc")
public class HelloWorldConfiguration {

    @Bean(name="HelloWorld")
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");

        return viewResolver;
    }
}

i druga klasa:

package com.websystique.springmvc.configuration;

... importy

public class HelloWorldInitializer implements WebApplicationInitializer {

    public void onStartup(ServletContext container) throws ServletException {

        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(HelloWorldConfiguration.class);
        ctx.setServletContext(container);

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

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

}
  1. Czy któraś konfiguracja jest poprawna?
  2. Z której powinienem korzystać (jeżeli jest poprawna) ?
  3. Jakich klas/interfejsów powinienem użyć?
  4. Gdzie poza dokumentacją (która ssie, bo rzuca ogólnikami, ale nie pokazuje jak poprawnie powinno zostać to zrobione) szukać pomocy?

Nie znajduję w internecie ani w dokumentacji odpowiedzi na pytanie z których klas (i jak) korzystać, aby móc postawić porządną konfigurację dla mojego programu. Gdybym czegoś nie uwzględnił to proszę o powiadomienie, bardzo zależy mi na odpowiedzi.

1

Ogólnie to WebApplicationInitializer powinien działać na nowszych tomcatach.
Ale ja tam temu nie wierzę :-) debuga bym najmniej wstawił.
Pytanie jest: pod jakim url (/context/ ci się to rejestruje)? - to Tomcat powinien napisać gdzieś.
W sumie najważniejsze pytanie - po co się tym bawisz?
To i tak raczej archeologia doświadczalna.

0

@Burdzi0: posłuchaj kolegi i daj sobie spokój, Spring 5 jest o wiele bardziej ludzki i nie musisz się babrać w tym dziadowskim jsp :-)

0

W sumie najważniejsze pytanie - po co się tym bawisz?
To i tak raczej archeologia doświadczalna.

@jarekr000000: No chcąc nie chcąc muszę mieć jakiś front, prawda? :P
Nie uczę się JavaScriptu, więc sam frontu nie naskrobię, co od razu sprawia, że te dziadowskie JSP w sumie są dla mnie odpowiednie (ewentualnie jakiś FreeMarker). W Springu też pracuje dużo firm we Wro, więc fajnie byłoby go znać, chociażby, żeby dostać się na staż (chyba, że o czymś nie wiem). W każdym razie wszelkie uwagi na temat ścieżki nauki backend webdevu mile widziane ;)

@Aryman1983: Co przez to rozumiesz? Jakie zmiana w Springu 5 mi umknęła? Wszelkie rady mile widziane ;)

1

Rozumiem, że chcesz uniknąć ścieżki JS na razie, ale za to uczysz sięczegoś jeszcze gorszego i do tego zupełnie nieprzydatnego.

Jak już chcesz się uczyć robić w Springu zrypanym (czyli na adnotacjach) to zrób w nim klasyczne RESTowe metody zwracające JSON i naucz się to testować przy pomocy curl.
Generowanie HTML, CSS itp. olej. - skup się na backendzie.
Jak będziesz chciał robić stronki to będziesz musiał obczaić podstawy HTML, CSS i JS(Typescript) - nie ma na razie ucieczki.

0

@jarekr000000: Super, dzięki ;)

Jak już chcesz się uczyć robić w Springu zrypanym (czyli na adnotacjach)

Lepsza konfiguracja XMLowa? Czy jest jakaś trzecia?

2

No przecież byłeś na mojej prezentacji. Najlepsza jest Java. Działa w Spring 5 webflux. Bez adnotacji i XMLi.
Firmy tego na razie nie używają za bardzo (ja używam w jednym projekcie dopiero), .... ale przecież nie idziesz od jutra do pracy raczej :-)
Za 3-5 lat to z tych adnotacji raczej wszyscy będą się śmiać, z webfluxa może też, ale raczej mainstream idzie do przodu w stronę funkcyjną niż magiczną.

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