-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStarsServlet.java
executable file
·151 lines (114 loc) · 5.22 KB
/
StarsServlet.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
package main.java;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import jakarta.servlet.ServletConfig;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
// Declaring a WebServlet called StarsServlet, which maps to url "/api/stars"
@WebServlet(name = "StarsServlet", urlPatterns = "/api/stars")
public class StarsServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
// Create a dataSource which registered in web.
private DataSource dataSource;
public void init(ServletConfig config) {
try {
dataSource = (DataSource) new InitialContext().lookup("java:comp/env/master");
} catch (NamingException e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/json"); // Response mime type
// Output stream to STDOUT
PrintWriter out = response.getWriter();
// Get a connection from dataSource and let resource manager close the connection after usage.
try (Connection conn = dataSource.getConnection()) {
// Declare our statement
Statement statement = conn.createStatement();
String query = "SELECT * from stars";
// Perform the query
ResultSet rs = statement.executeQuery(query);
JsonArray jsonArray = new JsonArray();
// Iterate through each row of rs
while (rs.next()) {
String star_id = rs.getString("id");
String star_name = rs.getString("name");
String star_dob = rs.getString("birthYear");
// Create a JsonObject based on the data we retrieve from rs
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("star_id", star_id);
jsonObject.addProperty("star_name", star_name);
jsonObject.addProperty("star_dob", star_dob);
jsonArray.add(jsonObject);
}
rs.close();
statement.close();
// Log to localhost log
request.getServletContext().log("getting " + jsonArray.size() + " results");
// Write JSON string to output
out.write(jsonArray.toString());
// Set response status to 200 (OK)
response.setStatus(200);
} catch (Exception e) {
// Write error message JSON object to output
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("errorMessage", e.getMessage());
out.write(jsonObject.toString());
// Set response status to 500 (Internal Server Error)
response.setStatus(500);
} finally {
out.close();
}
// Always remember to close db connection after usage. Here it's done by try-with-resources
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.setContentType("application/json");
PrintWriter out = response.getWriter();
try (Connection conn = dataSource.getConnection()) {
String starName = request.getParameter("star");
String birthYear = request.getParameter("birth");
String starIdQuery = "SELECT max(stars.id) FROM stars";
PreparedStatement starIdStatement = conn.prepareStatement(starIdQuery);
ResultSet starIdRS = starIdStatement.executeQuery();
starIdRS.next();
String maxId = starIdRS.getString("max(stars.id)");
int maxIdNum = Integer.parseInt(maxId.replaceAll("\\D+", ""));
int uniqueIdNum = maxIdNum + 1;
String starId = "nm" + uniqueIdNum;
String starInsert = "INSERT INTO stars (id, name, birthYear) VALUES(?, ?, ?)";
PreparedStatement starInsertStatement = conn.prepareStatement(starInsert);
starInsertStatement.setString(1, starId);
starInsertStatement.setString(2, starName);
if (!birthYear.isEmpty()) {
starInsertStatement.setInt(3, Integer.parseInt(birthYear));
} else {
starInsertStatement.setNull(3, Types.INTEGER);
}
starInsertStatement.execute();
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("id", starId);
out.write(jsonObject.toString());
}
catch (Exception e) {
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("errorMessage", e.getMessage());
out.write(jsonObject.toString());
request.getServletContext().log("Error:", e);
response.setStatus(500);
}
finally {
out.close();
}
}
}