001 /* 002 * Copyright (c) 2005 Henri Sivonen 003 * Copyright (c) 2007 Mozilla Foundation 004 * 005 * Permission is hereby granted, free of charge, to any person obtaining a 006 * copy of this software and associated documentation files (the "Software"), 007 * to deal in the Software without restriction, including without limitation 008 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 009 * and/or sell copies of the Software, and to permit persons to whom the 010 * Software is furnished to do so, subject to the following conditions: 011 * 012 * The above copyright notice and this permission notice shall be included in 013 * all copies or substantial portions of the Software. 014 * 015 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 016 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 017 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 018 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 019 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 020 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 021 * DEALINGS IN THE SOFTWARE. 022 */ 023 024 package nu.validator.servlet; 025 026 import java.io.IOException; 027 028 import javax.servlet.ServletException; 029 import javax.servlet.http.HttpServlet; 030 import javax.servlet.http.HttpServletRequest; 031 import javax.servlet.http.HttpServletResponse; 032 033 import nu.validator.xml.PrudentHttpEntityResolver; 034 035 import org.apache.log4j.Logger; 036 037 038 /** 039 * @version $Id: VerifierServlet.java 90 2007-10-05 10:39:50Z hsivonen $ 040 * @author hsivonen 041 */ 042 public class VerifierServlet extends HttpServlet { 043 /** 044 * 045 */ 046 private static final long serialVersionUID = 7811043632732680935L; 047 048 private static final Logger log4j = Logger.getLogger(VerifierServlet.class); 049 050 static { 051 PrudentHttpEntityResolver.setParams(5000, 5000, 100); 052 PrudentHttpEntityResolver.setUserAgent(System.getProperty( 053 "nu.validator.servlet.version", 054 "VerifierServlet-RELAX-NG-Validator/2.x (http://validator.nu/)")); 055 } 056 057 058 059 /** 060 * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) 061 */ 062 @Override 063 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 064 doPost(request, response); 065 } 066 067 068 069 /** 070 * @see javax.servlet.http.HttpServlet#doPost(javax.servlet.http.HttpServletRequest, 071 * javax.servlet.http.HttpServletResponse) 072 */ 073 protected void doPost(HttpServletRequest request, 074 HttpServletResponse response) throws ServletException, IOException { 075 String pathInfo = request.getPathInfo(); 076 String serverName = request.getServerName(); 077 log4j.debug("pathInfo: " + pathInfo); 078 log4j.debug("serverName: " + serverName); 079 if (serverName.endsWith("validator.nu")) { 080 if ("validator.nu".equals(serverName)) { 081 if ("/".equals(pathInfo)) { 082 new VerifierServletTransaction(request, response).service(); 083 } else if ("/html5/".equals(pathInfo)) { 084 response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY); 085 String queryString = request.getQueryString(); 086 response.setHeader("Location", "http://html5.validator.nu/" + (queryString == null ? "" : "?" + queryString)); 087 } else { 088 response.sendError(HttpServletResponse.SC_NOT_FOUND); 089 } 090 } else if ("html5.validator.nu".equals(serverName)) { 091 if ("/".equals(pathInfo)) { 092 new Html5ConformanceCheckerTransaction(request, response).service(); 093 } else { 094 response.sendError(HttpServletResponse.SC_NOT_FOUND); 095 } 096 } else if ("parsetree.validator.nu".equals(serverName)) { 097 if ("/".equals(pathInfo)) { 098 new ParseTreePrinter(request, response).service(); 099 } else { 100 response.sendError(HttpServletResponse.SC_NOT_FOUND); 101 } 102 } else { 103 response.sendError(HttpServletResponse.SC_NOT_FOUND); 104 } 105 } else { 106 if ("/".equals(pathInfo)) { 107 new VerifierServletTransaction(request, response).service(); 108 } else if ("/html5/".equals(pathInfo)) { 109 new Html5ConformanceCheckerTransaction(request, response).service(); 110 } else if ("/parsetree/".equals(pathInfo)) { 111 new ParseTreePrinter(request, response).service(); 112 } else { 113 response.sendError(HttpServletResponse.SC_NOT_FOUND); 114 } 115 } 116 } 117 }