Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package org.duelengine.duel.staticapps;
  
  import java.io.File;
  import java.util.Locale;
  
 
 
 public class RoutingServlet extends HttpServlet {
 	private static final Logger log = LoggerFactory.getLogger(RoutingServlet.class);
 
 	private static final long serialVersionUID = 8465487004837241467L;
 	private final static String DEFAULT_DOC = "index.html";
 
 	private SiteConfig config;
 	private FormatPrefs format;
 
 	public void init(ServletConfig servletConfig)
 			throws ServletException {
 
 		super.init(servletConfig);
 
 		try {
 			// load from config file
 			String configPath = servletConfig.getInitParameter("config-path");
 			File configFile = new File(configPath);
 			 = new ObjectMapper().reader(SiteConfig.class).readValue(configFile);
 
 		} catch (Exception ex) {
 			.error("Error loading staticapp config"ex);
 			 = new SiteConfig();
 		}
 
 		String devModeOverride = servletConfig.getInitParameter("dev-mode-override");
 		if (devModeOverride != null && !devModeOverride.isEmpty()) {
 			.info("dev-mode-override="+devModeOverride);
 			.isDevMode( Boolean.parseBoolean(devModeOverride) );
 		}
 
 		 = new FormatPrefs()
 			.setIndent(.isDevMode() ? "\t" : "")
 			.setNewline(.isDevMode() ? "\n" : "");
 
 		try {
 			String bundleName = .cdnMap();
 			ResourceBundle cdnBundle =
 				(bundleName == null) || bundleName.isEmpty() ? null :
 				ResourceBundle.getBundle(bundleName.);
 
 				cdnBundle,
 
 		} catch (URISyntaxException ex) {
 			.error("CDN URI Error"ex);
 
 				public String transformURL(String url) {
 					return url+"#CDN-ERROR";
 				}
 			};
 		}
 	}

Service the request
 
 	public void doGet(HttpServletRequest requestHttpServletResponse response) {
 		try {
 			// response headers
 
 			SiteViewPage sitePage = route(request.getServletPath());
 			if (sitePage == null) {
 				defaultServlet(requestresponse);
 				return;
 			}
 
			DuelContext context = new DuelContext()
				.setData(sitePage.data())
				.setOutput(response.getWriter());
			if (sitePage.extras() != null) {
				// ambient client-side data
				context.putExtras(sitePage.extras());
			}
			if (view == null) {
				defaultServlet(requestresponse);
				return;
			}
			// response body
			view.render(context);
catch (Exception ex) {
			try {
				ex.printStackTrace(response.getWriter());
catch (IOException ex2) {
			}
		}
	}

Use the config to statically route the request to the view.

Parameters:
servletPath
Returns:
	private SiteViewPage route(String servletPath) {
		.info("routing: "+servletPath);
		if (.views() == null) {
			return null;
		}
		// TODO: expand routing capabilities beyond exact match and default doc
		SiteViewPage page = .views().get(servletPath.substring(1));
		if (page == null) {
			if (servletPath.endsWith("/")) {
				// continue to attempt to resolve with default document
				return route(servletPath+);
			}
			return null;
		}
		return page;
	}

Pass the request onto the default servlet

Parameters:
request
response
Throws:
javax.servlet.ServletException
java.io.IOException
	private void defaultServlet(HttpServletRequest requestHttpServletResponse response)
		getServletContext().getNamedDispatcher("default").forward(requestresponse);
	}
New to GrepCode? Check out our FAQ X