充当客户端的 Web 启动应用程序可以像任何其他客户端一样向服务器标识自己 - 只需让用户在会话开始时登录即可。但是由于桌面客户端可以访问本地文件系统,因此可以将用户信息存储在本地。这意味着用户 ID 和配置首选项等数据可以存储在本地硬盘上。由于我们希望我们的桌面客户端能够跨平台工作,并且由于开发人员无法确切知道该应用程序从哪个目录启动,因此我们有 首选项 API来在本地文件系统之上提供一个抽象层。
如果用户每次运行此应用程序时主要使用同一台计算机,这是存储配置信息和用户首选项的最方便的方式。这是一个例子:
/**
*
* Loads the user preferences from local storage using the Preferences API.
* The actual location of this file is platform and computer user-login
* dependant, but from the perspective of the preferences API, it is stored in
* a node referenced by the package this class resides in.
*/
private void loadPrefernces() {
try {
prefs = Preferences.userNodeForPackage(this.getClass());
}
catch(SecurityException stop) {
JOptionPane.showMessageDialog(null, "The security settings on this computer are preventing the application\n"
+ "from loading and saving certain user preference data that the program needs to function.\n"
+ "Please have your network administrator adjust the security settings to allow a Java desktop\n"
+ "application to save user preferences. The exception the program encountered is below:\n"
+ stop.toString(),
"Security Error", JOptionPane.ERROR_MESSAGE);
}
catch(Exception some) {
System.out.println("Other Preference Exception:");
System.out.println(some);
}
//extract information from the prefs object:
String username = prefs.get("user","default-newUser");
String userID = prefs.get("id", "0"); //a 0 ID means that the information was not found on the local computer.
}
//Use this method to store username and ID on the local computer.
public void saveUserPrefs() {
prefs.put("user", user.getUsername() );
prefs.put("id", "" + user.getID());
}
当然,如果这是用户第一次在计算机上运行应用程序,或者没有为用户分配 ID,上述代码对我们没有帮助。因此,我们需要构建一些登录功能。JNLP 应用程序可以像浏览器那样与 Web 服务器通信。我发现httpClient库对于实现这一点非常有帮助。如果用户的浏览器在代理后面,这可能需要一些额外的代码来允许您的 java 应用程序与服务器进行通信。