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 }