diff --git a/src/main/java/org/olat/core/dispatcher/DispatcherModule.java b/src/main/java/org/olat/core/dispatcher/DispatcherModule.java
index 29317144d38c0019bbbe7f50cf8a96896b62d2fa..08526f9469bb5c958beafd2d054009b69d2873e4 100644
--- a/src/main/java/org/olat/core/dispatcher/DispatcherModule.java
+++ b/src/main/java/org/olat/core/dispatcher/DispatcherModule.java
@@ -164,6 +164,19 @@ public class DispatcherModule {
 			log.error("Send 404 failed: url=" + url, e);
 		}
 	}
+	
+	/**
+	 * Send a 404 without log.
+	 * 
+	 * @param response The HTTP response
+	 */
+	public static final void sendNotFound(HttpServletResponse response) {
+		try {
+			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+		} catch (IOException e) {
+			//
+		}
+	}
 
 	/**
 	 * Sends a HTTP 403 response.
@@ -178,6 +191,19 @@ public class DispatcherModule {
 			log.error("Send 403 failed: url=" + url, e);
 		}
 	}
+	
+	/**
+	 * Send a 403 error without log.
+	 * 
+	 * @param response The HTTP response
+	 */
+	public static final void sendForbidden(HttpServletResponse response) {
+		try {
+			response.sendError(HttpServletResponse.SC_FORBIDDEN);
+		} catch (IOException e) {
+			//
+		}
+	}
 
 	/**
 	 * Sends a HTTP 400 response.
@@ -207,6 +233,14 @@ public class DispatcherModule {
 		}
 	}
 	
+	public static final void sendServerError(HttpServletResponse response) {
+		try {
+			response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+		} catch (IOException e) {
+			//
+		}
+	}
+	
 	/**
 	 * Sent to standard 503 if not available
 	 * @param response
diff --git a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java
index 4aba36b20e4cdebc9c27e0b4d6a99540860718bc..33c7f0b5074b7caed5371e3ee9a8fb804827732b 100644
--- a/src/main/java/org/olat/core/servlets/OpenOLATServlet.java
+++ b/src/main/java/org/olat/core/servlets/OpenOLATServlet.java
@@ -128,8 +128,7 @@ public class OpenOLATServlet extends HttpServlet {
 	}
 
 	@Override
-	protected void service(HttpServletRequest req, HttpServletResponse resp)
-	throws ServletException, IOException {
+	protected void service(HttpServletRequest req, HttpServletResponse resp) {
 
 		Tracing.setHttpRequest(req);
 		ThreadLocalUserActivityLoggerInstaller.initUserActivityLogger(req);
@@ -139,7 +138,7 @@ public class OpenOLATServlet extends HttpServlet {
 			sessionStatsManager.incrementConcurrentCounter();
 		}
 		
-		try{
+		try {
 			
 			final String method = req.getMethod();
 			if (method.equals(METHOD_PROPFIND)) {
@@ -160,6 +159,9 @@ public class OpenOLATServlet extends HttpServlet {
 	            super.service(req, resp);
 	        }
 			
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(resp);
 		} finally {
 			if(sessionStatsManager != null) {
 				sessionStatsManager.decrementConcurrentCounter();
@@ -176,13 +178,18 @@ public class OpenOLATServlet extends HttpServlet {
 	@Override
 	protected void doOptions(HttpServletRequest req, HttpServletResponse resp)
 	throws ServletException, IOException {
-		String subContext = DispatcherModule.getFirstPath(req);
-		if("/".equals(subContext)) {
-			webDAVDispatcher.doRootOptions(req, resp);
-		} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
-			webDAVDispatcher.doWebdavOptions(req, resp);
-		} else {
-			super.doOptions(req, resp);
+		try {
+			String subContext = DispatcherModule.getFirstPath(req);
+			if("/".equals(subContext)) {
+				webDAVDispatcher.doRootOptions(req, resp);
+			} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
+				webDAVDispatcher.doWebdavOptions(req, resp);
+			} else {
+				super.doOptions(req, resp);
+			}
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(resp);
 		}
 	}
 
@@ -196,9 +203,13 @@ public class OpenOLATServlet extends HttpServlet {
 	 * @throws IOException
 	 */
 	@Override
