Spring kilka pytań

0
  1. Skąd najlepiej brać kod do plików web.xml DefaultServlet-servlet.xml ? Pisać go samemu od zera ?
  2. Czy układ katalogów zawsze musi być src/main/webapp/WEB-INF/ ? W pliku konfiguracyjnym DefaultServlet-servlet.xml mam linijkę
<property name="prefix" value="/WEB-INF/view/" />

jeżeli miałbym inny układ folderów i widok (plik *.jsp) chciałbym sobie umieścić w ścieżce src/main/view to co musiałbym wpisać w value prefix'u ?

  1. Korzystam z STS 3.8.2. Utworzyłem sobie jeden projekt z pomocą książki, klikam Run As/Run on Server, ok działa. Utworzyłem drugi projekt w ten sam sposób, i gdy klikam PPM na projekt to w ogóle nie mam opcji Run on Server. Dlaczego ?

Edit, dostaję błąd: the selection does not contain any resources that can run on a server.

1

polecam generator z yeoman, nazywa się jhipster. Jak zbudujesz sobie projekt, to zobacz jaką ma strukturę. Tam jest wszystko bardzo ładnie zrobione i korzystają z tego giganci rynku.
Poza tym wywal STSa/Eclipsa i korzystaj z IntelliJ Community.

Korzystam z STS 3.8.2. Utworzyłem sobie jeden projekt z pomocą książki, klikam Run As/Run on Server, ok działa. Utworzyłem drugi projekt w ten sam sposób, i gdy klikam PPM na projekt to w ogóle nie mam opcji Run on Server. Dlaczego ?

jest kilka opcji: nie zrobiłeś builda, nie masz wara/jara, a może to nie jest aplikacja serwerowa, tylko zwykła, więc może odpal jako zwykłą apkę i zobacz czy działa

Jak zaczynasz ze Springiem to idź z duchem czasu i olej xml na rzecz adnotacji.

0

Olej XML na rzecz adnotacji.
Nie używaj jhipstera, bo jest beznadziejny.
Użyj http://start.spring.io/ i wygeneruj sobie projekt w Spring Boot. Zacznij czytać o Springu i Spring Boot i z biegiem czasu jak coś Ci będzie potrzebne poznawaj jego kolejne funkcje.

0

Nie używaj jhipstera, bo jest beznadziejny.

:D

0

Uczę się póki co Spring MVC z jednej książki. Tam jest nauka oparta na XML'ach więc ogarnę co tam napisali, żeby złapać podstawy, a później przerzucę się na adnotację.

0

Czy Rest Templates da się używać jakoś normalnie już czy dalej jest to jakoś niewygodne ?
Typu tworzenie jakiś map by wysłać coś POSTem, rejestracja message konwerterów itp. itd.

0

Zapytam ponownie o to czemu mi się nie chce uruchomić. To ma być najprostszy Hello World w Springu, a męczę się z tym już drugi dzień. Układ plików/folderów w załączniku. Help.

0

trudno powiedzieć co tam w tej książce napisali, tylko po screenie struktury projektu ;)
Poza tym Java 1.5, Panie - to było 12 lat temu! Chyba, że szef się nad Tobą znęca i każe w tym pisać.
Napisz proszę, co to za książka z której się uczysz?
Przeklej też kod z web.xml i DefaultServlet-servlet.xml, będzie łatwiej.

0

Książka to: Spring MVC przewodnik dla początkujących. Sytuacja wygląda w ten sposób: zrobiłem pierwszy projekt zgodnie z książką i okej, wszystko działa jak trzeba. Następnie chciałem samemu stworzyć Hello Worlda w Springu MVC (robiłem wszystko jak za pierwszym razem, jedynie układ katalogów był inny) no i dostawałem error taki jak napisałem wyżej. Znalazłem rozwiązanie na SO: do pliku pom.xml musiałem dodać <failOnMissingWebXml>false</failOnMissingWebXml>. Nie mam pojęcia jednak co to oznacza i dlaczego nagle aplikacja uruchomiła się na serverze. Teraz za to dostaję błąd 404.

