• 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
63 wizyt
pytanie zadane 9 października w Java przez must Bywalec (2,720 p.)
edycja 9 października 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 przez mbabane Maniak (57,520 p.)
wybrane 9 października 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 przez mbabane Maniak (57,520 p.)
A czy jest coś innego napisane (merytorycznie)?
komentarz 9 października przez Wiciorny Maniak (66,200 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 przez mbabane Maniak (57,520 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 przez must Bywalec (2,720 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 przez mbabane Maniak (57,520 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 67 wizyt
0 głosów
0 odpowiedzi 110 wizyt
pytanie zadane 10 maja w Java przez m_rience Nowicjusz (120 p.)
0 głosów
0 odpowiedzi 60 wizyt
pytanie zadane 3 sierpnia 2017 w Java przez Jonki Dyskutant (8,220 p.)
Porady nie od parady
Wynikowy wygląd pytania, odpowiedzi czy komentarza, różni się od tego zaprezentowanego w edytorze postów. Stosuj więc funkcję Podgląd posta znajdującą się pod edytorem, aby upewnić się, czy na pewno ostateczny rezultat ci odpowiada.Podgląd posta

57,748 zapytań

102,788 odpowiedzi

212,076 komentarzy

29,694 pasjonatów

Przeglądających: 312
Pasjonatów: 15 Gości: 297

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.

...