Dha*_*dya 3 java desktop-application
我将编写我的第一个基于Java的Web应用程序,而我却迷失了如何开始。
首先,我希望一个Web应用程序和一个桌面应用程序具有几乎相同的功能,而又没有将Web浏览器嵌入到桌面应用程序中的顽强想法,因为这不允许在不影响网络的情况下轻松地对桌面进行更改应用,反之亦然。
现在,这里是我的问题。
现在,我有一堆POJO,并且它们与单个类进行通信,现在,该类使用平面文件作为“数据库”,当然,在生产中,我将使用合法的数据库并仅更改单个类。这是一个好主意吗?我可以从POJO转到Web应用程序吗?
我应该使用框架吗?我希望很快就能编写出这个应用程序,因为看到了所有的商务逻辑,我只需要包装它以便其可用,所以,我不想花太多时间学习,比如说Spring( (AFAIK巨大)),但是,我也不想在整个应用程序中不断重复开发轮子。我总是可以只使用JSP和scriptlet ...
如果您对上述回答是“是”,那么您建议使用什么框架?请注意,我想要一个可以在大约3-4周的学习中开始使用的框架。
我必须从头开始编写的POJO吗?它们的LOC超过30k,所以,如果那样,我会犹豫。
你会需要:
网络框架。由于您具有Swing背景,因此JSF 2将是您最好的选择(当然,一切都会很痛苦,但是JSF将使您起床并快速上手,并将帮助您避免最悲惨的错误)。另外,将业务Pojos打包到Web GUI中是JSF的主要用例,也是最大的关注点。
一个“胶水框架”。与桌面应用程序相比,Web应用程序与桌面应用程序有很大不同。您不能自己创建视图组件-必须在浏览器请求页面时创建它们。因此,您必须找到一种创建视图对象并将所有引用传递给表示逻辑的pojo的方法,其中一些生命周期可能非常不同(这在台式机上不是问题,但是在Web上,您必须区分pojos与整个应用程序一起使用,以及一个用户会话,一个请求等)。
“胶水框架”还可以提供管理交易的额外好处。您有三种选择:
如果我能担任您的职务,那么我将使用裸JSF 2.0-这样,您只需学习一种新技术。首先,请尽量避免使用PrimeFaces之类的库-它们通常比宣传的要差。
编辑-和附录
或-什么是“依赖注入”(经过简化)
当请求到Web应用程序时,新任务从新线程开始(嗯,线程可能被回收了,但这并不重要)。
该应用程序已经运行了一段时间,并且您将需要构建的大多数对象已经构建并且不应再次创建:您拥有数据库连接池,也许是业务层的某些部分;该请求也可能只是一个会话期间发出的许多请求之一,并且您已经有许多用户正在处理的POJO。问题是-如何获得对这些对象的引用?
您可以安排应用程序,以便可以通过某些静态字段使用资源。它们本身可以是单例,也可以通过单例定位器获取。这倾向于工作,但已过时(难以测试,难以重构,难以重用,生命周期在应用程序中很难编码)。实际的代码如下所示:
public void doSomething() {
Customer Service cs = AppManager.getInstance().getCustomerService();
System.out.println(cs.getVersion());
}
Run Code Online (Sandbox Code Playgroud)如果您需要集群和会话管理,则可以构建一种特殊的代理,该代理可以知道并提供任何种类的所需对象。每种类型的对象都将以不同的名称注册为工厂。这也可以工作,并且在Java中作为JNDI实现。实际的客户端代码如下所示:
public void doSomething() throws Exception {
CustomerService cs = (CustomerService)new InitialContext().lookup("some_fancy_looking_name_in_reality_just_string");
System.out.println(cs.getVersion());
}
Run Code Online (Sandbox Code Playgroud)最后一种方法是最好的。由于最初的对象不是由您而是由服务器创建的,而是在http请求到达后由服务器创建的(详细信息取决于您选择的技术,但是您的入口点可能是JSF托管的bean或某种动作控制器),因此您可以发布您需要的参考,并让服务器照顾您。这称为“依赖注入”。您的行为就像在启动代码之前就已经做好了一切。Spring,EJB容器,CDI或JSF负责其余的工作。代码看起来像这样(只是一个例子):
@EJB
CustomerService cs;
public void doSomething() {
System.out.println(cs.getVersion());
}
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)
注意:
| 归档时间: |
|
| 查看次数: |
2292 次 |
| 最近记录: |