zweb/src/main/java/org/zkoss/web/servlet/GenericFilter.java

Summary

Maintainability
A
1 hr
Test Coverage
/* GenericFilter.java


    Purpose: A generic class to help implementing servlet filter
    Description: 
    History:
        2001/11/13 14:46:46, Create, Tom M. Yeh.

Copyright (C) 2001 Potix Corporation. All Rights Reserved.

{{IS_RIGHT
    This program is distributed under LGPL Version 2.1 in the hope that
    it will be useful, but WITHOUT ANY WARRANTY.
}}IS_RIGHT
*/
package org.zkoss.web.servlet;

import java.util.Enumeration;
import java.util.Map;

import javax.servlet.Filter;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.zkoss.web.servlet.http.Https;

/**
 * A generic class to help implementing servlet filter.
 * Its role is like javax.servlet.GenericServlet to javax.servlet.Servlet.
 *
 * @author tomyeh
 */
public abstract class GenericFilter implements Filter {
    protected FilterConfig _config;

    protected GenericFilter() {
    }

    //-- extra API --//
    /** A convenience method which can be overridden so that there's
     * no need to call super.init(config).
     * @see #init(FilterConfig)
     */
    protected void init() throws ServletException {
    }
    
    /** Called by the web container to indicate to a filter that it is
     * being placed into service.
     * However, deriving class usually doesn't override this method
     * but overriding {@link #init()}.
     */
    public final void init(FilterConfig config) throws ServletException {
        _config = config;
        init();
    }

    /** Returns a String containing the value of the named initialization
     * parameter, or null if the parameter does not exist.
     */
    public final String getInitParameter(String name) {
        return _config.getInitParameter(name);
    }

    /** Returns a String containing the value of the named initialization
     * parameter, or null if the parameter does not exist.
     */
    public final Enumeration getInitParameterNames() {
        return _config.getInitParameterNames();
    }

    /** Returns the filter's name.
     */
    public final String getFilterName() {
        return _config.getFilterName();
    }

    /** Returns the servlet context in which this filter is running.
     */
    public final ServletContext getServletContext() {
        return _config.getServletContext();
    }

    /**
     * Redirects to another page. Note: it supports only HTTP.
     *
     * <p>It resolves "*" contained in URI, if any, to the proper Locale,
     * and the browser code.
     * Refer to {@link Servlets#locate(ServletContext, ServletRequest, String, Locator)}
     * for details. 
     *
     * @param page the page's uri; null to denote the same request
     * @param mode one of {@link Servlets#OVERWRITE_URI}, {@link Servlets#IGNORE_PARAM},
     * and {@link Servlets#APPEND_PARAM}. It defines how to handle if both uri
     * and params contains the same parameter.
     * mode is used only if both uri contains query string and params is
     * not empty.
     */
    protected void sendRedirect(HttpServletRequest request, HttpServletResponse response, String page, Map params,
            int mode) throws ServletException, java.io.IOException {
        Https.sendRedirect(getServletContext(), request, response, page, params, mode);
    }

    /** Forward to the specified page.
     *
     * <p>It resolves "*" contained in URI, if any, to the proper Locale,
     * and the browser code.
     * Refer to {@link Servlets#locate(ServletContext, ServletRequest, String, Locator)}
     * for details. 
     * @since 3.6.3
     */
    protected final void forward(ServletRequest request, ServletResponse response, String uri)
            throws ServletException, java.io.IOException {
        Https.forward(getServletContext(), request, response, uri, null, 0);
    }

    /** Forward to the specified page with parameters.
     *
     * <p>It resolves "*" contained in URI, if any, to the proper Locale,
     * and the browser code.
     * Refer to {@link Servlets#locate(ServletContext, ServletRequest, String, Locator)}
     * for details. 
     * @since 3.6.3
     */
    protected final void forward(ServletRequest request, ServletResponse response, String uri, Map params, int mode)
            throws ServletException, java.io.IOException {
        Https.forward(getServletContext(), request, response, uri, params, mode);
    }

    /** Includes the specified page.
     *
     * <p>It resolves "*" contained in URI, if any, to the proper Locale,
     * and the browser code.
     * Refer to {@link Servlets#locate(ServletContext, ServletRequest, String, Locator)}
     * for details. 
     * @since 3.6.3
     */
    protected final void include(ServletRequest request, ServletResponse response, String uri)
            throws ServletException, java.io.IOException {
        Https.include(getServletContext(), request, response, uri, null, 0);
    }

    /** Includes the specified page with parameters.
     *
     * <p>It resolves "*" contained in URI, if any, to the proper Locale,
     * and the browser code.
     * Refer to {@link Servlets#locate(ServletContext, ServletRequest, String, Locator)}
     * for details. 
     * @since 3.6.3
     */
    protected final void include(ServletRequest request, ServletResponse response, String uri, Map params, int mode)
            throws ServletException, java.io.IOException {
        Https.include(getServletContext(), request, response, uri, params, mode);
    }

    //-- Filter --//
    /** Called by the web container to indicate to a filter that it is
     * being taken out of service.
     *
     * <p>This implementation does nothing.
     */
    public void destroy() {
    }
}