View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *  http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17
    18  package org.apache.any23.servlet;
    19
    20  import javax.servlet.RequestDispatcher;
    21  import javax.servlet.ServletException;
    22  import javax.servlet.http.HttpServlet;
    23  import javax.servlet.http.HttpServletRequest;
    24  import javax.servlet.http.HttpServletResponse;
    25
    26  import org.slf4j.Logger;
    27  import org.slf4j.LoggerFactory;
    28
    29  import java.io.IOException;
    30
    31  /**
    32   * This servlet contains the logic to perform the correct redirects
    33   * when <i>Any23</i> is used as a all-in-one web application.
    34   *
    35   * @author Davide Palmisano ( palmisano@fbk.eu )
    36   */
    37  public class RedirectServlet extends HttpServlet {
    38
    39      private static final Logger LOG = LoggerFactory.getLogger(RedirectServlet.class);
    40
    41      /**
    42     *
    43     */
    44    private static final long serialVersionUID = 1L;
    45
    46      @Override
    47      protected void doPost(HttpServletRequest request, HttpServletResponse response)
    48      throws ServletException, IOException {
    49          try {
    50              doGet(request, response);
    51          } catch (ServletException | IOException e) {
    52              LOG.error("Error executing GET request.", e);
    53          }
    54      }
    55
    56      @Override
    57      protected void doGet(HttpServletRequest request, HttpServletResponse response)
    58      throws ServletException, IOException {
    59          // Show /resources/form.html for GET requests to the app's root
    60          final String pathInfo = request.getPathInfo();
    61          final String queryString = request.getQueryString();
    62
    63          if ("/".equals(pathInfo) && queryString == null) {
    64              RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/resources/form.html");
    65              try {
    66                  dispatcher.forward(request, response);
    67              } catch (ServletException | IOException e) {
    68                  LOG.error("Error in request dispatcher forwarding.", e);
    69              }
    70              return;
    71          }
    72          // forward requests to /resources/* to the default servlet, this is
    73          // where we can put static files
    74          if (pathInfo.startsWith("/resources/")) {
    75              RequestDispatcher dispatcher = getServletContext().getNamedDispatcher("default");
    76              try {
    77                dispatcher.forward(request, response);
    78              } catch (ServletException | IOException e) {
    79                  LOG.error("Error in named request dispatcher forwarding.", e);
    80              }
    81              return;
    82          }
    83
    84          try {
    85              response.sendRedirect(
    86                    request.getContextPath() + "/any23" +
    87                            request.getPathInfo() +
    88                            (queryString == null ? "" : "?" + queryString)
    89              );
    90          } catch (IOException e) {
    91              LOG.error("Error in sending HttpServletResponse Redirect.", e);
    92          }
    93
    94      }
    95  }