@OneDeus

Как к java EE прикрутить ReactJS?

Возникла проблема с подключением к http серверу подключить ReactJS (статей по этому поводу я не нашёл, если знаете скиньте пожалуйста).
подобным способом я прикрутил html, но как прикрутить ReactJS без малейшего понятия.

public static void main(String[] args) throws Exception {
        HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0)
                .createContext("/test", new Handler("/test", ".../auth-java-ee-react-app/src/main/java/index.html")).getServer();
        server.setExecutor(null) ;
        server.start();
    }


public class Handler implements HttpHandler {

    private final String routePath;
    private final String fsPath;

    private final Map<String, String> headers = new HashMap<>() {{
        put("html", "text/html");
    }};

    public Handler(String path, String fileSystemPath) {
        routePath = path;
        fsPath = fileSystemPath;
    }

    @Override
    public void handle(HttpExchange http) throws IOException {
        OutputStream outputStream = http.getResponseBody();
        http.getRequestBody();
        String request = http.getRequestURI().getRawPath();
        byte[] result;
        int code;
        try {
            try {
                String path = fsPath + request.substring(routePath.length());
                System.out.println("requested: " + path);
                result = read(new FileInputStream(path)).toByteArray();
                String ext = request.substring(request.lastIndexOf(".") + 1);
                if (headers.containsKey(ext))
                    http.getResponseHeaders().add("Content-Type", headers.get(ext));
                code = 200;
            } catch (IOException e) {
                result = (404 + " " + request).getBytes();
                code = 404;
            }

        } catch (Exception e) {
            StringWriter sw = new StringWriter();
            e.printStackTrace(new PrintWriter(sw));
            result = sw.getBuffer().toString().getBytes();
            code = 500;
        }

        http.sendResponseHeaders(code, result.length);
        outputStream.write(result);
        outputStream.close();
    }

    static ByteArrayOutputStream read(InputStream is) throws IOException {
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        int nRead;
        byte[] data = new byte[1024];
        while ((nRead = is.read(data, 0, data.length)) != -1) {
            buffer.write(data, 0, nRead);
        }
        buffer.flush();
        return buffer;
    }
}
  • Вопрос задан
  • 115 просмотров
Решения вопроса 3
xez
@xez Куратор тега Java
Senior Junior Roo
Надо понимать, прежде всего, что у вас два приложения. Одно на js (фронт), второе на java (бэк).

Варианта 2:
1. Думать как собирать приложение на реакте, и результат подкладывать в ресуры, которые обслуживает ваш сервер (томкат или что там у вас..).
2. Отдельно деплоить приложение на джаве и отдельно на реакте. Как по мне этот способ - лучше.
Ответ написан
Комментировать
@siarheiblr
Тут вопрос, что вы имеете в виду под «прикрутить».
Сервер на Джаве обычно используется как источник данных для приложения с реактом. На джаве пишете код, который общается с базой, обсчитывает данные и в конце отдает результат в формате, который понимает веб-приложение на реакте (json или xml). Почитайте про такое понятие как REST и для чего он используется.
Если вы хотите, чтобы на сервере все рендерилось и возвращалось уже готовое то вам тут реакт вряд-ли подойдёт. Для этого есть специальные фреймворки типа JSF ну или на jsp можно что-то простенькое наваять, но так уже давно никто не делает :)
Ответ написан
azerphoenix
@azerphoenix Куратор тега Java
Java Software Engineer
Добрый день.
TL:DR - никак.
ReactJS, также как и другой фреймворк является отдельным приложением и никак не связан с бэком. Это вам не шаблонизаторы наподобие thymeleaf и т.д.
Соответственно, На отдельном порту запускается Java, а на отдельном ReactJS. Если ReactJS необязателен, то можете глянуть на Vaadin. https://vaadin.com/
https://habr.com/ru/company/xakep/blog/244477/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы