Не удается отправить файл jquery javascript с помощью обработчика Jetty - PullRequest
0 голосов
/ 10 марта 2019

Я пытаюсь создать простое приложение со встроенным сервером Jetty, которое обслуживает статические файлы из каталога «templates». Этот каталог является подкаталогом корневого каталога проекта.

В этом каталоге я использую статический файл "hello.html", который содержит строку <script src="jquery-3.3.1.js"></script> для включения библиотеки jquery в мой проект.

Но когда я запускаю свой проект, я получаю сообщение из консоли браузера: «jquery-3.3.1.js: 1 Uncaught SyntaxError: Неожиданный токен <». Это произошло потому, что библиотека Jquery обслуживалась Jetty и возвращал текст html-страницы (см. Это в консоли браузера на вкладке сети). </p>

Как мне включить библиотеку jquery в мой проект?

HelloServer.java

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;

public class HelloServer {
    public static void main(String[] args) throws Exception
    {
        ContextHandler context = new ContextHandler();
        context.setContextPath("/hello");
        context.setHandler(new HelloServerHandler());

        Server server = new Server(8080);
        server.setHandler(context);

        server.start();
        server.join();
    }
}

HelloServerHandler.java

import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.handler.AbstractHandler;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServerHandler extends AbstractHandler {
    @Override
    public void handle(
            String target
            , Request baseRequest
            , HttpServletRequest request
            , HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println(HelloServerPageGenerator.instance().getPage("hello.html"));
    }
}

HelloServerPageGenerator.java

import java.io.File;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class HelloServerPageGenerator {
    private static HelloServerPageGenerator helloServerPageGenerator;
    private static final String HTML_DIR = "templates";

    public static HelloServerPageGenerator instance() {
        if (helloServerPageGenerator == null) {
            helloServerPageGenerator = new HelloServerPageGenerator();
        }
        return helloServerPageGenerator;
    }

    public String getPage(String filename) {
        String content = "";
        try {
            content = new String(Files.readAllBytes(Paths.get(HTML_DIR + File.separator + filename)), StandardCharsets.UTF_8);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return content;
    }

    public static void main(String[] args) {
        System.out.println(instance().getPage("hello.html"));
    }
}

hello.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Hello server</title>
    <script src="jquery-3.3.1.js"></script>
    <script type="text/javascript">
        setInterval(function () {
        window.location.reload(true);
        }, 1000);
    </script>
</head>

<body>
    <p>Hello server</p>
</body>
</html>

Ошибка: Окно с ошибкой

1 Ответ

0 голосов
/ 11 марта 2019

Ваш обработчик обслуживает только hello.html

Браузер запросил у вас 2 ресурса ...

  1. http://<machine>:<port>/hello/ -> Вы подали hello.html (это сработало, как и ожидалось)
  2. http://<machine>:<port>/hello/jquery-3.3.1.js -> Вы снова подали hello.html (это не сработало, как ожидалось)

Ваш обработчик не достаточно умен (пока), чтобы обслуживать jquery-3.3.1.js.

...