/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.taglib.servlet;
import com.liferay.portal.kernel.servlet.DirectServletRegistryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.PropsKeys;
import com.liferay.portal.kernel.util.PropsUtil;
import com.liferay.portal.kernel.util.WebKeys;
import javax.servlet.Servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspEngineInfo;
import javax.servlet.jsp.JspFactory;
import javax.servlet.jsp.PageContext;
/**
* @author Shuyang Zhou
*/
public class JspFactoryWrapper extends JspFactory {
public JspFactoryWrapper(JspFactory jspFactory) {
_jspFactory = jspFactory;
}
@Override
public JspEngineInfo getEngineInfo() {
return _jspFactory.getEngineInfo();
}
@Override
public JspApplicationContext getJspApplicationContext(
ServletContext servletContext) {
return _jspFactory.getJspApplicationContext(servletContext);
}
@Override
public PageContext getPageContext(
Servlet servlet, ServletRequest servletRequest,
ServletResponse servletResponse, String errorPageURL,
boolean needsSession, int buffer, boolean autoflush) {
if (autoflush) {
buffer = _JSP_WRITER_BUFFER_SIZE;
}
PageContext pageContext = _jspFactory.getPageContext(
servlet, servletRequest, servletResponse, errorPageURL,
needsSession, buffer, autoflush);
if (_DIRECT_SERVLET_CONTEXT_ENABLED) {
String servletPath = (String)servletRequest.getAttribute(
WebKeys.SERVLET_PATH);
if (servletPath != null) {
servletRequest.removeAttribute(WebKeys.SERVLET_PATH);
ServletContext servletContext = pageContext.getServletContext();
String contextPath = servletContext.getContextPath();
DirectServletRegistryUtil.putServlet(
contextPath.concat(servletPath), servlet);
}
}
return new PageContextWrapper(pageContext);
}
@Override
public void releasePageContext(PageContext pageContext) {
if (pageContext instanceof PageContextWrapper) {
PageContextWrapper pageContextWrapper =
(PageContextWrapper)pageContext;
pageContext = pageContextWrapper.getWrappedPageContext();
}
_jspFactory.releasePageContext(pageContext);
}
private static final boolean _DIRECT_SERVLET_CONTEXT_ENABLED =
GetterUtil.getBoolean(
PropsUtil.get(PropsKeys.DIRECT_SERVLET_CONTEXT_ENABLED));
private static final int _JSP_WRITER_BUFFER_SIZE = GetterUtil.getInteger(
PropsUtil.get(PropsKeys.JSP_WRITER_BUFFER_SIZE));
private final JspFactory _jspFactory;
}