2013-08-04 149 views
0

我正在学习如何编写网站在Java和我的问题是什么是连接到数据库的正确方法?JSP - 连接到数据库

从JSP级别连接到数据库(如网络上的许多教程建议)在我看来是一个非常糟糕的主意,因为JSP应该仅用于一个视图,而不是逻辑。

我应该创建一个从数据库中获取数据的类吗?并用“useBean”标签以某种方式初始化它?数据库连接失败时应该如何处理异常?我很了解Java SE,但在Java EE中,我是一个完整的初学者,所以任何建议和示例代码都会非常有帮助。

回答

2

你的直觉是对的。如果可能的话,您不应该直接从JSP连接到数据库。大多数程序由几个层组成。例如:

你必须拥有一个责任DAO(数据访问对象):从数据库中获取数据。它不关心那些数据会发生什么,但它会检索它。

然后你有做业务逻辑,计算等它不关心其中的数据来自于业务层,它只是假定数据是存在(但它是从DAO)

然后你具有用于准备要在JSP中使用的信息的用户界面层,执行JSP不能做的转换,过滤掉不需要的信息等等。并且再一次,它不知道数据来自何处,它只是从服务层获取它。

我建议你像这样构建你的应用程序。它使测试更容易,因为您只需测试数据库而不关心用户界面,或者只测试用户界面而不关心数据库。大多数严重的应用程序都是这样构建的,尽管通常涉及更多的图层。

注意,实际构建DAO层不要求,系统,如JPA或者Hibernate或者Spring数据可以生成大部分。

+0

非常感谢您的评论。它解释了我很多。我要像这样建立我的网站。我只有两个问题:首先关于数据库连接异常处理。 DAO方法应该抛出异常(所以可以从业务层面处理)或者捕获它们?第二个问题:在servlet中执行业务逻辑并重定向到正确的JSP页面是否是一个好习惯? –

+0

那么,我删除了我的帖子,反正,对于初学者来说,开始学习Spring/DAO/Hibernate是一个很好的挑战。这种技术适用于高数据交换的“大”站点。祝你好运 –

+0

你不应该担心DAO异常。如果你的数据库关闭了,或者不可用,那么你的应用程序可能根本就不会做任何事情,而且这种异常的类型并不真正相关。您可以捕获异常,以便能够向用户显示“网站已关闭”消息,但除此之外,您可以做的事情很少。 –

0

如果你打算写一个servlet/JSP基于Web应用程序,你应该知道关于使用两种模式:

模型1(页中心)架构基于页面。客户端浏览器将通过一系列页面,每个页面都可以使用JavaBean来执行业务逻辑。这种架构的本质是每个页面都在处理自己的输入。这种架构适用于小型项目。

enter image description here

Model 2体系结构(MVC,Servlet的中心)分开的内容的内容创建和显示。它在客户端浏览器和JSP(或表示内容的servlet)之间有一个servlet控制器。 Servlet控制器将请求发送到适当的JSP页面。在这个模型中,部分演示文稿(JSP)彼此隔离。它是更灵活,更可扩展的架构。

enter image description here

要使用模板Singleton使用数据库,可以创建在一个单独的JavaBean连接池(在第一种情况下),或在servlet-控制器init()方法(在第二种情况)。

您还可以阅读关于实现模式MVC并使用它们的框架 - Apache StrutsSpring MVC

+0

你有任何MVC模型使用代码的好例子吗?任何用户的不满或任何事情? –

+0

在这里看看,例如 - [The Java EE 5 Tutorial](http://docs.oracle.com/javaee/5/tutorial/doc/bnahb.html) –

+0

还有[Java Pet Store](http:// www.oracle.com/technetwork/java/petstore1-3-1-02-139690.html) –

1

无论thesaurier_rex说的是对的。

但我只是给一些多层

UI(你的JSP/HTML)

  1. 控制器层()
  2. 服务层(实际操作)
  3. DAO层(会与数据库交谈)
  4. 表示层(模型数据)

你可以得到更多信息here