blob: b36cfa503514995fbbd1a91628ea357bafb55780 [file] [log] [blame] [view]
---
layout: core-developers
title: Static Content
---
# Static Content
{:.no_toc}
* Will be replaced with the ToC, excluding a header
{:toc}
Struts can serve static content like css and javascript files. This feature is enabled by default, but can be disabled
by setting:
```xml
<constant name="struts.serve.static" value="false" />
```
> If you disable this feature, but use the `xhtml`, or `css_xhtml` theme, make sure that the javascript and css files
> shipped inside the core jar are extracted to your web application directory.
## Custom Static Content Loaders
Static content is served by an implementation of `org.apache.struts2.dispatcher.StaticContentLoader`. To write your own
`StaticContentLoader`, implement `StaticContentLoader` and define a bean for the class:
```xml
<bean type="org.apache.struts2.dispatcher.StaticContentLoader" class="MyStaticContentLoader" name="myLoader" />
<constant name="struts.staticContentLoader" value="myLoader" />
```
## Default Content Loader
Struts provides a default implementation of `StaticContentLoader` which is `org.apache.struts2.dispatcher.DefaultStaticContentLoader`.
This loader will handle urls that start with "/static/" by default.
This content loader can serve static content from the classpath, so when writing a plugin, you can put a file inside
your plugin's jar like "/static/image/banner.jpg" and it will be served when the url "/static/image/banner.jpg" is
requested.
> This loader is not optimized to handle static content, and to improve performance, it is recommended that you extract
> your static content to the web application directory, and let the container handle them.
## Default path
If needed you can change the default path at which static content is served. Just define a new `constant` in your
`struts.xml` with a path as below:
```xml
<constant name="struts.ui.staticContentPath" value="/my-static-content"/>
```
This value is also used by the Default Content Loader.
## Preventing Struts from Handling a Request
If there is a request that Struts is handling as an action, and you wish to make Struts ignore it, you can do so by specifying
a comma separated list of regular expressions like:
```xml
<constant name="struts.action.excludePattern" value="/some/content/.*?" />
```
These regular expression will be evaluated against the request's URI (`HttpServletRequest.getRequestURI()`), and if any
of them matches, then Struts will not handle the request.
To evaluate each pattern Pattern class from JDK will be used, you can find more about what kind of pattern you can use
in the [Pattern class JavaDoc](http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern).