Bas*_*que 14
WebBrowserWebBrowserVaadin 7中的类提供了一种访问客户端计算环境信息的简便方法.WebBrowser通过当前Page对象访问对象.
WebBrowser webBrowser = Page.getCurrent().getWebBrowser();
Run Code Online (Sandbox Code Playgroud)
该getAddress方法提供客户端计算机/设备的明显IP地址.
String ipAddress = webBrowser.getAddress();
if ( ipAddress == null ) {
// If null, this Vaadin app is probably running inside a portlet.
}
Run Code Online (Sandbox Code Playgroud)
该WebBrowser课程可以很容易地告诉您有关客户端的更多信息.
示例:如果客户端是Mac或触摸设备(打击垫或手机),哪个浏览器引擎(Safari,Chrome,Firefox等),如果使用TLS(HTTPS),屏幕大小,时区和夏令时,区域设置等等.甚至还有一种方法可以告诉您Web浏览器是否太旧而无法与Vaadin良好协作.
您可以通过标准Java Servlet调用遍历HTTP请求信息来获取此客户端信息.但上面描述的Vaadin 班级更方便.WebBrowser
以下是我自己的应用程序中的一些实际代码,此处显示为示例.这可能不是很漂亮或理想的代码,但它可以让您了解如何查看围栏到客户端Web浏览器的环境.
一些日期时间工作使用Joda-Time库作为此代码的唯一依赖项.
通过Vaadin提供的一些便利类(VaadinSession和WrappedSession)获取标准的Servlet会话标识符.
String sessionId = VaadinSession.getCurrent().getSession().getId();
Run Code Online (Sandbox Code Playgroud)
让我们获取并使用该WebBrowser对象.
WebBrowser webBrowser = Page.getCurrent().getWebBrowser();
// Environment stuff
String ipAddress = webBrowser.getAddress(); // May be null, especially if running in a Portlet.
String userAgentInfo = webBrowser.getBrowserApplication();
String touchDevice = String.valueOf( webBrowser.isTouchDevice() );
String screenSize = webBrowser.getScreenWidth() + "x" + webBrowser.getScreenHeight();
String locale = webBrowser.getLocale().toString();
String isHttps = String.valueOf( webBrowser.isSecureConnection() );
// Date-time stuff
DateTime serverNow = DateTime.now( DateTimeZone.UTC );
java.util.Date browserCurrentDate = webBrowser.getCurrentDate();
DateTime browserCurrentDateTime = new DateTime( browserCurrentDate , DateTimeZone.UTC );
String serverClientDifference = new Period( serverNow , browserCurrentDateTime ).toString();
int offset = webBrowser.getTimezoneOffset();
int rawOffset = webBrowser.getRawTimezoneOffset();
Boolean isInDst = webBrowser.isDSTInEffect();
int dst = webBrowser.getDSTSavings();
String timeDescription = "ClientNow?" + browserCurrentDateTime + "/ServerNow?" + serverNow + "/ServerClientDiff?" + serverClientDifference + "/OffsetFromUTC?" + offset + "/RawOffsetFromUTC?" + rawOffset + "/InDST?" + isInDst + "/DST?" + dst;
Run Code Online (Sandbox Code Playgroud)
创建所有这些信息的字符串表示形式.
StringBuilder description = new StringBuilder();
description.append( "{ Account=" ).append( accountArg ); // Particular to my own app (login).
description.append( " | Username=" ).append( usernameArg ); // Particular to my own app (login).
description.append( " | SessionId=" ).append( sessionId );
description.append( " | IP_Address=" ).append( ipAddress );
description.append( " | HTTPS=" ).append( isHttps );
description.append( " | Locale=" ).append( locale );
description.append( " | TouchDevice=" ).append( touchDevice );
description.append( " | ScreenSize=" ).append( screenSize );
description.append( " | UserAgent=" ).append( userAgentInfo );
description.append( " | Time= " ).append( timeDescription );
description.append( " }" );
Run Code Online (Sandbox Code Playgroud)
示例输出:
{ Account= | Username= | SessionId=9309B2FA176D57F4D74CDC9E4E0238A8 | IP_Address=0:0:0:0:0:0:0:1 | HTTPS=false | Locale=en_US | TouchDevice=false | ScreenSize=1920x1080 | UserAgent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_5) AppleWebKit/600.3.18 (KHTML, like Gecko) Version/6.2.3 Safari/537.85.12 | Time= ClientNow?2015-03-03T21:11:25.664Z/ServerNow?2015-03-03T21:11:25.680Z/ServerClientDiff?PT-0.016S/OffsetFromUTC?-28800000/RawOffsetFromUTC?-28800000/InDST?false/DST?3600000 }
Run Code Online (Sandbox Code Playgroud)
细心的读者可能会注意到IP地址被报告为IPv6而不是更常见的IPv4.已在Ticket#8614中报道.
对于Vaadin 7之前的Vaadin应用程序,请参阅此论坛主题.
| 归档时间: |
|
| 查看次数: |
3843 次 |
| 最近记录: |