Search in sources :

Example 1 with JspConfigDescriptor

use of jakarta.servlet.descriptor.JspConfigDescriptor in project tomcat by apache.

the class JspConfig method processWebDotXml.

private void processWebDotXml() {
    // Very, very unlikely but just in case...
    if (ctxt.getEffectiveMajorVersion() < 2) {
        defaultIsELIgnored = "true";
        defaultDeferedSyntaxAllowedAsLiteral = "true";
        return;
    }
    if (ctxt.getEffectiveMajorVersion() == 2) {
        if (ctxt.getEffectiveMinorVersion() < 5) {
            defaultDeferedSyntaxAllowedAsLiteral = "true";
        }
        if (ctxt.getEffectiveMinorVersion() < 4) {
            defaultIsELIgnored = "true";
            return;
        }
    }
    JspConfigDescriptor jspConfig = ctxt.getJspConfigDescriptor();
    if (jspConfig == null) {
        return;
    }
    jspProperties = new Vector<>();
    Collection<JspPropertyGroupDescriptor> jspPropertyGroups = jspConfig.getJspPropertyGroups();
    for (JspPropertyGroupDescriptor jspPropertyGroup : jspPropertyGroups) {
        Collection<String> urlPatterns = jspPropertyGroup.getUrlPatterns();
        if (urlPatterns.size() == 0) {
            continue;
        }
        JspProperty property = new JspProperty(jspPropertyGroup.getIsXml(), jspPropertyGroup.getElIgnored(), jspPropertyGroup.getErrorOnELNotFound(), jspPropertyGroup.getScriptingInvalid(), jspPropertyGroup.getPageEncoding(), jspPropertyGroup.getIncludePreludes(), jspPropertyGroup.getIncludeCodas(), jspPropertyGroup.getDeferredSyntaxAllowedAsLiteral(), jspPropertyGroup.getTrimDirectiveWhitespaces(), jspPropertyGroup.getDefaultContentType(), jspPropertyGroup.getBuffer(), jspPropertyGroup.getErrorOnUndeclaredNamespace());
        // the matching logic easier.
        for (String urlPattern : urlPatterns) {
            String path = null;
            String extension = null;
            if (urlPattern.indexOf('*') < 0) {
                // Exact match
                path = urlPattern;
            } else {
                int i = urlPattern.lastIndexOf('/');
                String file;
                if (i >= 0) {
                    path = urlPattern.substring(0, i + 1);
                    file = urlPattern.substring(i + 1);
                } else {
                    file = urlPattern;
                }
                // pattern must be "*", or of the form "*.jsp"
                if (file.equals("*")) {
                    extension = "*";
                } else if (file.startsWith("*.")) {
                    extension = file.substring(file.indexOf('.') + 1);
                }
                // The url patterns are reconstructed as the following:
                // path != null, extension == null:  / or /foo/bar.ext
                // path == null, extension != null:  *.ext
                // path != null, extension == "*":   /foo/*
                boolean isStar = "*".equals(extension);
                if ((path == null && (extension == null || isStar)) || (path != null && !isStar)) {
                    if (log.isWarnEnabled()) {
                        log.warn(Localizer.getMessage("jsp.warning.bad.urlpattern.propertygroup", urlPattern));
                    }
                    continue;
                }
            }
            JspPropertyGroup propertyGroup = new JspPropertyGroup(path, extension, property);
            jspProperties.addElement(propertyGroup);
        }
    }
}
Also used : JspConfigDescriptor(jakarta.servlet.descriptor.JspConfigDescriptor) JspPropertyGroupDescriptor(jakarta.servlet.descriptor.JspPropertyGroupDescriptor)

Example 2 with JspConfigDescriptor

use of jakarta.servlet.descriptor.JspConfigDescriptor in project tomcat by apache.

the class TestJspConfigDescriptorImpl method testPropertyGroupsAreIsolate.

@Test
public void testPropertyGroupsAreIsolate() {
    List<TaglibDescriptor> taglibs = Collections.emptyList();
    List<JspPropertyGroupDescriptor> propertyGroups = new ArrayList<>();
    propertyGroups.add(new JspPropertyGroupDescriptorImpl(new JspPropertyGroup()));
    JspConfigDescriptor descriptor = new JspConfigDescriptorImpl(propertyGroups, taglibs);
    descriptor.getJspPropertyGroups().clear();
    Assert.assertEquals(propertyGroups, descriptor.getJspPropertyGroups());
}
Also used : TaglibDescriptor(jakarta.servlet.descriptor.TaglibDescriptor) ArrayList(java.util.ArrayList) JspConfigDescriptor(jakarta.servlet.descriptor.JspConfigDescriptor) JspPropertyGroupDescriptor(jakarta.servlet.descriptor.JspPropertyGroupDescriptor) Test(org.junit.Test)

Example 3 with JspConfigDescriptor

use of jakarta.servlet.descriptor.JspConfigDescriptor in project tomcat by apache.

the class TestJspConfigDescriptorImpl method testTaglibsAreIsolate.

@Test
public void testTaglibsAreIsolate() {
    List<TaglibDescriptor> taglibs = new ArrayList<>();
    taglibs.add(new TaglibDescriptorImpl("location", "uri"));
    List<JspPropertyGroupDescriptor> propertyGroups = Collections.emptyList();
    JspConfigDescriptor descriptor = new JspConfigDescriptorImpl(propertyGroups, taglibs);
    descriptor.getTaglibs().clear();
    Assert.assertEquals(taglibs, descriptor.getTaglibs());
}
Also used : TaglibDescriptor(jakarta.servlet.descriptor.TaglibDescriptor) ArrayList(java.util.ArrayList) JspConfigDescriptor(jakarta.servlet.descriptor.JspConfigDescriptor) JspPropertyGroupDescriptor(jakarta.servlet.descriptor.JspPropertyGroupDescriptor) Test(org.junit.Test)

