Structure of a Web Application

Appkit web applications follow a standard Java web project structure. If using Maven for build and dependency management, the application structure is as follows:

project-name/
   `pom.xml`
   src/
      main/
         java/
         resources/
            conf/
         webapp/
            assets/
            styles/
            WEB-INF/
               pages/
               tags/

If deploying directly in a servlet container such as Tomcat rather than using Maven, however, the application structure is simply:

project-name/
   assets/
   styles/
   WEB-INF/
      classes/
        conf/
      pages/
      tags/

Below, we take a closer look at four areas of the application: pom.xml, the assets and styles folders, the WEB-INF folder, and the resources or classes folder.

pom.xml

The build process is managed by the pom.xml file. It contains references to the Maven repositories and version information for the dependencies. When the application is built (using Maven) all dependencies are automatically retrieved, and a web application archive (WAR file) is generated. Configuration files are automatically placed in the correct folders within the WAR.

Assets and styles folders

The assets folder is where assets such as images are kept. The main logos in a standard Appkit application are stored and served from here.

The styles folder contains CSS and Less files that are specific to the application. The central stylesheet for configuring styling is classic-settings.less, which in turn includes several partial stylesheets that are stored in the theme/partials/ folder.

Custom styling using Less can be added to classic-settings.less and the partial stylesheets, and custom CSS to the custom.css file.

WEB-INF folder

The WEB-INF folder includes pages, tags, and a handful of configuration files. It also includes the standard Java web application web.xml configuration file.

Pages folder

The pages folder is where the JSP files are kept. search.jsp or content.jsp is typically the main search page. Additional pages can be created here as needed.

Tags folder

The tags folder stores .tag files — commonly referred to as "widgets" — that are specific to the particular application. They can then be referenced in the JSPs using the client: prefix. Some of the default widgets include:

  • header.tag – this widget contains the search header including the logo and search box

You can modify the existing .tag files as well as add your own.

Configuration files

In addition to the Appkit specific configuration files under 'conf' there are also these web application configuration files:

  • url-rules.xml – This file is where URL routing can be configured. There is a default rule in place that says the /${foo}/ URL path should use the WEB-INF/pages/${foo}.jsp JSP page, hence /search/ would be routed to the page search.jsp.

  • wro.properties – The application uses wro4j to optimise CSS and JavaScript resources for delivery. wro.properties can be used to specify which resources should be bundled together. Wro packages all the resources when the application starts, as well as recompiling on the fly if a CSS or JavaScript file is modified.

Resources or classes folder

The resources folder (if running with Maven/Jetty), or WEB-INF/classes if deploying with Tomcat, is the primary location for configuration files in the application. The spring-security.xml file contains security configuration. The platform-cache.xml file defines how responses from the search platform should be cached, and log4j2.xml controls the logging level.

Finally, there is the conf folder that provides a cascading property framework. Properties can be set at a general level (such as 'platforms.gsa') and then overwritten more specifically (for example, 'platforms.gsa.people'). These property trees are reported in the log at startup and can then be referenced throughout the application.