edu.cornell.mannlib.vitro.webapp.filters.CharsetEncodingFilter.java Source code

Java tutorial

Introduction

Here is the source code for edu.cornell.mannlib.vitro.webapp.filters.CharsetEncodingFilter.java

Source

/* $This file is distributed under the terms of the license in /doc/license.txt$ */

package edu.cornell.mannlib.vitro.webapp.filters;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

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

import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class CharsetEncodingFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        // Nothing to set up
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) servletRequest;

        setCharacterEncodingOnRequest(req);
        setContentTypeOnResponse(req, servletResponse);

        filterChain.doFilter(servletRequest, servletResponse);
    }

    private void setCharacterEncodingOnRequest(HttpServletRequest req) throws UnsupportedEncodingException {
        if (!ServletFileUpload.isMultipartContent(req)) {
            req.setCharacterEncoding("UTF-8");
        }
    }

    private void setContentTypeOnResponse(HttpServletRequest req, ServletResponse servletResponse) {
        if (servletResponse.getContentType() != null) {
            return;
        }

        String uri = req.getRequestURI();
        if (!hasExtension(uri)) {
            servletResponse.setContentType("text/html;charset=UTF-8");
            return;
        }

        String typeFromContext = req.getSession().getServletContext().getMimeType(uri);
        if (typeFromContext == null) {
            servletResponse.setContentType("text/html;charset=UTF-8");
            return;
        }

        servletResponse.setContentType(typeFromContext);
        servletResponse.setCharacterEncoding("UTF-8");
    }

    private boolean hasExtension(String uri) {
        return uri.matches(".+" // some stuff
                + "\\." // a literal period
                + "[^/]+" // some stuff that's not a slash
                + "$" // the end of the URI
        );
    }

    @Override
    public void destroy() {
        // Nothing to tear down
    }
}