package server.servlets;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
import java.util.Hashtable;
public class PhoneBook extends HttpServlet {
Connection connection = null;
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
Class.forName("org.gjt.mm.mysql.Driver");
} catch (ClassNotFoundException e) {
throw new ServletException(e.toString());
}
}
private void doOutput1(PrintWriter writer) {
writer.println(
"<HTML>\n" +
"<HEAD>\n" +
"<TITLE>Phone Book</TITLE>" +
"</HEAD>\n" +
"<BODY>\n" +
"<CENTER>\n" +
"<H1>Telephone Book</H1>\n" +
"<FORM ACTION=\"PhoneBook\" METHOD=\"POST\">" +
"<TABLE>\n" +
"<TR>\n" +
" <TD>Last Name</TD>\n" +
" <TD><INPUT TYPE=\"TEXT\" SIZE=20 NAME=\"LastName\"></TD>" +
"</TR><TR>\n" +
" <TD>First Name</TD>\n" +
" <TD><INPUT TYPE=\"TEXT\" SIZE=20 NAME=\"FirstName\"></TD>" +
"</TR><TR>\n" +
" <TD>Country Code</TD>\n" +
" <TD><INPUT TYPE=\"TEXT\" SIZE=5 NAME=\"CountryCode\"></TD>" +
"</TR><TR>\n" +
" <TD>Area Code</TD>\n" +
" <TD><INPUT TYPE=\"TEXT\" SIZE=5 NAME=\"AreaCode\"></TD>" +
"</TR><TR>\n" +
" <TD>Phone Number</TD>\n" +
" <TD><INPUT TYPE=\"TEXT\" SIZE=15 NAME=\"PhoneNum\"></TD>" +
"</TR>\n" +
"</TABLE>" +
"<INPUT TYPE=\"Submit\" NAME=\"Query\" VALUE=\"Query\">\n" +
"<INPUT TYPE=\"Submit\" NAME=\"Add\" VALUE=\"Add New Entry\">\n" +
"<INPUT TYPE=\"Reset\" VALUE=\"Reset\">\n" +
"</FORM><BR>"
);
}
private void doOutput2(PrintWriter writer) {
writer.println("</BODY></HTML>");
}
public void doGet(HttpServletRequest req, HttpServletResponse resp) {
resp.setContentType("text/html");
PrintWriter writer = null;
try {
writer = resp.getWriter();
} catch (IOException e) {
return;
}
doOutput1(writer);
doOutput2(writer);
writer.close();
}
public synchronized void doPost(HttpServletRequest req,
HttpServletResponse resp) {
resp.setContentType("text/html");
PrintWriter writer = null;
try {
writer = resp.getWriter();
} catch (IOException e) {
return;
}
doOutput1(writer);
try {
if (connection == null || connection.isClosed())
connection = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/test", "lyon", null);
} catch (SQLException e) {
writer.println("Error: Cannot open database connection\n");
doOutput2(writer);
writer.close();
return;
}
Hashtable postData = null;
try {
postData = HttpUtils.parsePostData(
req.getContentLength(), req.getInputStream());
} catch (IOException e) {
writer.println("Error: Cannot read post data\n");
}
if (postData.containsKey("Add")) {
if (((String[]) postData.get("LastName"))[0].length() == 0)
writer.println("Error: No last name specified for Add");
else
try {
Statement stmt = connection.createStatement();
stmt.executeUpdate(
"INSERT INTO phonelist VALUES (" +
"'" +
((String[]) postData.get("LastName"))[0] +
"','" +
((String[]) postData.get("FirstName"))[0] +
"','" +
((String[]) postData.get("CountryCode"))[0] +
"','" +
((String[]) postData.get("AreaCode"))[0] +
"','" +
((String[]) postData.get("PhoneNum"))[0] +
"');");
writer.println("New entry added for " +
((String[]) postData.get("LastName"))[0]);
} catch (SQLException e) {
writer.println("Error: " + e.toString());
} catch (NullPointerException e) {
writer.println("Error: " + e.toString());
}
} else {
ResultSet results = null;
try {
StringBuffer queryQualifiers = new StringBuffer();
appendQueryQualifiers(queryQualifiers, "lastname",
(postData.get("LastName")));
appendQueryQualifiers(queryQualifiers, "firstname",
(postData.get("FirstName")));
appendQueryQualifiers(queryQualifiers, "countrycode",
(postData.get("CountryCode")));
appendQueryQualifiers(queryQualifiers, "areacode",
(postData.get("AreaCode")));
appendQueryQualifiers(queryQualifiers, "number",
(postData.get("PhoneNum")));
Statement stmt = connection.createStatement();
results = stmt.executeQuery(
"SELECT * FROM phonelist" +
queryQualifiers +
";"
);
if (results == null)
writer.println("Null result from query");
else {
writer.println(
"<TABLE BORDER=\"2\">\n" +
"<TR>\n" +
" <TD><CENTER><B>Last Name</B></CENTER></TD>\n" +
" <TD><CENTER><B>First Name</B></CENTER></TD>\n" +
" <TD><CENTER><B>Country Code</B></CENTER></TD>\n" +
" <TD><CENTER><B>Area Code</B></CENTER></TD>\n" +
" <TD><CENTER><B>Phone Number</B></CENTER></TD>\n" +
"</TR>");
while (results.next()) {
writer.println(
"<TR>" +
" <TD>" + results.getString(1) + "</TD>\n" +
" <TD>" + results.getString(2) + "</TD>\n" +
" <TD>" + results.getString(3) + "</TD>\n" +
" <TD>" + results.getString(4) + "</TD>\n" +
" <TD>" + results.getString(5) + "</TD>\n" +
"</TR>");
}
writer.println("</TABLE>");
}
} catch (SQLException e) {
writer.println("Error: " + e.toString());
}
}
doOutput2(writer);
writer.close();
}
private void appendQueryQualifiers(StringBuffer qualifiers,
String dbfield,
Object formdata) {
if (formdata == null) return;
String forminfo = ((String[]) formdata)[0];
if (forminfo.length() > 0) {
if (qualifiers.length() == 0)
qualifiers.append(" WHERE");
else
qualifiers.append(" AND");
qualifiers.append(" " + dbfield + " = \"" +
forminfo + "\"");
}
}
public String getServletInfo() {
return "PhoneBook";
}
}