I have the following JSP form code:
<div class="col-lg-7">
<form action="FormServlet" method="post" id="contactForm" data-aos="fade-up" data-aos-delay="200">
<div class="row gy-4">
<div class="col-md-6">
<label for="nameInput" class="pb-2">Your Name</label>
<input type="text" name="userName" id="nameInput" class="form-control">
</div>
<div class="col-md-6">
<label for="emailInput" class="pb-2">Your Email</label>
<input type="email" class="form-control" name="userEmail" id="emailInput">
</div>
<div class="col-md-12">
<label for="subjectInput" class="pb-2">Subject</label>
<input type="text" class="form-control" name="messageSubject" id="subjectInput">
</div>
<div class="col-md-12">
<label for="messageInput" class="pb-2">Message</label>
<textarea class="form-control" name="userMessage" rows="10" id="messageInput"></textarea>
</div>
<div class="col-md-12 text-center">
<div class="loading">Loading</div>
<div class="errorMessage"></div>
<div class="sentMessage">Your message has been sent. Thank you!</div>
<button type="submit">Send Message</button>
</div>
</div>
</form>
</div>
And this is the related JavaScript code included in my JSP:
document.getElementById('contactForm').addEventListener('submit', function (event) {
event.preventDefault(); // Stop the form from submitting by default
const form = this; // Reference the form
const formData = new FormData(form); // Create a FormData object
const actionUrl = form.action; // Action URL for form submission
fetch(actionUrl, {
method: 'POST',
body: formData,
})
.then(response => response.ok)
.then(result => {
console.log(result); // Process the response
form.querySelector('.sentMessage').classList.add('d-block');
})
.catch(error => {
console.error('Submission error:', error);
});
});
The corresponding servlet code is as follows:
package com.example.controller;
import java.io.IOException;
import java.io.PrintWriter;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class ContactServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String firstName = request.getParameter("userName");
System.out.println(firstName);
if (firstName == null || firstName.isEmpty()) {
response.getWriter().println("Name is required.");
return;
}
PrintWriter out = response.getWriter();
out.println("OK");
}
}
When I remove the JavaScript, the form submits properly to the servlet and I can retrieve the name using request.getParameter("userName");. However, when I include the JavaScript, the console prints null instead.