All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator Maven / Gradle / Ivy

There is a newer version: 5.3.34
Show newest version
/*
 * Copyright 2002-2006 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.web.servlet.view;

import javax.servlet.http.HttpServletRequest;

import org.springframework.util.StringUtils;
import org.springframework.util.Assert;
import org.springframework.web.servlet.RequestToViewNameTranslator;
import org.springframework.web.util.UrlPathHelper;

/**
 * Simply transforms the URI of the incoming request into the view name.
 * 
 * 

Can be explicitly defined as the "viewNameTranslator" bean in a * {@link org.springframework.web.servlet.DispatcherServlet} context; else, * a plain default instance will be used. * *

The default transformation simply strips the leading slash and file * extension of the URI and returns the result as the view name with the * configured {@link #setPrefix(String) "prefix"} and and * {@link #setSuffix(String) "suffix"} added as appropriate. * *

The stripping of the leading slash and file extension can be disabled * using the {@link #setStripLeadingSlash(boolean) "stripLeadingSlash"} and * {@link #setStripExtension(boolean) "stripExtension"} properties, * respectively. * *

Find below some examples of request to view name translation. * *

 http://localhost:8080/gamecast/display.html -> display
 * http://localhost:8080/gamecast/displayShoppingCart.html -> displayShoppingCart
 * http://localhost:8080/gamecast/admin/index.html -> admin/index
 * 
* * @author Rob Harrop * @since 2.0 * @see org.springframework.web.servlet.RequestToViewNameTranslator * @see org.springframework.web.servlet.ViewResolver */ public class DefaultRequestToViewNameTranslator implements RequestToViewNameTranslator { private static final String SLASH = "/"; private String prefix = ""; private String suffix = ""; private String separator = SLASH; private boolean stripLeadingSlash = true; private boolean stripExtension = true; private UrlPathHelper urlPathHelper = new UrlPathHelper(); /** * Set the prefix to prepend to generated view names. * @param prefix the prefix to prepend to generated view names */ public void setPrefix(String prefix) { this.prefix = (prefix == null ? "" : prefix); } /** * Set the suffix to append to generated view names. * @param suffix the suffix to append to generated view names */ public void setSuffix(String suffix) { this.suffix = (suffix == null ? "" : suffix); } /** * Set the value that will replace '/' as the separator * in the view name. The default behavior simply leaves '/' * as the separator. * @param separator the desired separator value */ public void setSeparator(String separator) { this.separator = separator; } /** * Set whether or not leading slashes should be stripped from the URI when * generating the view name. Default is "true". * @param stripLeadingSlash true if leading slashes are to be stripped */ public void setStripLeadingSlash(boolean stripLeadingSlash) { this.stripLeadingSlash = stripLeadingSlash; } /** * Set whether or not file extensions should be stripped from the URI when * generating the view name. Default is "true". * @param stripExtension true if file extensions should be stripped */ public void setStripExtension(boolean stripExtension) { this.stripExtension = stripExtension; } /** * Set if URL lookup should always use the full path within the current servlet * context. Else, the path within the current servlet mapping is used * if applicable (i.e. in the case of a ".../*" servlet mapping in web.xml). * Default is "false". * @param alwaysUseFullPath true if URL lookup should always use the full path * @see org.springframework.web.util.UrlPathHelper#setAlwaysUseFullPath */ public void setAlwaysUseFullPath(boolean alwaysUseFullPath) { this.urlPathHelper.setAlwaysUseFullPath(alwaysUseFullPath); } /** * Set if the context path and request URI should be URL-decoded. * Both are returned undecoded by the Servlet API, * in contrast to the servlet path. *

Uses either the request encoding or the default encoding according * to the Servlet spec (ISO-8859-1). *

Note: Setting this to "true" requires JDK 1.4 if the encoding differs * from the VM's platform default encoding, as JDK 1.3's URLDecoder class * does not offer a way to specify the encoding. * @param urlDecode true if the context path and request URI should be URL-decoded * @see org.springframework.web.util.UrlPathHelper#setUrlDecode */ public void setUrlDecode(boolean urlDecode) { this.urlPathHelper.setUrlDecode(urlDecode); } /** * Set the {@link org.springframework.web.util.UrlPathHelper} to use for * the resolution of lookup paths. *

Use this to override the default UrlPathHelper with a custom subclass, * or to share common UrlPathHelper settings across multiple web components. * @param urlPathHelper the desired helper * @throws IllegalArgumentException if the supplied UrlPathHelper is null */ public void setUrlPathHelper(UrlPathHelper urlPathHelper) { Assert.notNull(urlPathHelper); this.urlPathHelper = urlPathHelper; } /** * Translates the request URI of the incoming {@link HttpServletRequest} to the * view name based on the configured parameters. * @see org.springframework.web.util.UrlPathHelper#getLookupPathForRequest * @see #transformPath */ public final String getViewName(HttpServletRequest request) { String lookupPath = this.urlPathHelper.getLookupPathForRequest(request); return this.prefix + transformPath(lookupPath) + this.suffix; } /** * Transform the request URI (in the context of the webapp) stripping * slashes and extensions, and replacing the separator as required. * @param lookupPath the lookup path for the current request, * as determined by the UrlPathHelper * @return the transformed path, with slashes and extensions stripped * if desired */ protected String transformPath(String lookupPath) { String path = lookupPath; if (this.stripLeadingSlash && path.startsWith(SLASH)) { path = path.substring(1); } if (this.stripExtension) { path = StringUtils.stripFilenameExtension(path); } if (!SLASH.equals(this.separator)) { path = StringUtils.replace(path, SLASH, this.separator); } return path; } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy