271 lines
6.2 KiB
Java
271 lines
6.2 KiB
Java
Getting information regarding the client browser using JSP
|
||
|
||
package de.hunsicker.http.util;
|
||
|
||
|
||
import java.util.*;
|
||
import javax.servlet.*;
|
||
import javax.servlet.http.*;
|
||
|
||
public class Browser extends HttpServlet
|
||
{
|
||
protected HttpServletRequest request;
|
||
protected HttpSession session;
|
||
|
||
protected String userAgent;
|
||
protected String company; // Firmenname des Herstellers
|
||
protected String name; // Bezeichnung des Browsers
|
||
protected String version; // Version
|
||
protected String mainVersion; // Hauptversion
|
||
protected String minorVersion; // Unterversion
|
||
protected String os; // Betriebssystem
|
||
protected String language = "de"; // Sprachcode Standard
|
||
protected Locale locale; // Locale-Objekt mit den aktuellen
|
||
// Spracheinstellungen
|
||
|
||
private Hashtable supportedLanguages; // Untersttzte Sprachen
|
||
|
||
public Browser(HttpServletRequest request, HttpSession session)
|
||
{
|
||
this.initialize();
|
||
this.request = request;
|
||
this.session = session;
|
||
|
||
this.setUserAgent(this.request.getHeader("User-Agent"));
|
||
this.setCompany();
|
||
this.setName();
|
||
this.setVersion();
|
||
this.setMainVersion();
|
||
this.setMinorVersion();
|
||
this.setOs();
|
||
this.setLanguage();
|
||
this.setLocale();
|
||
}
|
||
|
||
public void initialize()
|
||
{
|
||
this.supportedLanguages = new Hashtable(2);
|
||
this.supportedLanguages.put("en", "");
|
||
this.supportedLanguages.put("de", "");
|
||
}
|
||
|
||
public void setUserAgent(String httpUserAgent)
|
||
{
|
||
this.userAgent = httpUserAgent.toLowerCase();
|
||
}
|
||
|
||
private void setCompany()
|
||
{
|
||
if (this.userAgent.indexOf("MSIE") > -1)
|
||
{
|
||
this.company = "Microsoft";
|
||
}
|
||
else if (this.userAgent.indexOf("opera") > -1)
|
||
{
|
||
this.company = "Opera Software";
|
||
}
|
||
else if (this.userAgent.indexOf("mozilla") > -1)
|
||
{
|
||
this.company = "Netscape Communications";
|
||
}
|
||
else
|
||
{
|
||
this.company = "unknown";
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Liefert den Firmennamen des Herstellers des verwendeten Browsers.
|
||
*/
|
||
public String getCompany()
|
||
{
|
||
return this.company;
|
||
}
|
||
|
||
private void setName()
|
||
{
|
||
if (this.company == "Microsoft")
|
||
{
|
||
this.name = "Microsoft Internet Explorer";
|
||
}
|
||
else if (this.company == "Netscape Communications")
|
||
{
|
||
this.name = "Netscape Navigator";
|
||
}
|
||
else if (this.company == "Operasoftware")
|
||
{
|
||
this.name = "Operasoftware Opera";
|
||
}
|
||
else
|
||
{
|
||
this.name = "unknown";
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Liefert den Namen des verwendeten Browsers.
|
||
*/
|
||
public String getName()
|
||
{
|
||
return this.name;
|
||
}
|
||
|
||
private void setVersion()
|
||
{
|
||
int tmpPos;
|
||
String tmpString;
|
||
|
||
if (this.company == "Microsoft")
|
||
{
|
||
String str = this.userAgent.substring(this.userAgent.indexOf("msie") + 5);
|
||
this.version = str.substring(0, str.indexOf(";"));
|
||
}
|
||
else
|
||
{
|
||
tmpString = (this.userAgent.substring(tmpPos = (this.userAgent.indexOf("/")) + 1,
|
||
tmpPos + this.userAgent.indexOf(" "))).trim();
|
||
this.version = tmpString.substring(0, tmpString.indexOf(" "));
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Liefert die Versionsnummer des verwendeten Browsers.
|
||
*/
|
||
public String getVersion()
|
||
{
|
||
return this.version;
|
||
}
|
||
|
||
private void setMainVersion()
|
||
{
|
||
this.mainVersion = this.version.substring(0, this.version.indexOf("."));
|
||
}
|
||
|
||
/**
|
||
* Liefert die Hauptversionsnummer des verwendeten Browsers.
|
||
*/
|
||
public String getMainVersion()
|
||
{
|
||
return this.mainVersion;
|
||
}
|
||
|
||
private void setMinorVersion()
|
||
{
|
||
this.minorVersion = this.version.substring(this.version.indexOf(".") + 1).trim();
|
||
}
|
||
|
||
/**
|
||
* Liefert die Unterversionsnummer des verwendeten Browsers.
|
||
*/
|
||
public String getMinorVersion()
|
||
{
|
||
return this.minorVersion;
|
||
}
|
||
|
||
private void setOs()
|
||
{
|
||
if (this.userAgent.indexOf("win") > -1)
|
||
{
|
||
if (this.userAgent.indexOf("windows 95") > -1 || this.userAgent.indexOf("win95") > -1)
|
||
{
|
||
this.os = "Windows 95";
|
||
}
|
||
if (this.userAgent.indexOf("windows 98") > -1 || this.userAgent.indexOf("win98") > -1)
|
||
{
|
||
this.os = "Windows 98";
|
||
}
|
||
if (this.userAgent.indexOf("windows nt") > -1 || this.userAgent.indexOf("winnt") > -1)
|
||
{
|
||
this.os = "Windows NT";
|
||
}
|
||
if (this.userAgent.indexOf("win16") > -1 || this.userAgent.indexOf("windows 3.") > -1)
|
||
{
|
||
this.os = "Windows 3.x";
|
||
}
|
||
}
|
||
else if (this.userAgent.indexOf("Mac") > -1 )
|
||
{
|
||
if (this.userAgent.indexOf("Mac_PowerPC") > -1 || this.userAgent.indexOf("Mac_PPC") > -1)
|
||
{
|
||
this.os = "Macintosh Power PC";
|
||
}
|
||
else if (this.userAgent.indexOf("Macintosh") > -1)
|
||
{
|
||
this.os = "Macintosh";
|
||
}
|
||
else
|
||
{
|
||
this.os = "Unknown Mac";
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Liefert den Namen des Betriebssystems.
|
||
*/
|
||
public String getOs()
|
||
{
|
||
return this.os;
|
||
}
|
||
|
||
private void setLanguage()
|
||
{
|
||
String prefLanguage = this.request.getHeader("Accept-Language");
|
||
|
||
if (prefLanguage != null)
|
||
{
|
||
String language = null;
|
||
StringTokenizer st = new StringTokenizer(prefLanguage, ",");
|
||
|
||
int elements = st.countTokens();
|
||
|
||
for (int idx = 0; idx < elements; idx++)
|
||
{
|
||
if (this.supportedLanguages.containsKey((language = st.nextToken())))
|
||
{
|
||
this.language = this.parseLocale(language);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/*
|
||
* Hilfsfunktion fr setLanguage().
|
||
*/
|
||
private String parseLocale(String language)
|
||
{
|
||
StringTokenizer st = new StringTokenizer(language, "-");
|
||
|
||
if (st.countTokens() == 2)
|
||
{
|
||
return st.nextToken();
|
||
}
|
||
else
|
||
{
|
||
return language;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Liefert das L<>nderk<72>rzel der vom Benutzer
|
||
* bevorzugten Sprache.
|
||
*/
|
||
public String getLanguage()
|
||
{
|
||
return this.language;
|
||
}
|
||
|
||
private void setLocale()
|
||
{
|
||
this.locale = new Locale(this.language, "");
|
||
}
|
||
|
||
/**
|
||
* Liefert ein Locale-Objekt mit der Sprach-Prferenz des verwendeten Browsers
|
||
*/
|
||
public Locale getLocale()
|
||
{
|
||
return this.locale;
|
||
}
|
||
}
|