-	public void doGet(HttpServletRequest request, HttpServletResponse response) 
-	throws ServletException, IOException {
-		executeUserRequest(request, response);
+	public void doGet(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			executeUserRequest(request, response);
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(response);
+		}
 	}
 
 	/**
@@ -211,33 +222,50 @@ public class OpenOLATServlet extends HttpServlet {
 	 * @throws IOException
 	 */
 	@Override
-	public void doPost(HttpServletRequest request, HttpServletResponse response)
-	throws ServletException, IOException {
-		executeUserRequest(request, response);
+	public void doPost(HttpServletRequest request, HttpServletResponse response) {
+		try {
+			executeUserRequest(request, response);
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(response);
+		}
 	}
 	
 	@Override
-	protected void doPut(HttpServletRequest req, HttpServletResponse resp)
-	throws ServletException, IOException {
-		webDAVDispatcher.execute(req, resp);
+	protected void doPut(HttpServletRequest req, HttpServletResponse resp) {
+		try {
+			webDAVDispatcher.execute(req, resp);
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(resp);
+		}
 	}
 
 	@Override
 	protected void doDelete(HttpServletRequest req, HttpServletResponse resp)
 	throws ServletException, IOException {
-		webDAVDispatcher.execute(req, resp);
+		try {
+			webDAVDispatcher.execute(req, resp);
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(resp);
+		}
 	}
 
 	@Override
-	protected void doHead(HttpServletRequest req, HttpServletResponse resp)
-	throws ServletException, IOException {
-		String subContext = DispatcherModule.getFirstPath(req);
-		if("/".equals(subContext)) {
-			webDAVDispatcher.execute(req, resp);
-		} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
-			webDAVDispatcher.execute(req, resp);
-		} else {
-			executeUserRequest(req, resp);
+	protected void doHead(HttpServletRequest req, HttpServletResponse resp) {
+		try {
+			String subContext = DispatcherModule.getFirstPath(req);
+			if("/".equals(subContext)) {
+				webDAVDispatcher.execute(req, resp);
+			} else if("/webdav".equals(subContext) || "/webdav/".equals(subContext)) {
+				webDAVDispatcher.execute(req, resp);
+			} else {
+				executeUserRequest(req, resp);
+			}
+		} catch (ServletException | IOException e) {
+			log.error("", e);
+			DispatcherModule.sendServerError(resp);
 		}
 	}
 
@@ -283,11 +311,11 @@ public class OpenOLATServlet extends HttpServlet {
 						response.sendRedirect(redirectUri);
 						ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY);
 					} else {
-						response.sendError(HttpServletResponse.SC_NOT_FOUND);
+						DispatcherModule.sendNotFound(response);
 						ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY);
 					}
 				} else {
-					response.sendError(HttpServletResponse.SC_NOT_FOUND);
+					DispatcherModule.sendNotFound(response);
 					ServletUtil.setCacheHeaders(response, ServletUtil.CACHE_ONE_DAY);
 				}
 			}
diff --git a/src/main/java/org/olat/core/servlets/StaticServlet.java b/src/main/java/org/olat/core/servlets/StaticServlet.java
index 319696843b400967df81ce3b18e1b9a798d1576a..c2472904d8355c73855c369fa1fcf6112762d0e5 100644
--- a/src/main/java/org/olat/core/servlets/StaticServlet.java
+++ b/src/main/java/org/olat/core/servlets/StaticServlet.java
@@ -32,6 +32,7 @@ import javax.servlet.http.HttpServletResponse;
 
 import org.olat.admin.sysinfo.manager.CustomStaticFolderManager;
 import org.olat.core.CoreSpringFactory;
+import org.olat.core.dispatcher.DispatcherModule;
 import org.olat.core.gui.media.FileMediaResource;
 import org.olat.core.gui.media.MediaResource;
 import org.olat.core.gui.media.ServletUtil;
