Aspectran provides a very flexible view processing architecture for generating the final response. At the core of this architecture is the ViewDispatcher
, which handles the integration of various view technologies.
Additionally, it provides a separate mechanism for generating responses in specific formats like XML, JSON, or text, rather than full-page rendering, using templates within the <transform>
response rule.
1. View Rendering with ViewDispatcher
In Aspectran, web page rendering is primarily done through the <dispatch>
response rule and the ViewDispatcher
implementation that handles it. The ViewDispatcher
is responsible for rendering the final screen using a specific view technology (JSP, Thymeleaf, FreeMarker, etc.).
In the <dispatch>
rule, the name
attribute specifies the path to the template file, and the dispatcher
attribute can specify the ViewDispatcher
bean responsible for rendering. If the dispatcher
attribute is omitted, the default ViewDispatcher
is used.
Note: Instead of including the character encoding in the
contentType
attribute, you must specify it using a separateencoding
attribute. If theencoding
attribute is omitted, it inherits the encoding setting of the parent response rule.
Supported View Technologies:
a. JSP (JavaServer Pages)
JSP is a classic view technology that is executed directly by the servlet container. Aspectran delegates rendering by forwarding the request to a JSP file through the JspViewDispatcher
.
Maven Dependency:
<dependency>
<groupId>com.aspectran</groupId>
<artifactId>aspectran-web</artifactId>
<version>8.6.0</version>
</dependency>
Configuration Example:
<!-- 1. JSP View Dispatcher Bean Configuration -->
<bean id="jspViewDispatcher" class="com.aspectran.web.support.view.JspViewDispatcher">
<properties>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</properties>
</bean>
<!-- 2. Dispatch Rule Definition -->
<dispatch name="hello" dispatcher="jspViewDispatcher" contentType="text/html" encoding="UTF-8"/>
b. Thymeleaf
Thymeleaf is a modern server-side Java template engine for both web and standalone environments. It is well-known for its “Natural Templating” feature, which allows templates to be valid HTML that can be correctly displayed in a browser. (Official Website: https://www.thymeleaf.org/)
Maven Dependency:
<dependency>
<groupId>com.aspectran</groupId>
<artifactId>aspectran-with-thymeleaf</artifactId>
<version>8.6.0</version>
</dependency>
Configuration Example:
<!-- 1. Thymeleaf View Dispatcher Bean Configuration -->
<bean id="thymeleafViewDispatcher" class="com.aspectran.thymeleaf.view.ThymeleafViewDispatcher">
<properties>
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".html"/>
<property name="templateEngine" value-ref="thymeleafEngine"/>
</properties>
</bean>
<!-- 2. Dispatch Rule Definition -->
<dispatch name="hello" dispatcher="thymeleafViewDispatcher" contentType="text/html" encoding="UTF-8"/>
c. FreeMarker
FreeMarker is a powerful and widely used template engine for generating any kind of text output, from HTML to email. (Official Website: https://freemarker.apache.org/)
Maven Dependency:
<dependency>
<groupId>com.aspectran</groupId>
<artifactId>aspectran-with-freemarker</artifactId>
<version>8.6.0</version>
</dependency>
Configuration Example:
<!-- 1. FreeMarker View Dispatcher Bean Configuration -->
<bean id="freeMarkerViewDispatcher" class="com.aspectran.freemarker.view.FreeMarkerViewDispatcher">
<properties>
<property name="prefix" value="/WEB-INF/templates/"/>
<property name="suffix" value=".ftl"/>
<property name="templateEngine" value-ref="freeMarkerEngine"/>
</properties>
</bean>
<!-- 2. Dispatch Rule Definition -->
<dispatch name="hello" dispatcher="freeMarkerViewDispatcher" contentType="text/html" encoding="UTF-8"/>
d. Pebble
Pebble is a lightweight yet powerful template engine inspired by Twig, known for its security features and extensibility. (Official Website: https://pebbletemplates.io/)
Maven Dependency:
<dependency>
<groupId>com.aspectran</groupId>
<artifactId>aspectran-with-pebble</artifactId>
<version>8.6.0</version>
</dependency>
Configuration Example:
<!-- 1. Pebble Template Engine Bean Configuration -->
<bean id="pebbleEngine" class="com.aspectran.pebble.PebbleTemplateEngine">
<argument>
<bean class="com.aspectran.pebble.PebbleEngineFactoryBean">
<property name="templateLoaderPath" type="array">
<value>classpath:view</value>
</property>
</bean>
</argument>
</bean>
<!-- 2. Pebble View Dispatcher Bean Configuration -->
<bean id="pebbleViewDispatcher" class="com.aspectran.pebble.view.PebbleViewDispatcher">
<arguments>
<item>#{pebbleEngine}</item>
</arguments>
<properties>
<item name="suffix">.peb</item>
</properties>
</bean>
<!-- 3. Dispatch Rule Definition -->
<dispatch name="template-2" dispatcher="pebbleViewDispatcher" contentType="text/html" encoding="UTF-8"/>
2. Using Templates in Transform Responses
The <template>
element is mainly used with the <transform>
response rule to generate data in a specific format (TEXT, JSON, XML, etc.) rather than a complete web page. This is very useful for creating API responses or simple text results.
The template content can be written directly within the XML configuration file or referenced from an external resource using the file
, resource
, or url
attributes.
Additionally, Aspectran provides a built-in token
engine that supports simple dynamic text generation using expressions like ${...}
or @{...}
.
Template Styles (TextStyleType)
You can control the output format by specifying the style
attribute in the <template>
. This attribute corresponds to the TextStyleType
enum.
APON ("apon")
Used when writing text in APON (Aspectran Parameter Object Notation) format. It allows for highly readable multi-line strings using the pipe (|
) character, and indentation and line breaks are preserved as is.COMPACT ("compact")
The ‘compact’ style makes data concise by removing unnecessary whitespace (indentation, line breaks, etc.) from JSON or XML. Minimal whitespace for readability may be retained.COMPRESSED ("compressed")
The ‘compressed’ style is more aggressive thancompact
in removing whitespace to minimize data size. It removes all whitespace that is not syntactically required, making it most effective for reducing network transmission size.
Configuration Examples
Example 1: Referencing an external file
<transform format="text" encoding="UTF-8">
<template engine="token" file="/path/to/my-template.txt"/>
</transform>
Example 2: Inline template using APON style
<transform format="text" encoding="UTF-8">
<template engine="token" style="apon">
|----------------------------------------------------------
|The input parameters and attributes are as follows:
| input-1: ${input-1} - This is a parameter.
| input-2: ${input-2} - This is a parameter.
| input-3: ${input-3} - This is a parameter.
| input-4: @{input-4} - This is an attribute.
|----------------------------------------------------------
</template>
</transform>
3. Conclusion
Aspectran offers high flexibility and extensibility by providing two clear methods for handling views.
ViewDispatcher
(<dispatch>
rule): This is the standard method for rendering web pages. It integrates and processes various view technologies like JSP, Thymeleaf, and FreeMarker in a consistent manner. You can also implement your own view processing logic by extendingAbstractViewDispatcher
.TemplateEngine
(<template>
within<transform>
rule): This is a specialized method for generating results in a specific data format, such as API responses. It is useful when you need to dynamically generate only the necessary parts, not a full view page.
Developers can effectively design and implement the view layer of their web applications by choosing and using these two mechanisms according to their purpose.