Class TryFilesFilter

java.lang.Object
org.eclipse.jetty.fcgi.server.proxy.TryFilesFilter
All Implemented Interfaces:
javax.servlet.Filter

public class TryFilesFilter extends Object implements javax.servlet.Filter
Inspired by nginx's try_files functionality.

This filter accepts the files init-param as a list of space-separated file URIs. The special token $path represents the current request URL's path (the portion after the context path).

Typical example of how this filter can be configured is the following:

 <filter>
     <filter-name>try_files</filter-name>
     <filter-class>org.eclipse.jetty.fcgi.server.proxy.TryFilesFilter</filter-class>
     <init-param>
         <param-name>files</param-name>
         <param-value>/maintenance.html $path /index.php?p=$path</param-value>
     </init-param>
 </filter>
 
For a request such as /context/path/to/resource.ext, this filter will try to serve the /maintenance.html file if it finds it; failing that, it will try to serve the /path/to/resource.ext file if it finds it; failing that it will forward the request to /index.php?p=/path/to/resource.ext. The last file URI specified in the list is therefore the "fallback" to which the request is forwarded to in case no previous files can be found.

The files are resolved using ServletContext.getResource(String) to make sure that only files visible to the application are served.

See Also:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
     
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
     
    void
    doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain)
     
    protected void
    fallback(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain chain, String fallback)
     
    void
    init(javax.servlet.FilterConfig config)
     

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • Constructor Details

    • TryFilesFilter

      public TryFilesFilter()
  • Method Details

    • init

      public void init(javax.servlet.FilterConfig config) throws javax.servlet.ServletException
      Specified by:
      init in interface javax.servlet.Filter
      Throws:
      javax.servlet.ServletException
    • doFilter

      public void doFilter(javax.servlet.ServletRequest request, javax.servlet.ServletResponse response, javax.servlet.FilterChain chain) throws IOException, javax.servlet.ServletException
      Specified by:
      doFilter in interface javax.servlet.Filter
      Throws:
      IOException
      javax.servlet.ServletException
    • fallback

      protected void fallback(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response, javax.servlet.FilterChain chain, String fallback) throws IOException, javax.servlet.ServletException
      Throws:
      IOException
      javax.servlet.ServletException
    • destroy

      public void destroy()
      Specified by:
      destroy in interface javax.servlet.Filter