Class WebdavServlet
- All Implemented Interfaces:
Serializable,Servlet,ServletConfig,PeriodicEventListener
Mapping a subpath (e.g. /webdav/* to this servlet has the effect of re-mounting the entire web
application under that sub-path, with WebDAV access to all the resources. The WEB-INF and
META-INF directories are protected in this re-mounted resource tree.
To enable WebDAV for a context add the following to web.xml:
<servlet>
<servlet-name>webdav</servlet-name>
<servlet-class>org.apache.catalina.servlets.WebdavServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>false</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>webdav</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
This will enable read only access. To enable read-write access add:
<init-param>
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>
To make the content editable via a different URL, use the following mapping:
<servlet-mapping>
<servlet-name>webdav</servlet-name>
<url-pattern>/webdavedit/*</url-pattern>
</servlet-mapping>
By default access to /WEB-INF and META-INF are not available via WebDAV. To enable access to these URLs, use add:
<init-param>
<param-name>allowSpecialPaths</param-name>
<param-value>true</param-value>
</init-param>
Don't forget to secure access appropriately to the editing URLs, especially if allowSpecialPaths is used. With the
mapping configuration above, the context will be accessible to normal users as before. Those users with the necessary
access will be able to edit content available via http://host:port/context/content using
http://host:port/context/webdavedit/content
The Servlet provides support for arbitrary dead properties on all resources (dead properties are properties
whose values are not protected by the server, such as the content length of a resource). By default the Servlet
will use non persistent memory storage for them. Persistence can be achieved by implementing
the PropertyStore interface and configuring the Servlet to use that store.
The propertyStore init-param allows configuring the classname of the store to use, while the
parameters in the form of store.xxx will be set on the store object as bean properties.
For example, this would configure a store with class com.MyPropertyStore, and set its field
myName to value myValue:
<init-param>
<param-name>propertyStore</param-name>
<param-value>com.MyPropertyStore</param-value>
</init-param>
<init-param>
<param-name>store.myName</param-name>
<param-value>myValue</param-value>
</init-param>
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceHandling of dead properties on resources.static classRepresents a PROPPATCH sub operation to be performed.Nested classes/interfaces inherited from class org.apache.catalina.servlets.DefaultServlet
DefaultServlet.CompressionFormat, DefaultServlet.Range -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected static final ConcurrentDateFormatSimple date format for the creation date ISO representation (partial).protected static final StringDefault namespace.protected static final StringLock scheme used.protected static final StringPre generated raw XML for supported locks.Fields inherited from class org.apache.catalina.servlets.DefaultServlet
BUFFER_SIZE, compressionFormats, contextXsltFile, debug, fileEncoding, FULL, globalXsltFile, input, listings, localXsltFile, mimeSeparation, output, readmeFile, readOnly, resources, sendfileSize, showServerInfo, sm, sortListings, sortManager, useAcceptRanges -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected booleancheckIfHeaders(HttpServletRequest request, HttpServletResponse response, WebResource resource) Check if the conditions specified in the optional If headers are satisfied.voiddestroy()Called by the servlet container to indicate to a servlet that the servlet is being taken out of service.protected StringDetermines the methods normally allowed for the resource.protected voiddoCopy(HttpServletRequest req, HttpServletResponse resp) COPY Method.protected voiddoDelete(HttpServletRequest req, HttpServletResponse resp) Called by the server (via theservicemethod) to allow a servlet to handle a DELETE request.protected voiddoLock(HttpServletRequest req, HttpServletResponse resp) LOCK Method.protected voiddoMkcol(HttpServletRequest req, HttpServletResponse resp) MKCOL Method.protected voiddoMove(HttpServletRequest req, HttpServletResponse resp) MOVE Method.protected voiddoOptions(HttpServletRequest req, HttpServletResponse resp) Override default implementation to ensure that TRACE is correctly handled.protected voiddoPropfind(HttpServletRequest req, HttpServletResponse resp) PROPFIND Method.protected voiddoProppatch(HttpServletRequest req, HttpServletResponse resp) PROPPATCH Method.protected voiddoPut(HttpServletRequest req, HttpServletResponse resp) Called by the server (via theservicemethod) to allow a servlet to handle a PUT request.protected voiddoUnlock(HttpServletRequest req, HttpServletResponse resp) UNLOCK Method.protected DocumentBuilderReturn JAXP document builder instance.protected StringgetPathPrefix(HttpServletRequest request) Determines the appropriate path to prepend resources with when generating directory listings.protected StringgetRelativePath(HttpServletRequest request, boolean allowEmptyPath) Override the DefaultServlet implementation and only use the PathInfo.voidinit()A convenience method which can be overridden so that there's no need to callsuper.init(config).voidExecute a periodic task, such as reloading, etc.protected voidservice(HttpServletRequest req, HttpServletResponse resp) Receives standard HTTP requests from the publicservicemethod and dispatches them to thedoMethod methods defined in this class.Methods inherited from class org.apache.catalina.servlets.DefaultServlet
checkIfMatch, checkIfModifiedSince, checkIfNoneMatch, checkIfUnmodifiedSince, checkSendfile, copy, copy, copy, copy, copyRange, copyRange, copyRange, doGet, doHead, doPost, executePartialPut, findXsltSource, generateETag, getReadme, getRelativePath, parseContentRange, parseRange, render, render, renderHtml, renderHtml, renderSize, renderTimestamp, renderXml, renderXml, rewriteUrl, sendNotAllowed, serveResourceMethods inherited from class javax.servlet.http.HttpServlet
doTrace, getLastModified, serviceMethods inherited from class javax.servlet.GenericServlet
getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
-
Field Details
-
DEFAULT_NAMESPACE
Default namespace.- See Also:
-
SUPPORTED_LOCKS
Pre generated raw XML for supported locks.- See Also:
-
creationDateFormat
Simple date format for the creation date ISO representation (partial). -
LOCK_SCHEME
Lock scheme used.- See Also:
-
-
Constructor Details
-
WebdavServlet
public WebdavServlet()
-
-
Method Details
-
init
Description copied from class:javax.servlet.GenericServletA convenience method which can be overridden so that there's no need to callsuper.init(config).Instead of overriding
GenericServlet.init(ServletConfig), simply override this method and it will be called byGenericServlet.init(ServletConfig config). TheServletConfigobject can still be retrieved viaGenericServlet.getServletConfig().- Overrides:
initin classDefaultServlet- Throws:
ServletException- if an exception occurs that interrupts the servlet's normal operation
-
destroy
public void destroy()Description copied from class:javax.servlet.GenericServletCalled by the servlet container to indicate to a servlet that the servlet is being taken out of service. SeeServlet.destroy().- Specified by:
destroyin interfaceServlet- Overrides:
destroyin classDefaultServlet
-
periodicEvent
public void periodicEvent()Description copied from interface:PeriodicEventListenerExecute a periodic task, such as reloading, etc.- Specified by:
periodicEventin interfacePeriodicEventListener
-
getDocumentBuilder
Return JAXP document builder instance.- Returns:
- the document builder
- Throws:
ServletException- document builder creation failed (wrappedParserConfigurationExceptionexception)
-
service
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Description copied from class:javax.servlet.http.HttpServletReceives standard HTTP requests from the publicservicemethod and dispatches them to thedoMethod methods defined in this class. This method is an HTTP-specific version of theServlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)method. There's no need to override this method.- Overrides:
servicein classDefaultServlet- Parameters:
req- theHttpServletRequestobject that contains the request the client made of the servletresp- theHttpServletResponseobject that contains the response the servlet returns to the client- Throws:
ServletException- if the HTTP request cannot be handledIOException- if an input or output error occurs while the servlet is handling the HTTP request- See Also:
-
checkIfHeaders
protected boolean checkIfHeaders(HttpServletRequest request, HttpServletResponse response, WebResource resource) throws IOException Description copied from class:DefaultServletCheck if the conditions specified in the optional If headers are satisfied.- Overrides:
checkIfHeadersin classDefaultServlet- Parameters:
request- The servlet request we are processingresponse- The servlet response we are creatingresource- The resource- Returns:
trueif the resource meets all the specified conditions, andfalseif any of the conditions is not satisfied, in which case request processing is stopped- Throws:
IOException- an IO error occurred
-
getRelativePath
Override the DefaultServlet implementation and only use the PathInfo. If the ServletPath is non-null, it will be because the WebDAV servlet has been mapped to a url other than /* to configure editing at different url than normal viewing.- Overrides:
getRelativePathin classDefaultServlet- Parameters:
request- The servlet request we are processingallowEmptyPath- Used only to identify a call from DefaultServlet, to avoid removing the trailing slash- Returns:
- the relative path
-
getPathPrefix
Description copied from class:DefaultServletDetermines the appropriate path to prepend resources with when generating directory listings. Depending on the behaviour ofDefaultServlet.getRelativePath(HttpServletRequest)this will change.- Overrides:
getPathPrefixin classDefaultServlet- Parameters:
request- the request to determine the path for- Returns:
- the prefix to apply to all resources in the listing.
-
determineMethodsAllowed
Description copied from class:DefaultServletDetermines the methods normally allowed for the resource.- Overrides:
determineMethodsAllowedin classDefaultServlet- Parameters:
req- The Servlet request- Returns:
- The allowed HTTP methods
-
doOptions
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Description copied from class:DefaultServletOverride default implementation to ensure that TRACE is correctly handled.- Overrides:
doOptionsin classDefaultServlet- Parameters:
req- theHttpServletRequestobject that contains the request the client made of the servletresp- theHttpServletResponseobject that contains the response the servlet returns to the client- Throws:
ServletException- if the request for the OPTIONS cannot be handledIOException- if an input or output error occurs while the servlet is handling the OPTIONS request
-
doPropfind
protected void doPropfind(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException PROPFIND Method.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
ServletException- If an error occursIOException- If an IO error occurs
-
doProppatch
protected void doProppatch(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException PROPPATCH Method. Dead properties support is a SHOULD in the specification and are not implemented.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
ServletException- If an error occursIOException- If an IO error occurs
-
doMkcol
protected void doMkcol(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException MKCOL Method.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
ServletException- If an error occursIOException- If an IO error occurs
-
doDelete
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Description copied from class:javax.servlet.http.HttpServletCalled by the server (via theservicemethod) to allow a servlet to handle a DELETE request. The DELETE operation allows a client to remove a document or Web page from the server.This method does not need to be either safe or idempotent. Operations requested through DELETE can have side effects for which users can be held accountable. When using this method, it may be useful to save a copy of the affected URL in temporary storage.
If the HTTP DELETE request is incorrectly formatted,
doDeletereturns an HTTP "Bad Request" message.- Overrides:
doDeletein classDefaultServlet- Parameters:
req- theHttpServletRequestobject that contains the request the client made of the servletresp- theHttpServletResponseobject that contains the response the servlet returns to the client- Throws:
ServletException- if the request for the DELETE cannot be handledIOException- if an input or output error occurs while the servlet is handling the DELETE request
-
doPut
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException Description copied from class:javax.servlet.http.HttpServletCalled by the server (via theservicemethod) to allow a servlet to handle a PUT request. The PUT operation allows a client to place a file on the server and is similar to sending a file by FTP.When overriding this method, leave intact any content headers sent with the request (including Content-Length, Content-Type, Content-Transfer-Encoding, Content-Encoding, Content-Base, Content-Language, Content-Location, Content-MD5, and Content-Range). If your method cannot handle a content header, it must issue an error message (HTTP 501 - Not Implemented) and discard the request. For more information on HTTP 1.1, see RFC 2616 .
This method does not need to be either safe or idempotent. Operations that
doPutperforms can have side effects for which the user can be held accountable. When using this method, it may be useful to save a copy of the affected URL in temporary storage.If the HTTP PUT request is incorrectly formatted,
doPutreturns an HTTP "Bad Request" message.- Overrides:
doPutin classDefaultServlet- Parameters:
req- theHttpServletRequestobject that contains the request the client made of the servletresp- theHttpServletResponseobject that contains the response the servlet returns to the client- Throws:
ServletException- if the request for the PUT cannot be handledIOException- if an input or output error occurs while the servlet is handling the PUT request
-
doCopy
COPY Method.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
IOException- If an IO error occurs
-
doMove
MOVE Method.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
IOException- If an IO error occurs
-
doLock
protected void doLock(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException LOCK Method.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
ServletException- If an error occursIOException- If an IO error occurs
-
doUnlock
UNLOCK Method.- Parameters:
req- The Servlet requestresp- The Servlet response- Throws:
IOException- If an IO error occurs
-