Почему не работает отправка AJAX запроса c JS на сервлет Java?

Пытаюсь отправить JSON со страницы JS через обьект XMLHttpRequest(AJAX запрос) на сервлет Java, методом POST. Проблема в том - что запрос не приходит на сервер, не могу найти хорошую статью (главное АКТУАЛЬНУЮ) что бы почитать как отправлять, много где встречаются различные варианты отправки, путаница в голове. Подскажите в чём проблема ? Что я делаю не так?

function sendDataForm(user){
    let json = JSON.stringify(user);
    console.log(json); 
    let xhr = new XMLHttpRequest();

    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
    
            if (xhr.status == 200 || xhr.status == 304) {
                console.log("OK"); 
            } else {
                alert("ERROR");
            }
    
        }
    }

    // xhr.responseType = "text";
    xhr.open("POST", "/mainservlet", true); 
    xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    xhr.send(json);
}
<section  id="sectionRegistration">
			<form id="formRegistration">
				<div class="paragraphForm">
					<label for="name"> Name: </label>
					<input type="text" name="name" id="name" class="field"><br>	
				</div>
				
				<div class="paragraphForm">
					<label for="middleName">Middle name:</label>
					<input type="text" name="middleName" id="middleName" class="field">
				</div>

				<p class="paragraphForm">
					<label for="lastName">Last name:</label>
					<input type="text" name="lastName" id="lastName" class="field">
				</p>

				<p class="paragraphForm">
					<label for="login">Desired Login:</label>
					<input type="text" name="login" id="login" class="field">
				</p>

				<p class="paragraphForm">
					<label for="password">Desired Password:</label>
					<input type="password" name="password" id="password" class="field">
				</p>

				<p class="paragraphForm">
					<label for="repeatPassword">REPEAT Password:</label>
					<input type="password" name="repeatPassword" id="repeatPassword" class="field">
				</p>

				<p class="paragraphForm">
					<label for="email">Email:</label>
					<input type="email" name="email" id="email" class="field">
				</p>

				<p class="paragraphForm">
					Role:
					<label for="roleOwner"> OWNER </label>
					<input type="radio" name="role" value="owner" id="roleOwner" class="fieldRadio field">

					<label for="roleForester"> FORESTER </label>
					<input type="radio" name="role" value="forester" id="roleForester" checked class="fieldRadio field">
				</p>

			</form>

			<!--ОТПРАВИТЬ-->
			<input class="buttonSend" type="submit" name="sendForm" value="Send >" id="registerButton">
			<!--НАЗАД-->
			<div class="buttonBack"><a href="systemPark.html"> Return Back </a></div>

			<!--DIV с ошибками из формы-->
			<div id="divWithErrors"></div>

		</section>


Ответы (2 шт):

Автор решения: IvaMuxa

не думаю что в этом причина, но заголовок у вас отправлен не верный

xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

правильно будет

xhr.setRequestHeader("Content-type", "application/json");

попробуйте указать полный путь, если 404 то путь к сервлету указан не верно

→ Ссылка
Автор решения: iCoer

Только сейчас понял что не учёл артефакт, в котором дописал /systempark. Следовательно нужно было обращаться как:

xhr.open("POST", "/systempark/mainservlet", true);

Забыл я совсем про него. Cпасибо тем, кто откликнулся)

→ Ссылка