Class BrowserTool
- java.lang.Object
-
- org.apache.velocity.tools.generic.SafeConfig
-
- org.apache.velocity.tools.generic.LocaleConfig
-
- org.apache.velocity.tools.generic.FormatConfig
-
- org.apache.velocity.tools.view.BrowserToolDeprecatedMethods
-
- org.apache.velocity.tools.view.BrowserTool
-
- All Implemented Interfaces:
java.io.Serializable
@DefaultKey("browser") @InvalidScope("application") public class BrowserTool extends BrowserToolDeprecatedMethods implements java.io.SerializableBrowser sniffing tool (session or request scope requested, session scope advised).
Usage:
BrowserTool defines properties that are used to test the client browser, operating system, device, language...
All properties are boolean, excpet those in italic which are strings (and major/minor versions which are integers)
The following properties are available:
- Device: device robot mobile tablet desktop tv
- Features:css3 dom3
- Browser:browser.name browser.majorVersion browser.minorVersion
- Rendering engine: renderingEngine.name renderingEngine.minorVersion renderingEngine.majorVersion
- Operating system: operatingsystem.name operatingsystem.majorVersion operatingsystem.minorVersion
- Specific browser tests:netscape firefox safari MSIE opera links mozilla konqueror chrome
- Specific rendering engine tests:gecko webKit KHTML trident blink edgeHTML presto
- Specific OS tests:windows OSX linux unix BSD android iOS symbian
- Languages: preferredLanguageTag (a string like 'en', 'da', 'en-US', ...), preferredLocale (a java Locale)
- IP address: IPAddress
Language properties are filtered by the languagesFilter tool param, if present, which is here to specify which languages are acceptable on the server side. If no matching language is found, or if there is no matching language, the tools defaut locale (or the first value of languagesFilter) is returned. Their value is guarantied to belong to the set provided in languagesFilter, if any.
Notes on implementation:
- The parsing algorithm is mainly empirical. Used rules are rather generic, so shouldn't need recent updates to be accurate, but accuracy remains far from guaranteed for new devices.
- Parsing should be fast, as the parser only uses a single regex iteration on the user agent string.
- Game consoles, e-readers, etc... are for now classified as mobile devices (but can sometimes be identified by their operating system).
- Needless to say, the frontier between different device types can be very thin...
Thanks to Lee Semel (lee@semel.net), the author of the HTTP::BrowserDetect Perl module.
See also:
- http://www.zytrax.com/tech/web/browser_ids.htm
- http://en.wikipedia.org/wiki/User_agent
- http://www.user-agents.org/
- https://github.com/OpenDDR
- https://devicemap.apache.org/
- http://www.useragentstring.com/pages/useragentstring.php?name=All
- https://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Cascading_Style_Sheets)
- https://en.wikipedia.org/wiki/Comparison_of_layout_engines_(Document_Object_Model)
- http://www.webapps-online.com/online-tools/user-agent-strings
- https://whichbrowser.net/data/
TODO:
- parse X-Wap-Profile header if present
- parse X-Requested-With header if present
- Since:
- VelocityTools 2.0
- Version:
- $Revision$ $Date$
- Author:
- Claude Brisson
- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description BrowserTool()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanget(java.lang.String key)java.lang.StringgetAcceptLanguage()UAParser.UAEntitygetBrowser()booleangetCss3()java.lang.StringgetDevice()booleangetDom3()java.lang.StringgetIPAddress()Get the client browser IP address.java.lang.StringgetLanguagesFilter()UAParser.UAEntitygetOperatingSystem()java.lang.StringgetPreferredLanguage()java.util.LocalegetPreferredLocale()UAParser.UAEntitygetRenderingEngine()java.lang.StringgetUserAgentString()booleanisAndroid()booleanisBlackberry()booleanisBlink()booleanisBSD()booleanisChrome()booleanisDesktop()booleanisEdgeHTML()booleanisFirefox()booleanisGecko()booleanisIOS()booleanisKHTML()booleanisKonqueror()booleanisLinks()booleanisLinux()booleanisMobile()booleanisMozilla()booleanisMSIE()booleanisNetscape()booleanisOpera()booleanisOSX()booleanisPresto()booleanisRobot()booleanisSafari()booleanisSymbian()booleanisTablet()booleanisTrident()booleanisTV()booleanisUnix()booleanisWebKit()booleanisWindows()voidsetAcceptLanguage(java.lang.String al)voidsetLanguagesFilter(java.lang.String filter)voidsetRequest(javax.servlet.http.HttpServletRequest request)Retrieves the User-Agent header from the request (if any).voidsetUserAgentString(java.lang.String ua)Sets the User-Agent string to be parsed for info.protected booleantest(java.lang.String key)java.lang.StringtoString()-
Methods inherited from class org.apache.velocity.tools.view.BrowserToolDeprecatedMethods
getCss, getCss1, getCss2, getDom0, getDom1, getDom2, getDotnet, getGeckoMajorVersion, getGeckoMinorVersion, getGeckoVersion, getIe, getIe3, getIe4, getIe4up, getIe5, getIe55, getIe55up, getIe5up, getIe6, getIe6up, getIe7, getIe7up, getIe8, getIe8up, getJavascript, getMajorVersion, getMinorVersion, getNav2, getNav3, getNav4, getNav45, getNav45up, getNav4up, getNav6, getNav6up, getNavgold, getOpera3, getOpera4, getOpera5, getOpera6, getOpera7, getOpera8, getOpera9, getUserAgent, getVersion, getVista, getWin16, getWin2k, getWin31, getWin32, getWin3x, getWin95, getWin98, getWinme, getWinnt, getWinxp, isAix, isAix1, isAix2, isAix3, isAix4, isAmiga, isBsd, isDec, isEmacs, isFreebsd, isHpux, isHpux10, isHpux9, isIrix, isIrix5, isIrix6, isMac, isMac68k, isMacppc, isMpras, isOs2, isReliant, isSco, isSinix, isSun, isSun4, isSun5, isSuni86, isUnixware, isVMS, isX11
-
Methods inherited from class org.apache.velocity.tools.generic.FormatConfig
configure, getFormat, setFormat
-
Methods inherited from class org.apache.velocity.tools.generic.LocaleConfig
getLocale, setLocale, toLocale
-
-
-
-
Method Detail
-
setRequest
public void setRequest(javax.servlet.http.HttpServletRequest request)
Retrieves the User-Agent header from the request (if any).- Parameters:
request- servlet request- See Also:
setUserAgentString(java.lang.String)
-
setUserAgentString
public void setUserAgentString(java.lang.String ua)
Sets the User-Agent string to be parsed for info. If null, the string will be empty and everything will return false or null. Otherwise, it will set the whole string to lower case before storing to simplify parsing.- Parameters:
ua- user agent string
-
setAcceptLanguage
public void setAcceptLanguage(java.lang.String al)
-
setLanguagesFilter
public void setLanguagesFilter(java.lang.String filter)
-
getLanguagesFilter
public java.lang.String getLanguagesFilter()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
get
public boolean get(java.lang.String key)
-
getUserAgentString
public java.lang.String getUserAgentString()
- Specified by:
getUserAgentStringin classBrowserToolDeprecatedMethods
-
getAcceptLanguage
public java.lang.String getAcceptLanguage()
-
getIPAddress
public java.lang.String getIPAddress()
Get the client browser IP address. In the session scope, which is the default, it corresponds to the first seen IP adress.
The tool tries to get the real IP address whenever the request has been proxied.
Please note that the result may be null.
- Returns:
- the IP address as a string
- Since:
- VelocityTools 3.0
-
getDevice
public java.lang.String getDevice()
- Returns:
- found device
- Since:
- VelocityTools 3.0
-
isRobot
public boolean isRobot()
-
isTablet
public boolean isTablet()
- Returns:
- whether found device is a tablet
- Since:
- VelocityTools 3.0
-
isMobile
public boolean isMobile()
- Returns:
- whether found device is a mobile device
- Since:
- VelocityTools 3.0
-
isDesktop
public boolean isDesktop()
- Returns:
- whether found device is a desktop device
- Since:
- VelocityTools 3.0
-
isTV
public boolean isTV()
- Returns:
- whether found device is a TV
- Since:
- VelocityTools 3.0
-
getBrowser
public UAParser.UAEntity getBrowser()
- Specified by:
getBrowserin classBrowserToolDeprecatedMethods- Returns:
- parsed browser
- Since:
- VelocityTools 3.0
-
getRenderingEngine
public UAParser.UAEntity getRenderingEngine()
- Specified by:
getRenderingEnginein classBrowserToolDeprecatedMethods- Returns:
- parsed rendering engine
- Since:
- VelocityTools 3.0
-
getOperatingSystem
public UAParser.UAEntity getOperatingSystem()
- Specified by:
getOperatingSystemin classBrowserToolDeprecatedMethods- Returns:
- parsed operating system
- Since:
- VelocityTools 3.0
-
isGecko
public boolean isGecko()
- Specified by:
isGeckoin classBrowserToolDeprecatedMethods
-
isWebKit
public boolean isWebKit()
-
isKHTML
public boolean isKHTML()
-
isTrident
public boolean isTrident()
-
isBlink
public boolean isBlink()
-
isEdgeHTML
public boolean isEdgeHTML()
-
isPresto
public boolean isPresto()
-
isChrome
public boolean isChrome()
- Specified by:
isChromein classBrowserToolDeprecatedMethods
-
isMSIE
public boolean isMSIE()
- Specified by:
isMSIEin classBrowserToolDeprecatedMethods
-
isFirefox
public boolean isFirefox()
- Specified by:
isFirefoxin classBrowserToolDeprecatedMethods
-
isOpera
public boolean isOpera()
- Specified by:
isOperain classBrowserToolDeprecatedMethods
-
isSafari
public boolean isSafari()
- Specified by:
isSafariin classBrowserToolDeprecatedMethods
-
isNetscape
public boolean isNetscape()
- Specified by:
isNetscapein classBrowserToolDeprecatedMethods
-
isKonqueror
public boolean isKonqueror()
- Specified by:
isKonquerorin classBrowserToolDeprecatedMethods
-
isLinks
public boolean isLinks()
- Specified by:
isLinksin classBrowserToolDeprecatedMethods
-
isMozilla
public boolean isMozilla()
- Specified by:
isMozillain classBrowserToolDeprecatedMethods
-
isWindows
public boolean isWindows()
- Specified by:
isWindowsin classBrowserToolDeprecatedMethods
-
isOSX
public boolean isOSX()
- Specified by:
isOSXin classBrowserToolDeprecatedMethods
-
isLinux
public boolean isLinux()
- Specified by:
isLinuxin classBrowserToolDeprecatedMethods
-
isBSD
public boolean isBSD()
-
isUnix
public boolean isUnix()
-
isAndroid
public boolean isAndroid()
-
isIOS
public boolean isIOS()
-
isSymbian
public boolean isSymbian()
-
isBlackberry
public boolean isBlackberry()
-
getCss3
public boolean getCss3()
-
getDom3
public boolean getDom3()
-
getPreferredLanguage
public java.lang.String getPreferredLanguage()
-
getPreferredLocale
public java.util.Locale getPreferredLocale()
-
test
protected boolean test(java.lang.String key)
- Specified by:
testin classBrowserToolDeprecatedMethods
-
-