@@ -59,30 +60,32 @@ public class StaticServlet extends HttpServlet {
 	public static final String NOVERSION = "_noversion_";
 
 	@Override
-	protected void service(HttpServletRequest req, HttpServletResponse resp)
-	throws ServletException, IOException {
+	protected void service(HttpServletRequest req, HttpServletResponse resp) {
 		String userAgent = req.getHeader("User-Agent");
 		if(userAgent != null && userAgent.indexOf("BitKinex") >= 0) {
 			//BitKinex isn't allow to see this context
-			resp.sendError(HttpServletResponse.SC_FORBIDDEN);
+			DispatcherModule.sendForbidden(resp);
 		} else {
-			super.service(req, resp);
+			try {
+				super.service(req, resp);
+			} catch (ServletException | IOException e) {
+				log.error("", e);
+			}
 		}
 	}
 
 	@Override
-	protected void doGet(HttpServletRequest request, HttpServletResponse response)
-	throws ServletException, IOException {
+	protected void doGet(HttpServletRequest request, HttpServletResponse response) {
 		final String pathInfo = request.getPathInfo();
 		if (pathInfo == null) {
 			// huh? What's this, send not found, don't know what to do here
-			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			DispatcherModule.sendNotFound(response);
 		} else if (pathInfo.indexOf(NOVERSION) != -1) {
 			// no version provided - only remove mapper
 			String staticRelPath = pathInfo.substring(NOVERSION.length() + 1, pathInfo.length());
 			String normalizedRelPath = ServletUtil.normalizePath(staticRelPath);
 			if (normalizedRelPath == null) {
-				response.sendError(HttpServletResponse.SC_NOT_FOUND);
+				DispatcherModule.sendNotFound(response);
 			} else if(normalizedRelPath.endsWith("transparent.gif")){
 				deliverStatic(request, response, pathInfo, normalizedRelPath, true);
 			} else {
@@ -95,13 +98,13 @@ public class StaticServlet extends HttpServlet {
 			File file = new File(folderManager.getRootFile(), staticRelPath);
 			if(file.exists()) {
 				if(file.isDirectory()) {
-					response.sendError(HttpServletResponse.SC_FORBIDDEN);
+					DispatcherModule.sendForbidden(response);
 				} else {
 					MediaResource resource = new FileMediaResource(file);
 		    		ServletUtil.serveResource(request, response, resource);
 				}
 			} else {
-				response.sendError(HttpServletResponse.SC_NOT_FOUND);
+				DispatcherModule.sendNotFound(response);
 			}
 		} else {
 			// version provided - remove it
@@ -111,20 +114,19 @@ public class StaticServlet extends HttpServlet {
 				String staticRelPath = pathInfo.substring(start, end);
 				String normalizedRelPath = ServletUtil.normalizePath(staticRelPath);
 				if (normalizedRelPath == null) {
-					response.sendError(HttpServletResponse.SC_NOT_FOUND);
+					DispatcherModule.sendNotFound(response);
 				} else {
 					boolean expiration = !Settings.isDebuging();
 					deliverStatic(request, response, pathInfo, normalizedRelPath, expiration);
 				}
 			} else {
-				response.sendError(HttpServletResponse.SC_NOT_FOUND);
+				DispatcherModule.sendNotFound(response);
 			}
 		}	
 	}
 	
 	private void deliverStatic(HttpServletRequest request, HttpServletResponse response,
-		String pathInfo, String normalizedRelPath, boolean expiration)
-	throws IOException {
+		String pathInfo, String normalizedRelPath, boolean expiration) {
 
 		boolean notFound = false;
 		// create the file from the path
@@ -175,10 +177,10 @@ public class StaticServlet extends HttpServlet {
 		}
 		
 		if(notFound) {
-			response.sendError(HttpServletResponse.SC_NOT_FOUND);
+			DispatcherModule.sendNotFound(response);
 		} else if(staticFile.isDirectory()) {
 			//directory listing is forbidden
-			response.sendError(HttpServletResponse.SC_FORBIDDEN);
+			DispatcherModule.sendForbidden(response);
 		} else {
 			deliverFile(request, response, staticFile, expiration);
 		}