I have mapped the servlet correctly.. but still getting 404 error. Couldn't figure out the mistake.
I have been trying to fetch json data from an api and store the data into mysql table when the user clicks the "Insert Data into table" button. I have been doing it in the terminal(not using any IDE). the url was going perfectly as i expect, but results in 404. trying it to figure out the mistake for past 3 hours...:(!
//this is my java file
package com.kalyan;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InsertData extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException{
fetchEmployeeData();
res.setContentType("text/plain");
PrintWriter message = res.getWriter();
message.println("Data inserted in Table");
}
public void fetchEmployeeData() {
try {
URL url = new URL("https://api.slingacademy.com/v1/sample-data/files/employees.json");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode());
}
BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
String output;
StringBuilder responseBuilder = new StringBuilder();
while ((output = br.readLine()) != null) {
responseBuilder.append(output);
}
conn.disconnect();
String jsonResponse = responseBuilder.toString();
JSONObject jsonObject = new JSONObject(jsonResponse);
JSONArray employees = jsonObject.getJSONArray("employees");
insertEmployeesIntoDB(employees);
} catch (IOException e) {
e.printStackTrace();
}
}
public void insertEmployeesIntoDB(JSONArray employees) {
try (
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/Employees", "myusername", "mypassword")) {
for (int i = 0; i < employees.length(); i++) {
JSONObject employee = employees.getJSONObject(i);
int id = employee.getInt("id");
String firstName = employee.getString("first_name");
String lastName = employee.getString("last_name");
int age = employee.getInt("age");
String gender = employee.getString("gender");
String email = employee.getString("email");
String phone = employee.getString("phone");
String department = employee.getString("department");
String jobTitle = employee.getString("job_title");
int yearsOfExperience = employee.getInt("years_of_experience");
int salary = employee.getInt("salary");
String sql = "insert into employees (id, first_name, last_name, age, gender, email, phone, department, job_title, years_of_experience, salary) "
+ "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setInt(1, id);
stmt.setString(2, firstName);
stmt.setString(3, lastName);
stmt.setInt(4, age);
stmt.setString(5, gender);
stmt.setString(6, email);
stmt.setString(7, phone);
stmt.setString(8, department);
stmt.setString(9, jobTitle);
stmt.setInt(10, yearsOfExperience);
stmt.setInt(11, salary);
stmt.executeUpdate();
}
System.out.println("Table inserted");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
>! this is my html file
<!DOCTYPE html>
<html>
<head>
<title>Make-Request </title>
</head>
<body>
<button onclick="insertData()">Insert Data into table</button>
<h1 id="message"></h1>
</body>
<script>
function insertData() {
fetch('storedata')
.then(response => response.text())
.then(data => showMessage(data))
.catch(error => console.error(error));
}
function showMessage(data){
document.querySelector('#message').textContent = `${data}`;
}
</script>
</html>
>! this is my web.xml file
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<display-name>InsertData</display-name>
<servlet>
<servlet-name>InsertData</servlet-name>
<servlet-class>com.kalyan.InsertData</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>InsertData</servlet-name>
<url-pattern>/storedata</url-pattern>
</servlet-mapping>
</web-app>