0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
|
||||||||||||||||
1 | ||||||||||||||||
Css и javascript не загружаются с простого java сервера19.10.2019, 21:36. Показов 2586. Ответов 10
Пишу простой многопоточный java сервер на сокетах и возникла ошибка. При обращении к серверу через браузер должна появиться html страница со стилями и javascriptом. Но css и js файлы не загружаются на страницу, хотя сервер отвечает на get запросы. В чем ошибка?
Возможно дело в ошибке "Загрузка <script> по адресу http://localhost:8080/javacod.js не удалась", но тогда куда надо кинуть файлы, чтобы они были в localhost? Браузер Firefox. Сам код. Поток для клиента
0
|
19.10.2019, 21:36 | |
Ответы с готовыми решениями:
10
LotusScript, Java, JavaScript, , HTML, CSS, SQL... Нужны ли javaScript /css/html /xml в java Ищу удаленную работу. C++, C#, VB.NET, PHP, Java, SQL, HTML, CSS, JavaScript Не загружаются изображения с сервера |
3639 / 2971 / 918
Регистрация: 05.07.2013
Сообщений: 14,220
|
|
19.10.2019, 21:58 | 2 |
0
|
4485 / 2720 / 485
Регистрация: 28.04.2012
Сообщений: 8,585
|
|
19.10.2019, 22:15 | 3 |
0
|
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
|
|
20.10.2019, 09:25 [ТС] | 4 |
0
|
Модератор
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,331
|
|
20.10.2019, 09:52 | 5 |
Первое что бросается в глаза так это создание ответа через одно место. Особенно заполнение поля Content length, нафига его заполнять "!" а потом менять? Да и это длинна в байтах только тушки а не всего ответа, заголовки туда не входят. И еще совет, может пригодится, не писать одновременно и заголовки и тушку, к примеру у меня были в таком случае проблемы с картинками. Помогло использование PrintWriter для заголовков и простой write (вот это точно не помню уже он или нет) для данных. Хотя может writeUTF от этого спасет.
Да и с мультипотоком будут проблемы. Читаемый файл может быть уже открыт в другом потоке что приведет к ошибке. Да и зачем на таком сервере мультипоток? И по орошему число потоков хоть както стоит ограничить, а то комп захлебнется.
1
|
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
|
|||||||||||
20.10.2019, 12:01 [ТС] | 6 | ||||||||||
Спасибо, за ответ! Напутал с расчетом длины сообщения, и почему-то два раза добавлял длину тела сообщения - s.length().
В итоге решил вообще длину не считать, тк если считать её с хедером, то css, js не работают, а если без хедера, то html файл показывается не весь. Пробовал разделить запись, но результат такой же как и с writeUtf, и точно так же помогает не указывать длину тела.
0
|
Модератор
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,331
|
|||||||||||
20.10.2019, 13:03 | 7 | ||||||||||
Сообщение было отмечено pragmatron1 как решение
Решение
Вот как я бы написал (с использованием вашего кода). У протокола http стандартный порт 80, а 8080 это альтернативный. В яве можно и в путях использовать / вместо \\, на винде тоже работает.
Добавлено через 1 минуту Только вот проверить не могу изза отсутствия css js файлов. И с портом 80 в адресе браузера можно писать просто localhost/javacode.js, без порта и протокола (по умолчанию http) Добавлено через 2 минуты Сам не использовал но для ограничения количества потоков можно опробовать вот это
Блин, это оказалась реализация человека данного класса используя средства явы. Вот пример сервера с пулом потоков, по сути оттуда можно вытащить нужное
1
|
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
|
|||||||||||
20.10.2019, 16:38 [ТС] | 8 | ||||||||||
Проверил, все работает. Как я понимаю запись бинарных файлов позволяет отправлять с сервера любые файлы, а не только тхт?
0
|
Модератор
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,331
|
|
20.10.2019, 17:42 | 9 |
Собственно данный способ разделения ответа был найден мной для своего сервера когда картинки в ответах приходили битыми. В ответ таким образом можно что угодно отправлять. Можете встроить картинку в сайт и посмотреть что выйдет.
И еще советую не скупиться на модификаторы доступа (вроде так зовутся) private и public. Поля классов лучше всегда делать приватными (а если нужно значение то создавать метод возвращающее поле или меняющее) а методы в зависимости от того что нужно, в данном случае все методы кроме run() лучше приватными сделать. Если класс называется так же как и файл то он должен быть пабликом, если в файле несколько классов то у других не нужен паблик (я сделал все в одной файле так как лень было 2 файла создавать, поэтому один класс паблик а второй нет). И для конструктора если всего один package то можно оставить так, если несколько то тоже нужен паблик. Это так, наблюдения из опыта. И зачем использовать 8080 порт вместо стандартного 80? Браузеры по умолчанию используют 80 порт для http и 443 порт для https, и если не указано то http. Чтение заголовков выглядит мягко говоря не очень. Я бы сделал так. Заголовки читать не надо, поэтому можно оставить чтение первой строчки. Потом проверить ее методом .startsWith("GET") (сейчас вне компа и дословно не помню имена, поэтому могут быть ошибки), начало по идее всегда заглавными. А потом сделать switch-case по .split(" ")[1] от первой строки запроса. Переделать сервер с http на https не сложно (сразу и то и то нельзя), если понадобится могу помочь. Там правда возникают проблемы с сертификатами. Приходится использовать самосозданный а на него ругается все что можно))) А нормальный стоит денег.
1
|
0 / 0 / 0
Регистрация: 19.10.2019
Сообщений: 5
|
||||||
20.10.2019, 18:48 [ТС] | 10 | |||||
Порт 8080 надо использовать по заданию, только и всего. А по заголовкам, я и так читаю только первую строчку
0
|
Модератор
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,331
|
|
20.10.2019, 19:32 | 11 |
Если в switch сделать ns.split(" ")[1] то в case можно проверять уже только адрес страницы без начала в виде типа запроса и окончания http это имхо удобнее. Еще для удобства можно сделать отдельный класс обрабатывающий запросы и генерирующий ответы.
Пост запрос это запрос с телом грубо говоря, в нем надо читать заголовки Content-Type Content-Length и после читать данные из тела длиной из заголовка которое идет после заголовков в том же потоке после \r\n\r\n. Вот тут с бинарниками помочь не смогу, я себе картинки на сервер гружу через json + base64 в виде текстовых данных. В гет запросах данные передаются в адресе грубо говоря, например /index.html?date=today&verify=true а в посте date и verify будут в теле (формат которого не регламентирован).
0
|
20.10.2019, 19:32 | |
20.10.2019, 19:32 | |
Помогаю со студенческими работами здесь
11
Получить данные, которые загружаются javascript-ом Java и javascript. Передать переменную из Java в Javascript Обновления java не загружаются Работа простого сервера с веб Написание простого ftp сервера Настройка простого DHCP сервера Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |