package edu.pdx.cs410J.servlets;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
/**
* A servlet that returns all sorts of information available from the
* servlet API.
*
* @author David Whitlock
* @since Summer 2005
*/
public class ServletInfoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
protected void doPut(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
/**
* Display information from the {@link HttpServletRequest}, {@link
* HttpServletResponse}
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
response.setBufferSize(8192);
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<title>Servlet Information</title>");
out.println("<body>");
out.println("<h1>Servlet Information " + (new Date()) + "</h1>");
dump(this.getServletConfig(), out);
dump(this.getServletConfig().getServletContext(), out);
dump(request, out);
out.println("</body>");
out.println("</html>");
}
/**
* Starts a new HTML table with the given title
*/
private static void startTable(String title, PrintWriter out) {
out.println("<table border=\"1\">");
out.print("<caption align=\"top\">");
out.print(title);
out.println("</caption>");
}
/**
* Inserts a row into an HTML table
*/
private static void tableRow(String key, Object value, PrintWriter out) {
out.print(" <tr><td>");
out.print(key);
out.print("</td><td>");
out.print(value);
out.println("</td></tr>");
}
/**
* Ends an HTML table
*/
private static void endTable(PrintWriter out) {
out.println("</table>");
}
/**
* Dumps information about a <code>HttpServletRequest</code> to the
* given <code>PrintWriter</code>.
*/
static void dump(HttpServletRequest request, PrintWriter out) {
startTable("HttpServletRequest", out);
for (Enumeration attrs = request.getAttributeNames(); attrs.hasMoreElements();) {
String name = (String) attrs.nextElement();
Object attr = request.getAttribute(name);
tableRow("Attribute \"" + name + "\"", attr, out);
}
tableRow("Character encoding", request.getCharacterEncoding(), out);
tableRow("Context length", String.valueOf(request.getContentLength()), out);
tableRow("Content type", request.getContentType(), out);
tableRow("Local address", request.getLocalAddr(), out);
tableRow("Local port", String.valueOf(request.getLocalPort()), out);
tableRow("Remote address", request.getRemoteAddr(), out);
tableRow("Remote host", request.getRemoteHost(), out);
tableRow("Remote port", String.valueOf(request.getRemotePort()), out);
tableRow("Server name", request.getServerName(), out);
tableRow("Server port", String.valueOf(request.getServerPort()), out);
tableRow("Locale", request.getLocale(), out);
{
StringBuffer sb = new StringBuffer();
for (Enumeration locales = request.getLocales(); locales.hasMoreElements();) {
sb.append(locales.nextElement());
sb.append(" ");
}
tableRow("Locales", sb.toString().trim(), out);
}
for (Iterator iter = request.getParameterMap().entrySet().iterator(); iter.hasNext();) {
Map.Entry entry = (Map.Entry) iter.next();
Object param = entry.getValue();
if (param instanceof String[]) {
String[] array = (String[]) param;
StringBuffer sb = new StringBuffer();
for (int i = 0; i < array.length; i++) {
sb.append(array[i]);
if (i < array.length - 1) {
sb.append(", ");
}
}
param = sb;
}
tableRow("<b>Parameter</b> \"" + entry.getKey() + "\"", String.valueOf(param), out);
}
tableRow("Protocol", request.getProtocol(), out);
tableRow("Scheme", request.getScheme(), out);
tableRow("Is secure?", String.valueOf(request.isSecure()), out);
// HTTP
tableRow("<b>Method</b>", request.getMethod(), out);
tableRow("Auth Type", request.getAuthType(), out);
for (Enumeration names = request.getHeaderNames(); names.hasMoreElements();) {
String name = (String) names.nextElement();
String value = request.getHeader(name);
tableRow("Header \"" + name + "\"", value, out);
}
tableRow("Path Info", request.getPathInfo(), out);
tableRow("Path Translated", request.getPathTranslated(), out);
tableRow("Query String", request.getQueryString(), out);
tableRow("Remote User", request.getRemoteUser(), out);
tableRow("Requested Session ID", request.getRequestedSessionId(), out);
tableRow("Request URI", request.getRequestURI(), out);
tableRow("Request URL", request.getRequestURL(), out);
tableRow("Servlet Path", request.getServletPath(), out);
tableRow("User Principal", request.getUserPrincipal(), out);
endTable(out);
}
/**
* Dumps information about a <code>ServletContext</code> to the
* given <code>PrintWriter</code>
*/
private static void dump(ServletContext context, PrintWriter out) {
startTable("ServletContext", out);
tableRow("Context name", context.getServletContextName(), out);
tableRow("Server Info", context.getServerInfo(), out);
for (Enumeration attrs = context.getAttributeNames(); attrs.hasMoreElements();) {
String name = (String) attrs.nextElement();
Object value = context.getAttribute(name);
tableRow("Attribute \"" + name + "\"", String.valueOf(value), out);
}
for (Enumeration initParams = context.getInitParameterNames(); initParams.hasMoreElements();) {
String name = (String) initParams.nextElement();
String param = context.getInitParameter(name);
tableRow("Init parameter \"" + name + "\"", param, out);
}
tableRow("Major version", String.valueOf(context.getMajorVersion()), out);
tableRow("Minor version", String.valueOf(context.getMinorVersion()), out);
endTable(out);
}
private static void dump(ServletConfig config, PrintWriter out) {
startTable("ServletConfig", out);
tableRow("Name", config.getServletName(), out);
for (Enumeration initParams = config.getInitParameterNames(); initParams.hasMoreElements();) {
String name = (String) initParams.nextElement();
String param = config.getInitParameter(name);
tableRow("Init parameter \"" + name + "\"", param, out);
}
endTable(out);
}
}