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  }