This is how URLs are handled when entering an XWiki instance:

url-architecture-overall.png

Specifically:

  • When parsing an incoming URL, the Routing Filter will use a default Resource Type Resolver (ResourceTypeResolver) component to extract the Resource Type (ResourceType) from the URL (the Resource Type is the type of URL pointed to, e.g. an Entity if the URL is pointing to a Document for example, a WebJar URL, a Skin URL, a REST URL, etc). In turn the default Resource Type Resolver will read the XWiki configuration to see what URL Scheme is configured (through the url.format configuration parameter) and will then locate a ResourceTypeResolver component with a hint corresponding to the URL Scheme. It'll use it to extract the Resource Type.
  • The Resource Reference Handler Servlet will use a default Resource Reference Resolver (ResourceReferenceResolver) component to parse the passed URL into a ResourceReference object that can then be given to a ResourceReferenceHandler to perform an action. In turn the default Resource Reference Resolver will read the XWiki configuration to see what URL Scheme is configured (through the url.format configuration parameter) and will then locate a ResourceReferenceResolver component with a hint corresponding to the URL Scheme. It'll use it to extract the Resource Reference. 

For more details see the Resource API and the URL API reference documentation.

Standard URL Scheme

This is the default URL format used by XWiki. See Standard URL Scheme.

Customizing URLs

There are several solutions to customize XWiki URLs:

  • You can tune them to some degree by modifying XWiki's configuration. The various options are described in the Short URL documentation.
  • You can rewrite both incoming URLs but also outbound URLs using a Rewrite Filter. An example is also provided in the Short URL documentation.
  • You can implement a new URL Scheme. See the URL API.
  • You can simply register new Resource Types or new Entity Actions. See the Resource API.

Note that using Tuckey's Rewrite Filter is very powerful as it also allows using dynamic rules written in Java by using the <class-rule> feature. However, dynamic outbound rules are not yet possiblet.

Here's an example of writing a custom class-rule.

Struts Servlet Architecture

As shown above, when there's no Resource Reference Handler registered to handle a Resource Type, the rest of web.xml is processed and if the URL type is bin or wiki, the Struts Servlet is then called and the following happens:

xwiki-struts.png

For example for the http://www.xwiki.org/xwiki/bin/view/Main/WebHome URL, the following happens:

  • The URL path contains /view/ and thus the ViewAction.java class is executed (configured in struts-config.xml) and called by the Struts Action, itself configured in web.xml.
  • The wiki is the main wiki in this example (since the server name starts by www). See Accessing a wiki for more details on how wikis are accessed from URLs.
  • ViewAction specifies that view.vm will be rendered using Velocity
  • The space asked is Main and the document's name is WebHome
Tags:
Created by Vincent Massol on 2015/04/20 11:11

Get Connected