背景
我编写了2个带有netbeans 8.1的ZK Web应用程序(ZK653CE),它们都是单个任务的模块。 现在我想从应用程序A中访问应用程序B两个项目都在同一个Tomcat 8 Web服务器上。
为什么我要这样做:
应用程序A具有用户登录名并向用户显示数据。应用程序B允许任何人创建用于显示数据的模式。我希望用户启动应用程序B并创建模式(按保存关闭应用程序)。该模式应发送回应用程序A,然后应用程序A将数据的显示行为更改为新模式。我不想将这两个应用程序混合在一起,因为我希望它们保持独立。
我在搜索此主题时已经发现的内容:
真正的问题:
有没有办法让两个应用程序独立(如果是,请解释或显示示例)或我是否必须合并它们?
答案 0 :(得分:0)
我有很多时间尝试不同的事情,我将展示我遇到的两个最佳解决方案:
可以使用Cookie在客户端存储数据并使用服务器访问它。它通常用于会话管理或控制当前用户内容的其他部分。
要访问Cookie,可以在ZK类(Controller或Viewmodel)中使用此代码:
HttpServletRequest req = (HttpServletRequest) Executions.getCurrent().getNativeRequest();
Cookie[] cookies = req.getCookies();
这将加载当前会话的所有cookie。可以在java docs中找到HttpServletRequest类以获取更多信息(它表示原始客户端http请求)。然后可以通过数组进行迭代并查找Cookie
HttpServletResponse resp = (HttpServletResponse) Executions.getCurrent().getNativeResponse();
for(Cookie c : cookies) {
if(c.getName().equals(COOKIE_MODE)) {
externalAccess = Boolean.parseBoolean(c.getValue());
c.setMaxAge(0);
c.setValue(null);
c.setPath(NAMESPACE);
resp.addCookie(c);
}
}
如果模块是从外部模块加载的,则externalAccess存储。当然,这个外部模块必须首先创建该Cookie。 set参数用于删除Cookie设置将age设置为0意味着它的expiered也设置了值,如果使用路径创建它,则还必须设置路径,因为必须知道旧Cookie放置的位置。必须将cookie添加到客户端的HTTP响应中(来自服务器),以便客户端替换旧的Cookie。
要创建cookie,可以使用:
Cookie cookie = new Cookie(COOKIE_NAME, COOKIE_VALUE);
cookie.setPath(NAMESPACE);
HttpServletResponse resp = (HttpServletResponse) Executions.getCurrent().getNativeResponse();
resp.addCookie(cookie);
这与之前的for循环非常相似。
如果有人在localhost上使用网络服务器,那么它的地址可能就是: http://localhost:8080/ 模块被加载到/或者如果指定了子文件夹/ modul
如果名为index.zul的/ modul中有.zul
可以使用http://localhost:8080/modul/index.zul
访问它如果想要添加参数,可以这样做: http://localhost:8080/modul/index.zul?externalAccess=1
然后可以使用以下代码在index.zul(我使用MVVM)的viewmodel或controller中访问它:
String external = Executions.getCurrent().getParameter("externalAccess");
然后可以将参数转换为喜欢的参数。
要创建使用上述URL的重定向,可以使用:
Executions.sendRedirect("http://localhost:8080/modul/index.zul?externalAccess=1");
可以获得一个服务器的URL和当前的应用程序,如下所示: 服务器强>
String server = Executions.getCurrent().getScheme() + "://" + Executions.getCurrent().getServerName() + ":" + Executions.getCurrent().getServerPort();
以" /"开始的应用程序路径:
Executions.getCurrent().getContextPath() + Executions.getCurrent().getDesktop().getRequestPath();
还可以使用存储了网址的配置文件(在网络服务器上),但我不会覆盖这里