/* * 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; } }