/*
* Copyright 2000-2013 Enonic AS
* http://www.enonic.com/license
*/
package com.enonic.cms.web.portal;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import com.enonic.cms.core.servlet.ServletRequestAccessor;
import com.enonic.cms.server.service.servlet.OriginalUrlResolver;
public final class PortalServlet
extends HttpServlet
{
private final static List<String> ALLOWED_HTTP_METHODS = Arrays.asList( "GET", "POST", "HEAD", "OPTIONS" );
private RequestDispatcher dispatcher;
@Override
public void init( final ServletConfig config )
throws ServletException
{
super.init( config );
final ServletContext context = config.getServletContext();
final WebApplicationContext springContext = WebApplicationContextUtils.getRequiredWebApplicationContext( context );
this.dispatcher = springContext.getBean( RequestDispatcher.class );
}
@Override
protected void doOptions( HttpServletRequest request, HttpServletResponse response )
throws ServletException, IOException
{
response.setHeader( "Allow", StringUtils.join( ALLOWED_HTTP_METHODS, "," ) );
response.setStatus( HttpServletResponse.SC_OK );
}
@Override
protected void service( final HttpServletRequest req, final HttpServletResponse res )
throws ServletException, IOException
{
final String requestMethod = req.getMethod();
if ( !ALLOWED_HTTP_METHODS.contains( requestMethod ) )
{
res.sendError( HttpServletResponse.SC_METHOD_NOT_ALLOWED );
return;
}
if ( requestMethod.equals( "OPTIONS" ) )
{
doOptions( req, res );
return;
}
ServletRequestAccessor.setRequest( req );
OriginalUrlResolver.resolveOriginalUrl( req );
this.dispatcher.handle( req, res );
}
}