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

Controller nie wywołuje mi strony

VPS Starter Arubacloud
0 głosów
1,484 wizyt
pytanie zadane 26 marca 2017 w Java przez Jonki Dyskutant (8,180 p.)

Posiadam w resources w folderze templates folder login.html. Chciałbym tą stronę wywołać metodą w kontrolerze

@ResponseBody
    @RequestMapping(value = "login", method = RequestMethod.GET)
    public String company() {
        return "login";
    }

jednak zamiast wywołać stronę, to wypisuje mi na stronie tekst "login".

komentarz 26 marca 2017 przez Maniti Obywatel (1,220 p.)

3 odpowiedzi

0 głosów
odpowiedź 26 marca 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Adonotacja @ResponseBody powoduje że zwracany jest string login zamiast strony.
komentarz 26 marca 2017 przez Jonki Dyskutant (8,180 p.)

Zmieniłem na 

@RestController
public class Company {

    @RequestMapping(value = "login", method = RequestMethod.GET)
    public String company() {
        return "login";
    }
}

i dalej to samo.

komentarz 26 marca 2017 przez Mateusz51 Nałogowiec (28,180 p.)
Masz restcontroller. Jesli chcesz aby zwracal ci strone zmien na zwykly controller.

Api restowe nie zwraca danych w formie pliku html.
komentarz 26 marca 2017 przez Jonki Dyskutant (8,180 p.)

Doszedłem do momentu, gdy mam 

@Controller
public class Company {
 
    @RequestMapping("login")
    public ModelAndView company(ModelAndView model) {
        model.addObject("login");
        return model;
    }
}

i przy próbie wejścia pod ten adres wywalą wyjątek

javax.servlet.ServletException: Circular view path [login]: would dispatch back to the current handler URL [/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

 

0 głosów
odpowiedź 26 marca 2017 przez Jonki Dyskutant (8,180 p.)

Doszedłem do momentu, gdy mam 

@Controller
public class Company {
 
    @RequestMapping("login")
    public ModelAndView company(ModelAndView model) {
        model.addObject("login");
        return model;
    }
}

i przy próbie wejścia pod ten adres wywalą wyjątek

javax.servlet.ServletException: Circular view path [login]: would dispatch back to the current handler URL [/login] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.
komentarz 27 marca 2017 przez ShiroUmizake Nałogowiec (46,300 p.)
Czy miałeś w ogóle do czynienia serveletami?

Jeżeli nie to bięgnę z pomocą:

Controler nie serwuje treści, controler mówi co ma się stać (mówiąc prościej odpowiada za logikę typowo "ruchową" do odpowiednich serveletów)

Servelet, jest "wątkiem webowym" rozszerzanym o klasę httpServlet, obsługiwanym po przez Server. To on odpowiada za widok odpowiadając na request oraz response.

Błąd jasno ci wskazuje, że nie może znależć serveletu do którego ma wskazać Controler...
0 głosów
odpowiedź 27 marca 2017 przez K0XM4N Gaduła (3,640 p.)

Zacznijmy od początku. 

Aby w springu MVC zwrócić stronę po wejściu na dany adres musisz rozróżnić kilka adnotacji i to w jaki sposób działa sam spring.
Gdy definujesz sobie klasę kontrolera może ona zawierać adnotacje @Controller lub @RestController.
Adnotacja @Controller pozwoli Ci manipulować widokami, czyli efekt który chcesz uzyskać. Gdzieś tam niżej zdefiniowałeś sobie @RestController i jak Mateusz51 wspomniał jest to kontroller RESTowy. Co to znaczy? TO znaczy, ze zwracasz dane z metody kontrolera, a nie widoki. Poczytaj sobie o RESTcie, na pewno Ci się przyda gdy będziesz pisać aplikacje w springu.

Idąc dalej. @RequestBody nad metodą mówi springowi: hej! teraz chce zebyś zwracała mi dane, a nie jakieś widoki.
 

By otrzymać widok z konkretnej metody w kontrolerze musisz:

  • zadeklarować odpowiedni mapping na tą metode (czyli adres URL) czyli: @RequestMapping("/login")
    i wtedy wchodzisz na ten adres. Jeśli chesz otrzymać stronę to powinieneś użyć @GetMapping. Wtedy od razu określasz typ metody HTTP jako: GET
  • zwrócić String, który odpowiada nazwie twojego widoku html, jsp etc.

Dlaczego tak? Zachodzi wtedy taka komunikacja:

Controller -> View Resolver -> Model

Tak w skrócie to:
Kontroler wysyła stringa do view resolvera. Następnie view resolver rozpoznaje stringa i kojarzy go z stroną html, zwraca widok i przesyła go dalej do modelu. W tym momencie model generuje Ci konkretny widok. 

komentarz 27 marca 2017 przez Jonki Dyskutant (8,180 p.)

Mam teraz

@Controller
public class Company {
 
    @RequestMapping("/login")
    public ModelAndView company() {
        return new ModelAndView("login");
    }
}

a mimo to https://zapodaj.net/d0924bcd48762.png.html

komentarz 27 marca 2017 przez K0XM4N Gaduła (3,640 p.)
edycja 27 marca 2017 przez K0XM4N

@Controller

public class Company {

  

    @RequestMapping("/login")

    public ModelAndView company() {

        return new ModelAndView("login");

    }

}

Popatrz na typy. Potrzebujesz zwrócić w metodzie Stringa.

 

@Controller
public class Company {
  
    @RequestMapping("/login")
    public String company() {
        return "login";
    }
}

 

Podobne pytania

0 głosów
0 odpowiedzi 199 wizyt
pytanie zadane 3 marca 2019 w Java przez must Bywalec (2,980 p.)
0 głosów
1 odpowiedź 227 wizyt
pytanie zadane 3 marca 2019 w Java przez must Bywalec (2,980 p.)
0 głosów
0 odpowiedzi 254 wizyt
pytanie zadane 26 listopada 2018 w Nasze projekty przez mycha Nowicjusz (140 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...