Co do javy: mam zainstalowaną javę 1.8, ale domyślnie w ustawieniach Tomcata miałem ustawione: Workbench default JRE. Zmieniłem teraz na JDK 1.8. Jednak przy JRE System Library nadal mam J2SE-1.5. Nie wiem jak to zmienić. Edit, już zmienione na 1.8.

web.xml:

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>DefaultServlet</servlet-name>
<servlet-class> org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DefaultServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

DefaultServlet-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<mvc:annotation-driven />
<context:component-scan base-package="com.packt.webstore" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
</beans>
1

Konfiguracja wygląda dobrze. Może użyj takiej struktury katalogów jak jest w książce. Przerzuć pliki xml oczko wyżej, tj. z WEB-INF/servlet do katalogu WEB-INF. Wydaje mi się, że o to chodzi.
I wywal z pom.xml to: <failonmissingwebxml>false</failonmissingwebxml>

0

Okej, działa, dziękuję. Czyli rozumiem, że pliki XML muszą zawsze być w WEB-INF (nad folderem z widokami) ? <failonmissingwebxml>false</failonmissingwebxml> też usunąłem, ale co on oznaczał ?

2

Powiem szczerze, że nie znam Springa na wylot, ale z tego co pamiętam to konfiguracja oparta o xml, wymaga tego, żeby takie pliki znajdowały się w odpowiednich miejscach w strukturze projektu. Przykładowo zmień sobie nazwę z WEB-INF na cokolwiek innego i zobacz jak zareaguje! Mam słabą pamięć, ale zdaje mi się, że projekt też Ci nie wypali, bo Spring nie znajdzie katalogu z "wpisaną" nazwą gdzie ma domyślnie szukać konfiguracji. Niestety, zdaje mi się, ale zobacz w dokumentacji Springa.
Jeśli chodzi o <failonmissingwebxml>false</failonmissingwebxml>, to (znowu) wydaje mi się, że w tym ustawieniu Spring ignoruje "istnienie" pliku web.xml, i daje odgórnie "domyślny" plik web.xml, czyli własną konfigurację. Czyli jak Ty go nie wskażesz, to on domyślny zapoda. Ale... to są moje domysły. Kieruję do dokumentacji. ;)
Postaraj się razem z robieniem przykładów z książki, czytać dokumentację Springa, wtedy najwięcej się dowiesz ;)

Polecam też, żebyś zapoznał się z przykładem jaki podała @karolinaa, czyli zbudowanie projektu ze strony http://start.spring.io/ i też przejrzyj to: https://spring.io/guides, niby dużo, ale jeśli szukasz czegoś konkretnego to się okaże, że mało :D

Cieszę się, że mogłem pomóc, miłego weekendu :)

1

Niech zacznie od xml'a. Jeden malutki projekt z tym mu nie zaszkodzi a będzie wiedział co oznaczają poszczególne adnotacje. A przynajmniej poczytaj o konfiguracji za pomocą xml. Teraz oczywiście lepiej uzywać adnotacji,z tym się zgodzę.
I nie zaczynaj od Spring Boot'a. Najpierw MVC, a potem idź na łatwiznę. Nie polecam też Spring DATA na początek. Użyj sobie Hibernate jako most między DB a Twoim programem.

1

web.xml powinien być "na wierzchu" w WEB-INF - /src/main/webapp/WEB-INF/web.xml

W ogóle używając Mavena warto pliki z konfiguracją przenieść z src/main/webapp/WEB-INF do src/main/resources , a zasoby testowe do src/test/resources

https://maven.apache.org/guides/introduction/introduction-to-the-standard-directory-layout.html

dzięki temu łatwo odwołać się do tych zasobów przez classpath , przykładowo u ciebie możesz w web.xml łatwo podać lokalizację twojego servletu:

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

możesz z tego elegancko skorzystać potem np. w testach ładując swoją konfigurację:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:dispatcher-servlet.xml")

albo przy imporcie, kiedy łączysz konfigurację w plikach .xml i .java:

@ImportResource("classpath:dispatcher-servlet.xml")

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