diff options
author | Chris Goldthorpe | 2011-10-03 18:42:15 +0000 |
---|---|---|
committer | Chris Goldthorpe | 2011-10-03 18:45:56 +0000 |
commit | 40530189922c1deb3a17b767e4ab9759c361c0b0 (patch) | |
tree | 59ea7bcb846b0a8f233fdb54ddcc97c6c77a188a | |
parent | 981ec51cc8a0c94f648703f7941448e194642819 (diff) | |
download | eclipse.platform.ua-40530189922c1deb3a17b767e4ab9759c361c0b0.tar.gz eclipse.platform.ua-40530189922c1deb3a17b767e4ab9759c361c0b0.tar.xz eclipse.platform.ua-40530189922c1deb3a17b767e4ab9759c361c0b0.zip |
Bug 359579 - [Webapp] Stack trace displayed in help system for incorrect
nav param value
-rw-r--r-- | org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java index 955dc0a3b..e0dc0f7ca 100644 --- a/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java +++ b/org.eclipse.help.webapp/src/org/eclipse/help/internal/webapp/servlet/NavServlet.java @@ -25,6 +25,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.help.ITopic; import org.eclipse.help.base.AbstractHelpScope; import org.eclipse.help.internal.HelpPlugin; +import org.eclipse.help.internal.base.MissingContentManager; import org.eclipse.help.internal.base.scope.ScopeUtils; import org.eclipse.help.internal.webapp.WebappResources; import org.eclipse.help.internal.webapp.data.RequestScope; @@ -54,8 +55,15 @@ public class NavServlet extends HttpServlet { req.setCharacterEncoding("UTF-8"); //$NON-NLS-1$ resp.setContentType("text/html; charset=UTF-8"); //$NON-NLS-1$ - String path = req.getPathInfo().substring(1); - ITopic topic = getTopic(path, locale); + String path; + ITopic topic; + try { + path = req.getPathInfo().substring(1); + topic = getTopic(path, locale); + } catch (Exception e) { + showPageNotFoundPage(req, resp); + return; + } OutputStream out = resp.getOutputStream(); for (int i = 0; i < filters.length; i++) { @@ -68,6 +76,30 @@ public class NavServlet extends HttpServlet { writer.close(); } + private void showPageNotFoundPage(HttpServletRequest req, + HttpServletResponse resp) { + String errorPage = MissingContentManager.getInstance().getPageNotFoundPage(req.getServletPath(), false); + if (errorPage != null && errorPage.length() > 0) { + String href = req.getRequestURL().toString(); + int navIndex = href.indexOf("/nav"); //$NON-NLS-1$ + if (navIndex >= 0 ) { + href = href.substring(0, navIndex); + href += "/nftopic"; //$NON-NLS-1$ + if (errorPage.charAt(0) != '/') { + href += '/'; + } + href += errorPage; + try { + resp.sendRedirect(href); + return; + } catch (IOException e) { + // Fall through + } + } + } + resp.setStatus(HttpServletResponse.SC_NOT_FOUND); + } + protected Locale getLocale (HttpServletRequest req, HttpServletResponse resp) { Locale locale; String nl = UrlUtil.getLocale(req, resp); |