Я пытаюсь научиться использовать веб-сокеты. У меня есть файл с именем WebSocketClient.js, который я пытаюсь импортировать с тегом script
в моем файле .jsp. Вот JSP:
<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
<link rel = "stylesheet" href = "css/styles.css">
</head>
<body>
<h4>${roomHost}'s room</h4>
<ul id = "chat"></ul>
<form method = "post" action = "chat/${roomHost}" enctype = "application/x-www-form-urlencoded">
<input type = "text" name = "message">
<input type = "submit" value = "Send">
</form>
<script type = "text/javascript" src = "js/WebSocketClient.js"></script>
</body>
</html>
Когда я загружаю страницу в Chrome или Firefox, я получаю сообщение об ошибке Uncaught SyntaxError: Unexpected token <
, а когда я захожу в DevTools и просматриваю источники, я вижу, что загруженный файл WebSocketClient.js - это всего лишь копия файла .jsp, который он загружается из, а атрибут запроса roomHost
заменяется на путь к файлу javascript:
Это так странно, я никогда раньше такого не испытывал и ничего не могу найти в Интернете. WTF происходит ??
<%@ page language = "java" contentType = "text/html;
charset=ISO-8859-1" pageEncoding = "ISO-8859-1"%>
в начало JSP<!doctype>
на <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!doctype>
<script>
в <head>
src
Я знаю, что проблема не в файле js, потому что я могу загрузить его с index.jsp
(а не с room.jsp
). Раньше я разрабатывал веб-приложения на Java, и у меня никогда не было этой проблемы, я не могу понять, что ее вызывает.
На самом деле это файл JSP, а не файл HTML, и содержимое WebSocketClient.js представляет собой чистый JavaScript, но когда файл js загружается тегом сценария в JSP, его содержимое каким-то образом заменяется содержимым JSP.
Я понял, что было причиной. Страница находится на websockets-test/rooms/*
, поэтому он искал файл js в rooms/js/
, а не в каталоге js/
в папке webapp. Я изменил путь src
в теге script
с js/WebSocketClient.js
на /websockets-test/js/WebSocketClient.js
, и теперь он работает.
Ну ... это файл HTML, а не файл JavaScript.