ZK在一个项目中有多个webapps

时间:2016-02-02 08:44:47

标签: java web-applications zk

背景

我编写了2个带有netbeans 8.1的ZK Web应用程序(ZK653CE),它们都是单个任务的模块。 现在我想从应用程序A中访问应用程序B两个项目都在同一个Tomcat 8 Web服务器上。

为什么我要这样做:

应用程序A具有用户登录名并向用户显示数据。应用程序B允许任何人创建用于显示数据的模式。我希望用户启动应用程序B并创建模式(按保存关闭应用程序)。该模式应发送回应用程序A,然后应用程序A将数据的显示行为更改为新模式。我不想将这两个应用程序混合在一起,因为我希望它们保持独立。

我在搜索此主题时已经发现的内容:

  • 无法从zk项目中直接访问外部Web应用程序
  • 可以使用tomcat的共享资源概念(但我不想这样,因为我希望它能在glasfish等其他网络服务器上运行)

真正的问题:

有没有办法让两个应用程序独立(如果是,请解释或显示示例)或我是否必须合并它们?

1 个答案:

答案 0 :(得分:0)

我有很多时间尝试不同的事情,我将展示我遇到的两个最佳解决方案:

  1. 使用Cookie
  2. 可以使用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循环非常相似。

    1. 方法 只需在URL中添加一个参数(通常用于提供参数):
    2. 如果有人在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();
      

      还可以使用存储了网址的配置文件(在网络服务器上),但我不会覆盖这里