• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Nie wyszukuje pliku resources? Próba wyświetlenia obrazka z folderu - SPRING

0 głosów
65 wizyt
pytanie zadane 9 października 2018 w Java przez must Bywalec (2,770 p.)
edycja 9 października 2018 przez must

Cześć. Chciałbym wyświetlić obrazek z folderu recources/images. 

Dodałem 

<mvc:resources location="/resources/" mapping="/resource/**"/>

do pliku konfiguracyjnego.

Tak wygląda mój pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>com.packt</groupId>
    <artifactId>webstore</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.0.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <warSourceDirectory>webapp</warSourceDirectory>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Hierarchia folderów wygląda tak: 

Gdy wpisuje: http://localhost:8080/resource/images/P1234.png

Wywala mi po prostu błąd: 

09-Oct-2018 09:37:01.219 WARNING [http-nio-8080-exec-9] org.springframework.web.servlet.DispatcherServlet.noHandlerFound No mapping found for HTTP request with URI [/resource/images/P1234.png] in DispatcherServlet with name 'DefaultServlet'

Wiecie co powinienem poprawić? Próbowałem już kilka konfiguracji lokacji folderu ze zdjęciami ale ze skutkiem marnym.

1 odpowiedź

+1 głos
odpowiedź 9 października 2018 przez mbabane Maniak (63,760 p.)
wybrane 9 października 2018 przez must
 
Najlepsza

Dzieje się tak, ponieważ DsipatcherServlet domyślnie wszystkie żądania próbuje powiązać z metodą kontrolera i nie wie że stosując P1234.png odwołujesz się do statycznego pliku.

W xml w konfiguracji trzeba zdaje się dodać coś takiego:

 <mvc:default-servlet-handler/>

Na marginesie, ucz się konfiguracji Springa w Javie nie w XML.

A zdjęcia, które mają być dostępne z przeglądarki, raczej należy umieszczać w WEB-INF niż w src.

Jedna rzecz jeszcze. Powiedz czy Ty coś widzisz na tym screenie bo ja nic, można przecież wkleić kod konfiguracji w bloki code, a do hierarchii wstawić mały obrazek z samym panelem bocznym intellij'a).

komentarz 9 października 2018 przez mbabane Maniak (63,760 p.)
A czy jest coś innego napisane (merytorycznie)?
komentarz 9 października 2018 przez Wiciorny Maniak (66,600 p.)

no ty mu sugerujesz  blad w konfiguracji pakietowow i zależności, a nie po prostu sugerujesz napisac KLASE- do obslugi zapytania URL... co wystarcza w tym wypadku , a nie rozumiem co masz na mysli "merytorycznie" 

też jak sie mam czepiac to nie merytoryczne jest  stwierdzenie 

 DsipatcherServlet domyślnie wszystkie żądania próbuje powiązać z metodą kontrolera

z metodami, on wysyla je do kontenera- który przechowuje wszystkie controlery aplikacji, a kolega chyba tego controlera nie ma po prostu :) wiec zadanie  do kontrolera DS trafia ale dalej nie ma jak byc pokierowane do obslugi 

 

Na marginesie, ucz się konfiguracji Springa w Javie nie w XML.

 zależy komu i co jest potrzebne, ale z góry nie mozesz zakladac ze konfiguracja w XML JEST PASE i sie nie powinno jej uczyc :) 

komentarz 9 października 2018 przez mbabane Maniak (63,760 p.)

Czy Ty wiesz na czym w ogóle polega ten błąd? Mam wrażenie, że nie wiesz o co tutaj chodzi.

Chodzi o to że tak jak piszesz, domyślnie DS żądanie przekierowuje do klasy kontrolera. Natomiast jeśli chcesz się odwołać do statycznego zasobu np. własnie obrazu to DS również próbuje np. adres:

http://localhost:8080/resource/images/P1234.png

zamienić na (niedosłownie oczywiście):

@Controller
public class Controller
{
       @GetMapping("/resource/images/P1234.png")
         public String method()
          {
              return "cosTam"
          }
}

Chodzi o to że po pierwsze nie ma takiego kontrolera (czy to z mapowanego URL), a po drugie nie taki jest cel tego żądania. Celem jest pobranie statycznego obrazu z zadanej lokalizacji.

Dlatego wymagana jest dodatkowa konfiguracja, która zapobiega przekierowywaniu wszystkiego do klas kontrolerów. W Javie robi się to tak (nadpisując metodę interfejsu WebMvcConfigurer):

@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    configurer.enable();
}

w XML tak:

<mvc:default-servlet-handler/>

Dodatkowo, jest jeszcze kwestia mapowania adresu na odpowiedni zasób. Trzeba zatem zmapować URL na zasób w tym przypadku tak:

<mvc:resources mapping="/resources/**" location="classpath:/resources/images/"/>

Gdy się tego nie zrobi to zwróci 404 bo nie znajdzie zasobu.

 

Gdybyś zrobił to poprzez kontroler czyli np. tak:

@Controller
public class Controller
{
       @GetMapping("/resource/images/P1234.png")
         public String method()
          {
              return "/resource/images/P1234.png"; //pomijając już fakt że jest to resources
          }
}

To już kłopotliwe może być zwrócenie samego obrazu png trzeba to chyba zwracać jako tablicę bajtów (ale tutaj nie wiem dokładnie), a po drugie to ViewResolver zrobi robotę, bo zwracając zasób dodaje przed adres prefix i suffix. I druga rzecz powodzenia jeśli na serwerze jest więcej statycznej treści i każdą z osobna mapować w kontrolerze...

komentarz 9 października 2018 przez must Bywalec (2,770 p.)

Dokłądnie tak jak mbabane mówi.

Niestety nie podziałało dodanie 

location="classpath:/resources/images/

Spróbowałem stworzyć folder resources w WEB-INF tak jak mówiłeś, czyli linijka wyglądała by tak:

<mvc:resources location="/resources/" mapping="/resource/**"/>

Zniknęło "message", natomiast błąd ten sam.

Dodam, że w konsoli nie ma napisanego błędu, że nie ma mapowania.

komentarz 9 października 2018 przez mbabane Maniak (63,760 p.)

jeśli w WEB-INF to w location zdaje się też musi być on uwzględniony:

<mvc:resources location="/WEB-INF/resources/"

Podobne pytania

+1 głos
0 odpowiedzi 72 wizyt
0 głosów
0 odpowiedzi 128 wizyt
pytanie zadane 10 maja 2018 w Java przez m_rience Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 64 wizyt
pytanie zadane 3 sierpnia 2017 w Java przez Jonki Dyskutant (8,220 p.)
Porady nie od parady
Zadając pytanie postaraj się o szczegółowe opisanie problemu oraz udostępnienie wszystkich istotnych informacji (kody źródłowe, zrzuty ekranu itp.).Opisanie problemu

60,274 zapytań

105,971 odpowiedzi

220,187 komentarzy

32,477 pasjonatów

Przeglądających: 241
Pasjonatów: 12 Gości: 229

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...