001
014
015 package com.liferay.taglib.servlet;
016
017 import com.liferay.portal.kernel.servlet.DirectServletRegistryUtil;
018 import com.liferay.portal.kernel.util.ContextPathUtil;
019 import com.liferay.portal.kernel.util.GetterUtil;
020 import com.liferay.portal.kernel.util.PropsKeys;
021 import com.liferay.portal.kernel.util.PropsUtil;
022 import com.liferay.portal.kernel.util.WebKeys;
023
024 import javax.servlet.Servlet;
025 import javax.servlet.ServletContext;
026 import javax.servlet.ServletRequest;
027 import javax.servlet.ServletResponse;
028 import javax.servlet.jsp.JspApplicationContext;
029 import javax.servlet.jsp.JspEngineInfo;
030 import javax.servlet.jsp.JspFactory;
031 import javax.servlet.jsp.PageContext;
032
033
036 public class JspFactoryWrapper extends JspFactory {
037
038 public JspFactoryWrapper(JspFactory jspFactory) {
039 _jspFactory = jspFactory;
040 }
041
042 @Override
043 public JspEngineInfo getEngineInfo() {
044 return _jspFactory.getEngineInfo();
045 }
046
047 @Override
048 public JspApplicationContext getJspApplicationContext(
049 ServletContext servletContext) {
050
051 return _jspFactory.getJspApplicationContext(servletContext);
052 }
053
054 @Override
055 public PageContext getPageContext(
056 Servlet servlet, ServletRequest servletRequest,
057 ServletResponse servletResponse, String errorPageURL,
058 boolean needsSession, int buffer, boolean autoflush) {
059
060 if (autoflush) {
061 buffer = _JSP_WRITER_BUFFER_SIZE;
062 }
063
064 PageContext pageContext = _jspFactory.getPageContext(
065 servlet, servletRequest, servletResponse, errorPageURL,
066 needsSession, buffer, autoflush);
067
068 if (_DIRECT_SERVLET_CONTEXT_ENABLED) {
069 String servletPath = (String)servletRequest.getAttribute(
070 WebKeys.SERVLET_PATH);
071
072 if (servletPath != null) {
073 servletRequest.removeAttribute(WebKeys.SERVLET_PATH);
074
075 ServletContext servletContext = pageContext.getServletContext();
076
077 String contextPath = ContextPathUtil.getContextPath(
078 servletContext);
079
080 DirectServletRegistryUtil.putServlet(
081 contextPath.concat(servletPath), servlet);
082 }
083 }
084
085 return new PageContextWrapper(pageContext);
086 }
087
088 @Override
089 public void releasePageContext(PageContext pageContext) {
090 if (pageContext instanceof PageContextWrapper) {
091 PageContextWrapper pageContextWrapper =
092 (PageContextWrapper)pageContext;
093
094 pageContext = pageContextWrapper.getWrappedPageContext();
095 }
096
097 _jspFactory.releasePageContext(pageContext);
098 }
099
100 private static final boolean _DIRECT_SERVLET_CONTEXT_ENABLED =
101 GetterUtil.getBoolean(
102 PropsUtil.get(PropsKeys.DIRECT_SERVLET_CONTEXT_ENABLED));
103
104 private static final int _JSP_WRITER_BUFFER_SIZE = GetterUtil.getInteger(
105 PropsUtil.get(PropsKeys.JSP_WRITER_BUFFER_SIZE));
106
107 private final JspFactory _jspFactory;
108
109 }