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);
}
}
}
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());
}
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());
}
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());
}
use of jakarta.servlet.descriptor.JspConfigDescriptor in project tomcat by apache.
the class TldScanner method scanJspConfig.
/**
* Scan for TLDs defined in <jsp-config>.
* @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;
}
}
}
Aggregations