University of Cincinnati logo and link  
XML
 
  UC ingot There's a lot of hype around XML, similar to the hype surrounding Java in the late 1990's.  XML will likely be a large part of computing for years to come, but it does have its limitations.
  • XML has largely replaced the .ini or .properties (perhaps soon even .policy) file format for configuration information.
    • The old file formats often consisted of name=value format.  They were often relatively short, and human editable.  Order often did not matter; you could place properties wherever you wanted.
    • XML files are largely replacing this.  XML files are much stronger on syntax.  A missing tag or a tag out of place can render an entire file useless.
      • Why?  Well, ideally XML files should be read from and written to using graphical tools that insert syntax for you.  But XML is still quite young, and for the most part, these tools often do not exist.  Thus, people often edit XML files by hand.  After XML has had some time to mature, one hopes that it will have better standardization and support.
      • When this support does exits, XML can be very powerful.  Web Services uses XML extensively, and it relies heavily on auto-generation.  Thus, the programmer never has to create XML by hand, or even read it.  The XML layer is largely invisible.  But, the nature of XML makes it machine independent and human readable if necessary.
  • Java includes tools to read and write XML, and to turn XML into objects.  We'll look at these and compare/contrast differences.
    • SAX
    • DOM
    • JDOM
  • But first, let's look at XML.
    • Tomcat's default web.xml file:

      <?xml version="1.0" encoding="ISO-8859-1"?>

      <!DOCTYPE web-app
          PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
          "http://java.sun.com/dtd/web-app_2_3.dtd">

      <web-app>

          <!-- Define servlet-mapped and path-mapped example filters -->
          <filter>
              <filter-name>Servlet Mapped Filter</filter-name>
              <filter-class>filters.ExampleFilter</filter-class>
       <init-param>
           <param-name>attribute</param-name>
           <param-value>filters.ExampleFilter.SERVLET_MAPPED</param-value>
       </init-param>
          </filter>
          <filter>
              <filter-name>Path Mapped Filter</filter-name>
              <filter-class>filters.ExampleFilter</filter-class>
       <init-param>
           <param-name>attribute</param-name>
           <param-value>filters.ExampleFilter.PATH_MAPPED</param-value>
       </init-param>
          </filter>
          <filter>
              <filter-name>Request Dumper Filter</filter-name>
              <filter-class>filters.RequestDumperFilter</filter-class>
          </filter>

          <!-- Example filter to set character encoding on each request -->
          <filter>
              <filter-name>Set Character Encoding</filter-name>
              <filter-class>filters.SetCharacterEncodingFilter</filter-class>
              <init-param>
                  <param-name>encoding</param-name>
                  <param-value>EUC_JP</param-value>
              </init-param>
          </filter>

          <filter>
              <filter-name>Compression Filter</filter-name>
              <filter-class>compressionFilters.CompressionFilter</filter-class>

              <init-param>
                <param-name>compressionThreshold</param-name>
                <param-value>10</param-value>
              </init-param>
              <init-param>
                <param-name>debug</param-name>
                <param-value>0</param-value>
              </init-param>
          </filter>

          <!-- Define filter mappings for the defined filters -->
          <filter-mapping>
              <filter-name>Servlet Mapped Filter</filter-name>
       <servlet-name>invoker</servlet-name>
          </filter-mapping>
          <filter-mapping>
              <filter-name>Path Mapped Filter</filter-name>
       <url-pattern>/servlet/*</url-pattern>
          </filter-mapping>
       

      <!-- Example filter mapping to apply the "Set Character Encoding" filter
           to *all* requests processed by this web application -->
      <!--
          <filter-mapping>
              <filter-name>Set Character Encoding</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>
      -->

      <!--
          <filter-mapping>
            <filter-name>Compression Filter</filter-name>
            <url-pattern>/CompressionTest</url-pattern>
          </filter-mapping>
      -->

      <!--
          <filter-mapping>
              <filter-name>Request Dumper Filter</filter-name>
              <url-pattern>/*</url-pattern>
          </filter-mapping>
      -->

          <!-- Define example application events listeners -->
          <listener>
              <listener-class>listeners.ContextListener</listener-class>
          </listener>
          <listener>
              <listener-class>listeners.SessionListener</listener-class>
          </listener>

          <!-- Define servlets that are included in the example application -->

          <servlet>
              <servlet-name>SendMailServlet</servlet-name>
              <servlet-class>SendMailServlet</servlet-class>
          </servlet>

          <servlet>
              <servlet-name>
                  snoop
              </servlet-name>
              <servlet-class>
                  SnoopServlet
              </servlet-class>
      <!--
              <init-param>
                  <param-name>foo</param-name>
                  <param-value>bar</param-value>
              </init-param>
      -->
              <run-as>
                  <description>Security role for anonymous access</description>
                  <role-name>tomcat</role-name>
              </run-as>
          </servlet>

          <servlet>
            <servlet-name>
                servletToJsp
            </servlet-name>
            <servlet-class>
                servletToJsp
            </servlet-class>
          </servlet>
              <servlet>
              <servlet-name>
                  CompressionFilterTestServlet
              </servlet-name>
              <servlet-class>
                  compressionFilters.CompressionFilterTestServlet
              </servlet-class>

          </servlet>

          <servlet-mapping>
              <servlet-name>
                  CompressionFilterTestServlet
              </servlet-name>
              <url-pattern>
                  /CompressionTest
              </url-pattern>
          </servlet-mapping>

          <servlet-mapping>
              <servlet-name>SendMailServlet</servlet-name>
              <url-pattern>/SendMailServlet</url-pattern>
          </servlet-mapping>

          <servlet-mapping>
              <servlet-name>
                  snoop
              </servlet-name>
              <url-pattern>
                  /snoop
              </url-pattern>
          </servlet-mapping>
          <servlet-mapping>
              <servlet-name>
                  servletToJsp
              </servlet-name>
              <url-pattern>
                  /servletToJsp
              </url-pattern>
          </servlet-mapping>

          <taglib>
              <taglib-uri>
          http://jakarta.apache.org/tomcat/debug-taglib
              </taglib-uri>
              <taglib-location>
                 /WEB-INF/jsp/debug-taglib.tld
              </taglib-location>
          </taglib>

          <taglib>
              <taglib-uri>
          http://jakarta.apache.org/tomcat/examples-taglib
              </taglib-uri>
              <taglib-location>
                 /WEB-INF/jsp/example-taglib.tld
              </taglib-location>
          </taglib>

          <resource-ref>
            <res-ref-name>mail/Session</res-ref-name>
            <res-type>javax.mail.Session</res-type>
            <res-auth>Container</res-auth>
          </resource-ref>

          <security-constraint>
            <display-name>Example Security Constraint</display-name>
            <web-resource-collection>
               <web-resource-name>Protected Area</web-resource-name>
        <!-- Define the context-relative URL(s) to be protected -->
               <url-pattern>/jsp/security/protected/*</url-pattern>
        <!-- If you list http methods, only those methods are protected -->
        <http-method>DELETE</http-method>
               <http-method>GET</http-method>
               <http-method>POST</http-method>
        <http-method>PUT</http-method>
            </web-resource-collection>
            <auth-constraint>
               <!-- Anyone with one of the listed roles may access this area -->
               <role-name>tomcat</role-name>
        <role-name>role1</role-name>
            </auth-constraint>
          </security-constraint>

          <!-- Default login configuration uses form-based authentication -->
          <login-config>
            <auth-method>FORM</auth-method>
            <realm-name>Example Form-Based Authentication Area</realm-name>
            <form-login-config>
              <form-login-page>/jsp/security/protected/login.jsp</form-login-page>
              <form-error-page>/jsp/security/protected/error.jsp</form-error-page>
            </form-login-config>
          </login-config>

          <!-- Environment entry examples -->
          <!--env-entry>
            <env-entry-description>
               The maximum number of tax exemptions allowed to be set.
            </env-entry-description>
            <env-entry-name>maxExemptions</env-entry-name>
            <env-entry-value>15</env-entry-value>
            <env-entry-type>java.lang.Integer</env-entry-type>
          </env-entry-->
          <env-entry>
            <env-entry-name>minExemptions</env-entry-name>
            <env-entry-value>1</env-entry-value>
            <env-entry-type>java.lang.Integer</env-entry-type>
          </env-entry>
          <env-entry>
            <env-entry-name>foo/name1</env-entry-name>
            <env-entry-value>value1</env-entry-value>
            <env-entry-type>java.lang.String</env-entry-type>
          </env-entry>
          <env-entry>
            <env-entry-name>foo/bar/name2</env-entry-name>
            <env-entry-value>true</env-entry-value>
            <env-entry-type>java.lang.Boolean</env-entry-type>
          </env-entry>
          <env-entry>
            <env-entry-name>name3</env-entry-name>
            <env-entry-value>1</env-entry-value>
            <env-entry-type>java.lang.Integer</env-entry-type>
          </env-entry>
          <env-entry>
            <env-entry-name>foo/name4</env-entry-name>
            <env-entry-value>10</env-entry-value>
            <env-entry-type>java.lang.Integer</env-entry-type>
          </env-entry>

          <!-- EJB Reference -->
          <ejb-ref>
            <description>Example EJB Reference</description>
            <ejb-ref-name>ejb/Account</ejb-ref-name>
            <ejb-ref-type>Entity</ejb-ref-type>
            <home>com.mycompany.mypackage.AccountHome</home>
            <remote>com.mycompany.mypackage.Account</remote>
          </ejb-ref>

          <!-- Local EJB Reference -->
          <ejb-local-ref>
            <description>Example Local EJB Reference</description>
            <ejb-ref-name>ejb/ProcessOrder</ejb-ref-name>
            <ejb-ref-type>Session</ejb-ref-type>
            <local-home>com.mycompany.mypackage.ProcessOrderHome</local-home>
            <local>com.mycompany.mypackage.ProcessOrder</local>
          </ejb-local-ref>
       

      </web-app>


 XML Introduction