使用JSP读取客户端信息

  使用JSP读取客户端信息

    请阅读以下代码。如果你的使用要求不同,可对这些代码加以很方便的修改。这些代码可以使你获得:

  公司company, 用户name,版本version,main version,minor version

  操作系统(未完成!),语言language,locale等。

  建立一个新的JSP文件:

  请将下列class文件加入classpath (你要建立同样的目录结构-- de.hunsicker.http.util,当然也可以自己调节包的名称。!):

  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\";

  }

  }

  }

  /**

  * 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ü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;

  }

  }