Example 4 with JspConfigDescriptor

use of jakarta.servlet.descriptor.JspConfigDescriptor in project tomcat by apache.

the class TestApplicationContext method testJspPropertyGroupsAreIsolated.

@Test
public void testJspPropertyGroupsAreIsolated() throws Exception {
    Tomcat tomcat = getTomcatInstanceTestWebapp(false, false);
    StandardContext standardContext = (StandardContext) tomcat.getHost().findChildren()[0];
    ServletContext servletContext = standardContext.getServletContext();
    Assert.assertNull(servletContext.getJspConfigDescriptor());
    tomcat.start();
    JspConfigDescriptor jspConfigDescriptor = servletContext.getJspConfigDescriptor();
    Collection<JspPropertyGroupDescriptor> propertyGroups = jspConfigDescriptor.getJspPropertyGroups();
    Assert.assertFalse(propertyGroups.isEmpty());
    propertyGroups.clear();
    jspConfigDescriptor = servletContext.getJspConfigDescriptor();
    propertyGroups = jspConfigDescriptor.getJspPropertyGroups();
    Assert.assertFalse(propertyGroups.isEmpty());
}
Also used : Tomcat(org.apache.catalina.startup.Tomcat) ServletContext(jakarta.servlet.ServletContext) JspConfigDescriptor(jakarta.servlet.descriptor.JspConfigDescriptor) JspPropertyGroupDescriptor(jakarta.servlet.descriptor.JspPropertyGroupDescriptor) TomcatBaseTest(org.apache.catalina.startup.TomcatBaseTest) Test(org.junit.Test)

Example 5 with JspConfigDescriptor

use of jakarta.servlet.descriptor.JspConfigDescriptor in project tomcat by apache.

the class TldScanner method scanJspConfig.

/**
 * Scan for TLDs defined in &lt;jsp-config&gt;.
 * @throws IOException Error reading resources
 * @throws SAXException XML parsing error
 */
protected void scanJspConfig() throws IOException, SAXException {
    JspConfigDescriptor jspConfigDescriptor = context.getJspConfigDescriptor();
    if (jspConfigDescriptor == null) {
        return;
    }
    Collection<TaglibDescriptor> descriptors = jspConfigDescriptor.getTaglibs();
    for (TaglibDescriptor descriptor : descriptors) {
        String taglibURI = descriptor.getTaglibURI();
        String resourcePath = descriptor.getTaglibLocation();
        // handled.
        if (!resourcePath.startsWith("/")) {
            resourcePath = WEB_INF + resourcePath;
        }
        if (uriTldResourcePathMap.containsKey(taglibURI)) {
            log.warn(Localizer.getMessage(MSG + ".webxmlSkip", resourcePath, taglibURI));
            continue;
        }
        if (log.isTraceEnabled()) {
            log.trace(Localizer.getMessage(MSG + ".webxmlAdd", resourcePath, taglibURI));
        }
        URL url = context.getResource(resourcePath);
        if (url != null) {
            TldResourcePath tldResourcePath;
            if (resourcePath.endsWith(".jar")) {
                // if the path points to a jar file, the TLD is presumed to be
                // inside at META-INF/taglib.tld
                tldResourcePath = new TldResourcePath(url, resourcePath, "META-INF/taglib.tld");
            } else {
                tldResourcePath = new TldResourcePath(url, resourcePath);
            }
            // parse TLD but store using the URI supplied in the descriptor
            TaglibXml tld = tldParser.parse(tldResourcePath);
            uriTldResourcePathMap.put(taglibURI, tldResourcePath);
            tldResourcePathTaglibXmlMap.put(tldResourcePath, tld);
            if (tld.getListeners() != null) {
                listeners.addAll(tld.getListeners());
            }
        } else {
            log.warn(Localizer.getMessage(MSG + ".webxmlFailPathDoesNotExist", resourcePath, taglibURI));
            continue;
        }
    }
}
Also used : TldResourcePath(org.apache.tomcat.util.descriptor.tld.TldResourcePath) TaglibXml(org.apache.tomcat.util.descriptor.tld.TaglibXml) TaglibDescriptor(jakarta.servlet.descriptor.TaglibDescriptor) JspConfigDescriptor(jakarta.servlet.descriptor.JspConfigDescriptor) URL(java.net.URL)

Aggregations

JspConfigDescriptor (jakarta.servlet.descriptor.JspConfigDescriptor)6 JspPropertyGroupDescriptor (jakarta.servlet.descriptor.JspPropertyGroupDescriptor)5 Test (org.junit.Test)4 TaglibDescriptor (jakarta.servlet.descriptor.TaglibDescriptor)3 ArrayList (java.util.ArrayList)2 ServletContext (jakarta.servlet.ServletContext)1 File (java.io.File)1 URL (java.net.URL)1 Tomcat (org.apache.catalina.startup.Tomcat)1 TomcatBaseTest (org.apache.catalina.startup.TomcatBaseTest)1 TaglibXml (org.apache.tomcat.util.descriptor.tld.TaglibXml)1 TldResourcePath (org.apache.tomcat.util.descriptor.tld.TldResourcePath)1