背景:
我用NetBeans8.1编写了两个ZK应用程序(ZK653CE),它们都是一个任务的模块。现在,我想从应用程序A中访问应用程序B,这两个项目都位于同一个Tomcat 8 the服务器上。
为什么我想这么做:
应用程序A有一个用户登录名,并向用户显示数据。应用程序B允许任何人创建显示数据的模式。我希望用户启动应用程序B并创建一个模式(按下保存关闭应用程序)。此模式将被发送回应用程序A,然后应用程序A将数据的显示行为更改为新模式。我不想把这两个应用程序混为一谈,因为我希望它们保持独立。
我在搜索这个主题时已经知道的:
真正的问题:
有没有办法使这两个应用程序独立(如果是,请解释或显示一个例子),或者我必须合并他们?
发布于 2016-02-19 04:41:54
我有很多时间尝试不同的事情,我会给出两个最好的解决方案:
您可以使用Cookies在客户端存储数据,并使用服务器访问数据。它通常用于会话管理或控制当前用户的内容的其他部分。
要访问Cookies,可以在ZK类(Controller或Viewmodel)中使用此代码:
HttpServletRequest req = (HttpServletRequest) Executions.getCurrent().getNativeRequest();
Cookie[] cookies = req.getCookies();
这将加载当前会话的所有cookie。有关更多信息,可以在java文档中找到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将年龄设置为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循环非常相似。
如果本地主机上有一个one服务器,那么它的地址可能是:http://localhost:8080/,一个模块被加载到/或者如果一个子文件夹被指定为/modul
如果一个人在/modul中有一个名为index.zul的index.zul
您可以使用http://localhost:8080/modul/index.zul访问它。
如果想要添加一个参数,它将执行如下操作:http://localhost:8080/modul/index.zul?externalAccess=1
然后,您可以在index.zul的视图模型或控制器(我使用了MVVM)中使用以下代码访问它:
String external = Executions.getCurrent().getParameter("externalAccess");
然后,我们可以将参数转换为喜欢的人。
若要创建使用上面URL的重定向,可以使用以下命令:
Executions.sendRedirect("http://localhost:8080/modul/index.zul?externalAccess=1");
您可以获得one服务器和当前应用程序的URL,如:服务器:
String server = Executions.getCurrent().getScheme() + "://" + Executions.getCurrent().getServerName() + ":" + Executions.getCurrent().getServerPort();
对于以“/”开头的应用程序路径:
Executions.getCurrent().getContextPath() + Executions.getCurrent().getDesktop().getRequestPath();
还可以使用一个配置文件来存储URL(在webserver上),但我将在这里不讨论这个问题。
https://stackoverflow.com/questions/35148642
复制