Search in sources :

Example 1 with JspPropertyGroup

use of org.eclipse.jetty.servlet.ServletContextHandler.JspPropertyGroup in project jetty.project by eclipse.

the class StandardDescriptorProcessor method visitJspConfig.

public void visitJspConfig(WebAppContext context, Descriptor descriptor, XmlParser.Node node) {
    //Additive across web.xml and web-fragment.xml
    JspConfig config = (JspConfig) context.getServletContext().getJspConfigDescriptor();
    if (config == null) {
        config = new JspConfig();
        context.getServletContext().setJspConfigDescriptor(config);
    }
    for (int i = 0; i < node.size(); i++) {
        Object o = node.get(i);
        if (o instanceof XmlParser.Node && "taglib".equals(((XmlParser.Node) o).getTag()))
            visitTagLib(context, descriptor, (XmlParser.Node) o);
    }
    // Map URLs from jsp property groups to JSP servlet.
    // this is more JSP stupidness creeping into the servlet spec
    Iterator<XmlParser.Node> iter = node.iterator("jsp-property-group");
    List<String> paths = new ArrayList<String>();
    while (iter.hasNext()) {
        JspPropertyGroup jpg = new JspPropertyGroup();
        config.addJspPropertyGroup(jpg);
        XmlParser.Node group = iter.next();
        //url-patterns
        Iterator<XmlParser.Node> iter2 = group.iterator("url-pattern");
        while (iter2.hasNext()) {
            String url = iter2.next().toString(false, true);
            url = ServletPathSpec.normalize(url);
            paths.add(url);
            jpg.addUrlPattern(url);
        }
        jpg.setElIgnored(group.getString("el-ignored", false, true));
        jpg.setPageEncoding(group.getString("page-encoding", false, true));
        jpg.setScriptingInvalid(group.getString("scripting-invalid", false, true));
        jpg.setIsXml(group.getString("is-xml", false, true));
        jpg.setDeferredSyntaxAllowedAsLiteral(group.getString("deferred-syntax-allowed-as-literal", false, true));
        jpg.setTrimDirectiveWhitespaces(group.getString("trim-directive-whitespaces", false, true));
        jpg.setDefaultContentType(group.getString("default-content-type", false, true));
        jpg.setBuffer(group.getString("buffer", false, true));
        jpg.setErrorOnUndeclaredNamespace(group.getString("error-on-undeclared-namespace", false, true));
        //preludes
        Iterator<XmlParser.Node> preludes = group.iterator("include-prelude");
        while (preludes.hasNext()) {
            String prelude = preludes.next().toString(false, true);
            jpg.addIncludePrelude(prelude);
        }
        //codas
        Iterator<XmlParser.Node> codas = group.iterator("include-coda");
        while (codas.hasNext()) {
            String coda = codas.next().toString(false, true);
            jpg.addIncludeCoda(coda);
        }
        if (LOG.isDebugEnabled())
            LOG.debug(config.toString());
    }
    //add mappings to the jsp servlet from the property-group mappings
    if (paths.size() > 0) {
        ServletMapping jspMapping = null;
        for (ServletMapping m : _servletMappings) {
            if (m.getServletName().equals("jsp")) {
                jspMapping = m;
                break;
            }
        }
        if (jspMapping != null) {
            if (jspMapping.getPathSpecs() == null) {
                //no paths in jsp servlet mapping, we will add all of ours
                if (LOG.isDebugEnabled())
                    LOG.debug("Adding all paths from jsp-config to jsp servlet mapping");
                jspMapping.setPathSpecs(paths.toArray(new String[paths.size()]));
            } else {
                //check if each of our paths is already present in existing mapping
                ListIterator<String> piterator = paths.listIterator();
                while (piterator.hasNext()) {
                    String p = piterator.next();
                    if (jspMapping.containsPathSpec(p))
                        piterator.remove();
                }
                //any remaining paths, add to the jspMapping
                if (paths.size() > 0) {
                    for (String p : jspMapping.getPathSpecs()) paths.add(p);
                    if (LOG.isDebugEnabled())
                        LOG.debug("Adding extra paths from jsp-config to jsp servlet mapping");
                    jspMapping.setPathSpecs((String[]) paths.toArray(new String[paths.size()]));
                }
            }
        } else {
            //no mapping for jsp yet, make one
            ServletMapping mapping = new ServletMapping(new Source(Source.Origin.DESCRIPTOR, descriptor.getResource().toString()));
            mapping.setServletName("jsp");
            mapping.setPathSpecs(paths.toArray(new String[paths.size()]));
            _servletMappings.add(mapping);
        }
    }
}
Also used : XmlParser(org.eclipse.jetty.xml.XmlParser) ServletMapping(org.eclipse.jetty.servlet.ServletMapping) JspConfig(org.eclipse.jetty.servlet.ServletContextHandler.JspConfig) Node(org.eclipse.jetty.xml.XmlParser.Node) ArrayList(java.util.ArrayList) Node(org.eclipse.jetty.xml.XmlParser.Node) Constraint(org.eclipse.jetty.util.security.Constraint) Source(org.eclipse.jetty.servlet.Source) JspPropertyGroup(org.eclipse.jetty.servlet.ServletContextHandler.JspPropertyGroup)

Aggregations

ArrayList (java.util.ArrayList)1 JspConfig (org.eclipse.jetty.servlet.ServletContextHandler.JspConfig)1 JspPropertyGroup (org.eclipse.jetty.servlet.ServletContextHandler.JspPropertyGroup)1 ServletMapping (org.eclipse.jetty.servlet.ServletMapping)1 Source (org.eclipse.jetty.servlet.Source)1 Constraint (org.eclipse.jetty.util.security.Constraint)1 XmlParser (org.eclipse.jetty.xml.XmlParser)1 Node (org.eclipse.jetty.xml.XmlParser.Node)1