基于java的网站架构

时间:2012-02-07 13:23:15

标签: java applet daemon java-web-start

我刚开始用Java编程,所以可能看起来很愚蠢,但我无法在互联网上找到简单的答案。这是一个“大”的问题,在深入开发之前我必须回答这个问题,所以你可以帮我节省大量的时间来尝试不同的方法。

我目前正在使用Java创建一个网站。该网站的重要特征将通过单独的Java线程(如守护进程)实现,只要用户在网站上,该线程必须在后台运行。同时,网站小程序必须具有与此主题进行通信的方式。

我认为有三种可能的解决方案:

  1. 在每个单独的页面中创建具有独立Java小程序的传统多页面网站。我不确定是否可能,出现以下问题:

    • 用户导航到另一个网页(在同一个网站上)后,java applet创建的java线程是否可以继续执行?我认为是的。
    • 新推出的java applet是否可以与已在后台运行的java线程进行通信? (我已经看到部分文档涉及通过JavaScript在Java applet之间进行通信,不确定这可以在我的情况下使用。还有其他选项吗?)
  2. 使用一个单独的Java小程序创建单页网站,负责所有导航和呈现所有页面。这解决了后台守护程序的问题,后台守护程序变得易于实现和通信,作为单个applet的一部分,但又引出了一个问题:

    • 我知道applet可以修改当前的网页。使用此功能模拟不同页面之间的导航是否可行?
  3. 创建Java Webstart应用程序,主要是从p.2中获取单个java applet并将其转换为独立应用程序。

  4. 我希望整个网站有一个外观和感觉,所以我更喜欢选项3而不是选项2和选项1而不是选项2。

    感谢您分享的任何想法。

    更新: 有人知道p1下两个问题的具体答案吗?如果可以按照描述的方式使用java线程吗?

    现在我很可能会选择制作Java Webstart应用程序。这应该是最不痛苦的方式。

    更新2: 我最终决定使用单个Java applet,如果需要,可以很容易地将其转换为JWS应用程序。我的项目的本质是我需要给与网站合作的印象,这就是为什么我要做出额外的努力使它成为一个网站。对于知识渊博的人来说,很明显,它更像是本地应用程序。 我选择的解决方案在我的情况下有以下好处: - 可以轻松地从JWS应用程序转换为Java applet并返回。 - 运行后台线程并与之通信没有问题。 - 更可靠的安全性(意味着我不需要使用任何机制将会话ID从一个applet传递到另一个applet)

    反政府: - 如果尺寸变大,启动会很慢 - 我希望避免这种情况。 - 安全问题 - 我尝试签署applet,它帮了很多忙。 - 在浏览器中工作导航按钮(来回) - 我希望能够在applet中复制它。想想applet应该能够抓住这个事件。

3 个答案:

答案 0 :(得分:1)

  

Java线程[...],只要用户在网站上,就必须在后台运行

如果正在分叉的线程是在客户端登录时保留状态,那么我将使用数据库,内存缓存或其他一些持久层来保持客户端会话状态。这是一个更典型的模型。您还可以拥有多个前端,通过网络共享会话信息。

如果您不与浏览器交谈,那么创建独立的Web应用程序可能是最佳选择。您仍然可以使用HTTP作为传输协议,在这种情况下,我建议使用像Jetty这样的Java Web实现。这将涉及显着减少技术和复杂性。

如果您需要实现网页,我肯定会使用正确的前端模型和技术。您应该将页面分成多个小程序 - 或MVC模型中的多个控制器/视图。使用小程序应该没问题。他们(或控制器)应该调用集中服务,根据信息流启动,通信和停止后台线程。

如果客户端永远不会返回,我当然还会运行另一个后台线程来超时客户端线程。您的工作线程可能会在等待一段时间后退出。

希望这有帮助。


  

java applet创建的java线程是否有可能在用户导航到另一个网页(在同一网站上)后继续执行?我认为是的。

是。分叉的线程将继续运行,直到它们终止或(如果守护进程)进程终止。

  

新推出的java applet是否可以与已在后台运行的java线程进行通信?

不确定。他们需要的是一些能够共享数据的机制。例如,您的后台线程服务可以保留Map个线程对象,其中键是某种客户端ID。每当一个线程想要与它的后台线程通信时,它就可以调用该服务来通过id查找线程。类似的东西:

BackgroundStream thread = threadService.getThread(clientId);
thread.callMethod(...);

如果存在某种同步问题/响应,那么您需要有一个条件变量或其他东西。请阅读Java threads以获取更多信息。

答案 1 :(得分:0)

在Java中的网站应用程序中使用了一种架构,它被称为Model-View-Controller。诸如Java Server Faces(Java EE 5及更高版本标准),Struts(1.x或2.x),Spring,Apache Wicket等框架被设计为使用MVC模型创建Web应用程序。问题是,您是否更喜欢框架的基于组件的体系结构(例如JSF)(此时您不应该担心)

小程序绝对是一个糟糕的选择,因为小程序被下载到客户端。有些浏览器不支持Applet,特别是在移动Web浏览器中,并且难以将安全设置应用于不受信任的applet,而且您可能不知道客户端是否已阻止该applet。

答案 2 :(得分:-1)

小程序是一个糟糕的选择,原因有两个:

1)首先,它们在客户端的浏览器上执行,而不是在服务器上执行。因此,您无法使用applet执行任何后端处理(业务逻辑或从服务器数据库获取数据)。

2)小程序非常多,并且存在安全问题。这就是为什么applet这些日子已经过时了。

现在,您将了解如何使用Java技术创建网站,因此您需要开始了解Java Server Side编程。开始学习Java Servlets和Java Server Pages。简单来说,它们是在Web服务器或应用程序服务器上执行的java程序。

然后开始阅读Java Enterprise Edition。

参考此tutorial for Java Enterprise Edition