【问题标题】:What is typical Servlet + JSP + JDBC simple application architecture? [closed]什么是典型的 Servlet + JSP + JDBC 简单应用架构? [关闭]
【发布时间】:2013-05-27 01:57:29
【问题描述】:
在简单的应用中使用Servlets & JSP,通过DataSource/Connection pool连接数据库,典型的应用架构是什么?
Connection 对象创建时,是普通应用的 servlet
超类并通过参数传递给 doGet/doPost?
如何将 Connection 对象传递给 DAO 类以检索/更新域的状态
对象?
是在 DAO 级别、特定 servlet 级别还是 servlet 的超类处理 SQL 异常?
网站模板是如何设计的?通过 JSP include 标签?
DAO 对象是在第一次实例化时构造的特定 servlet 中的属性,还是像在 doGet/doPost 方法中创建的那样位于另一层中?
DAO 中的每个小操作都应该从 DataSource 中检索连接还是更好地在 DAO 的构造函数中传递 Connection?
是所有数据都通过request.setAttribute传给JSP还是有更好的办法?
我应该只传递给 JSP 域对象/集合还是传递整个 DAO/另一个中介以进行数据检索?
我们是否应该为整个请求-响应链只实现单个 Connection 对象?如果是,如何实现?
【问题讨论】:
标签:
java
jsp
servlets
jdbc
architecture
【解决方案1】:
1) 一旦服务器启动,就会有一个连接池可用,为此我们需要在“context.xml”中指定“Resource”标签。最初将有10个连接可用(默认)。
2)你可以传递连接对象,下面的例子会让你更清楚
class A {
public static DataSource getConnection() {
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource dataSource = (DataSource)envContext.lookup("jdbc/testdb");
return dataSource;
}
}
class B {
javax.sql.DataSource ds=(DataSource)A.getConnection();
javax.sql.Connection con=ds.getConnection();
}
3)您可以派生自己的异常或预定义的异常,这取决于用例。
通常异常会在任何级别进行处理,或者您可以通过某种方式抑制。
4)在jsp中,jsp:include使用是最好的方式,因为include有自己的缺点。
5)我不清楚你的第 5 个问题
6) 构造函数级别是最好的,我希望或者你创建一个单独的连接类来处理异常,连接关闭和通道。它看起来很棒。
7)你有三个作用域:应用程序、请求和会话。不要对所有内容都使用 request.setAttribute。它有一些限制。
8) 以集合的形式传递数据很容易处理。
9)我不知道。
注意:如果你发现任何错误,不要介意