blob: 068a33ea2fb908e46b3e8d22260a9de7d2b6bb16 [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<meta name="Date-Revision-yyyymmdd" content="20140918"/>
<meta http-equiv="Content-Language" content="en"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>SiteGraph Plugin</title>
<link href="//fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,400italic,600italic,700italic" rel="stylesheet" type="text/css">
<link href="//netdna.bootstrapcdn.com/font-awesome/4.0.3/css/font-awesome.css" rel="stylesheet">
<link href="/css/main.css" rel="stylesheet">
<link href="/css/custom.css" rel="stylesheet">
<link href="/highlighter/github-theme.css" rel="stylesheet">
<script src="//code.jquery.com/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="/bootstrap/js/bootstrap.js"></script>
<script type="text/javascript" src="/js/community.js"></script>
</head>
<body>
<a href="http://github.com/apache/struts" class="github-ribbon">
<img style="position: absolute; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png" alt="Fork me on GitHub">
</a>
<header>
<nav>
<div role="navigation" class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" data-toggle="collapse" data-target="#struts-menu" class="navbar-toggle">
Menu
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="/index.html" class="navbar-brand logo"><img src="/img/struts-logo.svg"></a>
</div>
<div id="struts-menu" class="navbar-collapse collapse">
<ul class="nav navbar-nav">
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Home<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/index.html">Welcome</a></li>
<li><a href="/download.cgi">Download</a></li>
<li><a href="/releases.html">Releases</a></li>
<li><a href="/announce.html">Announcements</a></li>
<li><a href="http://www.apache.org/licenses/">License</a></li>
<li><a href="https://www.apache.org/foundation/thanks.html">Thanks!</a></li>
<li><a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Support<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/mail.html">User Mailing List</a></li>
<li><a href="https://issues.apache.org/jira/browse/WW">Issue Tracker</a></li>
<li><a href="/security.html">Reporting Security Issues</a></li>
<li class="divider"></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Migration+Guide">Version Notes</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Security+Bulletins">Security Bulletins</a></li>
<li class="divider"></li>
<li><a href="/maven/project-info.html">Maven Project Info</a></li>
<li><a href="/maven/struts2-core/dependencies.html">Struts Core Dependencies</a></li>
<li><a href="/maven/struts2-plugins/modules.html">Plugin Dependencies</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Documentation<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/birdseye.html">Birds Eye</a></li>
<li><a href="/primer.html">Key Technologies</a></li>
<li><a href="/kickstart.html">Kickstart FAQ</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Home">Wiki</a></li>
<li class="divider"></li>
<li><a href="/getting-started/">Getting Started</a></li>
<li><a href="/security/">Security Guide</a></li>
<li><a href="/core-developers/">Core Developers Guide</a></li>
<li><a href="/tag-developers/">Tag Developers Guide</a></li>
<li><a href="/maven-archetypes/">Maven Archetypes</a></li>
<li><a href="/plugins/">Plugins</a></li>
<li><a href="/maven/struts2-core/apidocs/index.html">Struts Core API</a></li>
<li><a href="/tag-developers/tag-reference.html">Tag reference</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/FAQs">FAQs</a></li>
<li><a href="http://cwiki.apache.org/S2PLUGINS/home.html">Plugin registry</a></li>
</ul>
</li>
<li class="dropdown">
<a data-toggle="dropdown" href="#" class="dropdown-toggle">
Contributing<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<li><a href="/youatstruts.html">You at Struts</a></li>
<li><a href="/helping.html">How to Help FAQ</a></li>
<li><a href="/dev-mail.html">Development Lists</a></li>
<li><a href="/contributors/">Contributors Guide</a></li>
<li class="divider"></li>
<li><a href="/submitting-patches.html">Submitting patches</a></li>
<li><a href="/builds.html">Source Code and Builds</a></li>
<li><a href="/coding-standards.html">Coding standards</a></li>
<li><a href="https://cwiki.apache.org/confluence/display/WW/Contributors+Guide">Contributors Guide</a></li>
<li class="divider"></li>
<li><a href="/release-guidelines.html">Release Guidelines</a></li>
<li><a href="/bylaws.html">PMC Charter</a></li>
<li><a href="/volunteers.html">Volunteers</a></li>
<li><a href="https://gitbox.apache.org/repos/asf?p=struts.git">Source Repository</a></li>
<li><a href="/updating-website.html">Updating the website</a></li>
</ul>
</li>
<li class="apache"><a href="http://www.apache.org/"><img src="/img/apache.png"></a></li>
</ul>
</div>
</div>
</div>
</nav>
</header>
<article class="container">
<section class="col-md-12">
<a class="edit-on-gh" href="https://github.com/apache/struts-site/edit/master/source/plugins/sitegraph/index.md" title="Edit this page on GitHub">Edit on GitHub</a>
<a href="../" title="back to Plugins"><< back to Plugins</a>
<h1 id="sitegraph-plugin">SiteGraph Plugin</h1>
<blockquote>
<p>This plugin got marked as deprecated since Struts 2.5.11!</p>
</blockquote>
<p>The SiteGraph plugin generates graphical diagrams representing the flow of your web application.</p>
<p>SiteGraph works by parsing your configuration files, Action classes, and view files (JSP, Velocity, and FreeMarker), and displaying a visual map.</p>
<p>Additional information can be found in the JavaDocs:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code> * &lt;p&gt;
* SiteGraph is a tool that renders out GraphViz-generated images depicting your
* Struts-powered web application's flow. SiteGraph requires GraphViz be installed
* and that the "dot" executable be in your command path. You can find GraphViz
* at http://www.graphviz.org.
* &lt;/p&gt;
</code></pre></div></div>
<p><strong>Understanding the Output</strong></p>
<p>There are several key things to notice when looking at the output from SiteGraph:</p>
<ul>
<li>
<p>Boxes: those shaded red indicate an action; those shaded green indicate a view file (JSP, etc).</p>
</li>
<li>
<p>Links: arrows colored green imply that no new HTTP request is being made; black arrows indicate a new HTTP request.</p>
</li>
<li>
<p>Link labels: labels may sometimes contain additional useful information. For example, a label of <strong>href</strong> means that the link behavior is that of a hyper-text reference. The complete label behaviors are provided:</p>
<ul>
<li>
<p><strong>href</strong> - a view file references an action by name (typically ending with the extension “.action”)</p>
</li>
<li>
<p><strong>action</strong> - a view file makes a call to the <em>action</em> tag</p>
</li>
<li>
<p><strong>form</strong> - a view file is linked to an action using the <em>form</em> tag</p>
</li>
<li>
<p><strong>redirect</strong> - an action is redirecting to another view or action</p>
</li>
<li>
<p><strong>! notation</strong> - a link to an action overrides the method to invoke</p>
</li>
</ul>
</li>
</ul>
<p><strong>Requirements</strong></p>
<p>SiteGraph requires that your view files be structured in a very specific way. Because it has to read these files, only certain styles are supported. The requirements are:</p>
<ul>
<li>
<p>The JSP tags must use the “s” namespace.</p>
<ul>
<li>
<p>In JSP: &lt;s:xxx/&gt;</p>
</li>
<li>
<p>In FreeMarker: &lt;@s.xxx/&gt;</p>
</li>
<li>
<p>In Velocity: N/A</p>
</li>
</ul>
</li>
<li>
<p>Use of the <em>form</em> tag and <em>action</em> tag must be linking directly to the action name (and optional namespace). This means that &lt;s:form action=”foo”/&gt; is OK, but &lt;s:form action=”foo.action”/&gt; is not.
Here is also a short overview of what it does and why a developer would want to use it.</p>
</li>
</ul>
<p><strong>Features</strong></p>
<ul>
<li>Generates a graphical view of your web application</li>
</ul>
<h2 id="usage">Usage</h2>
<p>You can use SiteGraph with the following command:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>java -cp ... -jar struts2-sitegraph-plugin-x.x.x.jar
-config CONFIG_DIR
-views VIEWS_DIRS
-output OUTPUT
[-ns NAMESPACE]
</code></pre></div></div>
<p>Where:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Usage: -config CONFIG_DIR -views VIEWS_DIRS -output OUTPUT [-ns NAMESPACE]
CONFIG_DIR =&gt; a directory containing struts.xml
VIEWS_DIRS =&gt; comma seperated list of dirs containing JSPs, VMs, etc
OUPUT =&gt; the directory where the output should go
NAMESPACE =&gt; the namespace path restriction (/, /foo, etc)
</code></pre></div></div>
<p>You must either supply the correct classpath when invoking the SiteGraph tool or place the Sitegraph plugin in the same directory as the dependent jars. Specifically, the XWork jar, Struts jar, and their dependencies must be included in the classpath. Futhermore, <strong>you must also include your Action class files referenced in</strong> struts.xml. Without the proper class path entries, SiteGraph will not function properly.</p>
<p>Once you have run SiteGraph, check the directory specified in the “output” argument (OUTPUT). In there you will find two files: <strong>out.dot</strong> and <strong>out.gif</strong>. You may immediately open up <strong>out.gif</strong> and view the web application flow. However, you may also wish to either run the <strong>out.dot</strong> file through a different GraphVis layout engine (neato, twopi, etc), so the original dot file is provided as well. You may also wish to edit the dot file before rendering the final flow diagram.</p>
<p><strong>Automatic Execution</strong></p>
<p>Some advanced users may wish to execute SiteGraph from within their application - this could be required if you are developing an application that supports plugin capabilities. This can easily be done. See the JavaDocs for more info:</p>
<div class="language-text highlighter-rouge"><div class="highlight"><pre class="highlight"><code> * &lt;p&gt;
* If you wish to use SiteGraph through its API rather than through the command line,
* you can do that as well. All you need to do is create a new SiteGraph instance,
* optionally specify a {@link Writer} to output the dot content to, and then call
* {@link #prepare()}.
* &lt;/p&gt;
</code></pre></div></div>
<p>The command line version of SiteGraph does exactly this (except for overriding the Writer):</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="n">SiteGraph</span> <span class="n">siteGraph</span> <span class="o">=</span> <span class="k">new</span> <span class="n">SiteGraph</span><span class="o">(</span><span class="n">configDir</span><span class="o">,</span> <span class="n">views</span><span class="o">,</span> <span class="n">output</span><span class="o">,</span> <span class="n">namespace</span><span class="o">);</span>
<span class="n">siteGraph</span><span class="o">.</span><span class="na">prepare</span><span class="o">();</span>
<span class="n">siteGraph</span><span class="o">.</span><span class="na">render</span><span class="o">();</span>
</code></pre></div></div>
<p><strong>Example</strong></p>
<p><strong>Settings</strong></p>
<p>This plugin doesn’t allow for any global settings.</p>
<p><strong>Installation</strong></p>
<p>The SiteGraph plugin jar is distributed with Struts, so if you’re up and running, you don’t need to do download any additional Java packages. However, SiteGraph does require the “dot” package by <a href="http://www.graphviz.org">GraphViz</a>.</p>
<p>You’ll need to download the latest version of GraphViz and make sure that the dot executable (dot.exe in Windows) is in your command path. In Windows the GraphViz installer typically automatically adds <code class="highlighter-rouge">dot.exe</code> to your path. However, you may need to do this by hand depending on your system configuration.</p>
</section>
</article>
<footer class="container">
<div class="col-md-12">
Copyright &copy; 2000-2018 <a href="http://www.apache.org/">The Apache Software Foundation </a>.
All Rights Reserved.
</div>
<div class="col-md-12">
Apache Struts, Struts, Apache, the Apache feather logo, and the Apache Struts project logos are
trademarks of The Apache Software Foundation.
</div>
<div class="col-md-12">Logo and website design donated by <a href="https://softwaremill.com/">SoftwareMill</a>.</div>
</footer>
<script>!function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (!d.getElementById(id)) {
js = d.createElement(s);
js.id = id;
js.src = "//platform.twitter.com/widgets.js";
fjs.parentNode.insertBefore(js, fjs);
}
}(document, "script", "twitter-wjs");</script>
<script src="https://apis.google.com/js/platform.js" async="async" defer="defer"></script>
<div id="fb-root"></div>
<script>(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s);
js.id = id;
js.src = "//connect.facebook.net/en_GB/all.js#xfbml=1";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>
</body>
</html>