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<EFBFBD>nderk<EFBFBD>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;
|
|||
|
}
|
|||
|
}
|