/*
* TestCookiePropertiesServlet - Verify the subelement cookie-properties
* of the session-config element in sun-web.xml
* (bug 4924948)
*/
package servlet_tests;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.net.*;
public class TestCookiePropertiesServlet extends HttpServlet{
private ServletContext context;
private PrintWriter out;
private String host;
private int port;
private String headerName = "Set-Cookie:";
private String headerName2 = "Set-cookie:"; // EE version
public void init(ServletConfig config) throws ServletException {
super.init(config);
System.out.println("[TestCookiePropertiesServlet.init]");
context = config.getServletContext();
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
System.out.println("[TestCookiePropertiesServlet.doGet]");
doPost(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
System.out.println("[TestCookiePropertiesServlet.doPost]");
response.setContentType("text/html");
out = response.getWriter();
if (request.getParameter("HeaderName") != null) {
headerName = request.getParameter("HeaderName");
headerName = headerName + ":";
}
out.println("
");
out.println("");
out.println("TestCookiePropertiesServlet
");
out.println("request.getContextPath() = " +
request.getContextPath() + "
");
HttpSession session = request.getSession();
if (session != null) {
host = request.getServerName();
port = request.getServerPort();
// Invoke TestCookieProperties.jsp and look at Set-Cookie response
// header. The values should match the default or the customized
// values specified in sun-web.xml
invokeJsp();
}
out.println("");
out.println("");
}
private void invokeJsp() {
try {
Socket sock = new Socket(host, new Integer(port).intValue());
OutputStream os = sock.getOutputStream();
String get = "GET " + "/" + context.getServletContextName() +
"/jsp/TestCookieProperties.jsp" + " HTTP/1.0\n";
os.write(get.getBytes());
os.write("\n".getBytes());
InputStream is = sock.getInputStream();
BufferedReader bis = new BufferedReader(new InputStreamReader(is));
String line = null;
while ((line = bis.readLine()) != null) {
if (line.startsWith(headerName) ||
line.startsWith(headerName2)) {
break;
}
}
if (line != null) {
System.out.println("[TestCookiePropertiesServlet.invokeJsp] " +
line);
out.println(headerName + " response header has the followings:"
+ "
");
// Check cookie name, It must be JSESSIONID for servlet 2.4
// compliance for name of session cookie
String cookieName = getCookieField(line, headerName + " ", '=');
if (cookieName == null) {
cookieName = getCookieField(line, headerName2 + " ", '=');
}
out.println(" Name = " + cookieName + "
");
// Check cookie path, if not specify in sun-web.xml then
// its default value is context path
String path = getCookieField(line, "Path=", ';');
out.println(" Path = " + path + "
");
// Check cookie domain, if not specify in sun-web.xml then
// its default value is null (unset)
String domain = getCookieField(line, "Domain=", ';');
out.println(" Domain = " + domain + "
");
// Check cookie comment
String comment = getCookieField(line, "Comment=", ';');
out.println(" Comment = " + comment + "
");
} else {
out.println("Error: Missing Set-Cookie response header");
}
} catch (Exception e) {
out.println("Exception : " + e + "
");
}
}
private String getCookieField(String cookie, String field,
char delimitChar) {
String ret = null;
int index = cookie.indexOf(field);
if (index != -1) {
int endIndex = cookie.indexOf(delimitChar, index);
if (endIndex != -1) {
ret = cookie.substring(index + field.length(), endIndex);
} else {
ret = cookie.substring(index + field.length());
}
ret = ret.trim();
}
return ret;
}
}