Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Ajax ve springu - nefunguje mi hello world

Ahoj, nefunguje mi hello world, mohl by mi někdo poradit?

Servlet:

import javax.servlet.http.HttpServlet;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class SomeController {

    @RequestMapping(value = "/profile", method = RequestMethod.GET)
    public @ResponseBody
    String processAJAXRequest(
            @RequestParam("firstname") String firstname,
            @RequestParam("lastname") String lastname) {
        String response = "HELLO: " + firstname + " " + lastname;
        return response;
    }
}

Html stránka:

<html>
    <head>
        <title>TODO supply a title</title>
        <meta charset="windows-1250">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    </head>
    <body>
        <form id="sampleForm" method="post" action="/profile">
            <div>
                <input type="text" name="firstname" id="firstname">
            </div>
            <div>
                <input type="text" name="lastname" id="lastname">
            </div>
            <div>
                <button type="submit" name="submit">Submit</button>
            </div>
        </form>
        <script>

            $(document).ready(function () {
                $('#sampleForm').submit(
                        function (event) {
                            var firstname = $('#firstname').val();
                            var lastname = $('#lastname').val();
                            var data = 'firstname='
                                    + encodeURIComponent(firstname)
                                    + '&lastname='
                                    + encodeURIComponent(lastname);
                            $.ajax({
                                url: $("#sampleForm").attr("action"),
                                data: data,
                                type: "GET",
                                success: function (response) {
                                    alert(response);
                                },
                                error: function (xhr, status, error) {
                                    alert(xhr.responseText);
                                }
                            });
                            return false;
                        });
            });

        </script>
    </body>
</html>

Když to pustím dostanu 404. V čem je problém?

Dělám něco špatně? Děkuji za rady.

Předmět Autor Datum
A kdyz vlezes na tu url primo, tak to neco vypise? url_tvoji_app/profile
MaSo 27.07.2016 11:33
MaSo
Ne, jen zase 404.
MašinkaTomáš 27.07.2016 11:39
MašinkaTomáš
Inspiruj se tady: https://github.com/masodj/openkarvina-data-service s
MaSo 27.07.2016 11:39
MaSo
Díky, ještě bych se rád zeptal, co říkáš na řešení: Vytvořím dva servlety: A a B. Servlet A bude o…
MašinkaTomáš 27.07.2016 11:56
MašinkaTomáš
Nejak moc nechapu ceho chces dosahnout, zkus to lepe popsat. Asi nechces tvorit serlvety, ale contro…
MaSo 27.07.2016 12:13
MaSo
Hodiny jsem chtěl jen jako hello world :-) Chci mít stránku, na které uživatel nahraje soubor a zůs…
MašinkaTomáš 27.07.2016 12:20
MašinkaTomáš
Tak vystav nejaky Controller, ktery bude vracet stav te ulohy a ten treba kazdych 10 sekund z javasc…
MaSo 27.07.2016 12:31
MaSo
Dobře díky, tak nějak jsem to měl v plánu, na ty sockety se podivam.
MašinkaTomáš 27.07.2016 12:35
MašinkaTomáš
Jen tak pro info, když mluvíš že spring nemá servlety, ve škole nás učili že springovskej servlet vy…
MašinkaTomáš 27.07.2016 13:09
MašinkaTomáš
Ve Springu muzes samozrejme psat i Servlety ale prijde mi to jako nesmysl pac tam mas SpringMVC, kte… poslední
MaSo 27.07.2016 13:39
MaSo

Díky, ještě bych se rád zeptal, co říkáš na řešení:

Vytvořím dva servlety: A a B.

Servlet A bude obsahovat ajax, který každou sekundu bude tahat data ze servletu B a cpát je na výstup. Servlet B bude vypisovat aktuální čas.

Potom když A poběží ve smyčce, může výstup vypadat:

11:55:09
11:55:08
11:55:07
11:55:06
11:55:05
11:55:04
11:55:03
11:55:02
11:55:01

A nebo je to hodně špatné řešení?

Na git mrknu večer, dík :-)

Nejak moc nechapu ceho chces dosahnout, zkus to lepe popsat. Asi nechces tvorit serlvety, ale controllery, pac Spring vystavuje DispatcherServlet a ty pises uz jen Controllery.

Pokud chces realizovat hodiny, tak je to hodne spatne reseni. Nepotrebujes prece dva Controllery, staci jeden, ktery vraci serverovy cas, a ten budes volat AJAXem z JS pres fci setInterval kazdou sekundu a updatovat UI. Ale prijde mi to jako funkcionalita k nicemu...

Hodiny jsem chtěl jen jako hello world :-)

Chci mít stránku, na které uživatel nahraje soubor a zůstane na stránce. Server bude soubor různě parsovat a hrát si s ním, což bude chvilku trvat, chci uživateli zobrazit na té stránce jednotlivé kroky, co právě server dělá se souborem.

Příklad:

12:19:10 - Hotovo
12:19:07 - Hledám data
12:19:05 - Čtu soubor
12:19:02 - Soubor rozbalen
12:19:00 - Nahrán soubor

Jen to bude trošku delší.

Jen tak pro info, když mluvíš že spring nemá servlety, ve škole nás učili že springovskej servlet vypadá:

public abstract class AbstractServlet extends HttpServlet {

    private static final String MESSAGE_HEADER_ATTRIBUTE = "messageheader";
    private static final String MESSAGE_ATTRIBUTE = "message";

    protected AutowireCapableBeanFactory ctx;
    protected String jspFullPath;

    abstract void initJspFullPath();

    public AbstractServlet() {
        initJspFullPath();
    }

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        WebApplicationContext context = WebApplicationContextUtils
                .getWebApplicationContext(getServletContext());
        ctx = context.getAutowireCapableBeanFactory();
        ctx.autowireBean(this);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.getRequestDispatcher(jspFullPath).forward(req,  resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        dispatchMessage("Acces denied", "Here, you should not be.", req, resp);
    }

    protected void dispatchMessage(String messageheader, String message, HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setAttribute(MESSAGE_HEADER_ATTRIBUTE, messageheader);
        req.setAttribute(MESSAGE_ATTRIBUTE, message);
        req.getRequestDispatcher("/WEB-INF/pages/message.j sp").forward(req, resp);
    }
}

A od něj dědí:

@WebServlet("/home")
public class UnloginHome extends AbstractServlet {

    @Override
    void initJspFullPath() {
        jspFullPath = "/WEB-INF/pages/unlogin/home.jsp";
    }
}

To není springovský servlet? (CONTROLER - jak říkáš?)

Edit full zdrojáky: https://github.com/danekja/pia-labs/tree/master/ex ample-app-spring

Zpět do poradny Odpovědět na původní otázku Nahoru