在使用Tomcat时,我总是将web.xml视为一种.htaccess或httpd.conf等价物。这似乎是很自然的,可能会有某种方式配置一个web服务器。
但是,我不太明白context.xml的目的。例如,在使用JDBC时,为什么我必须在web.xml中添加一个web.xml,并在context.xml中添加一个包含更多信息的Resource?我可以删除context.xml文件并在代码中以某种方式实例化DataSource吗?我这样问是因为这样的假设例子能帮助我理解。
编辑:我正试图了解在/META-INF/context.xml这样的信任中发生了什么
<Context>
<Resource name="jdbc/postgres" auth="Container" type="javax.sql.DataSource"
driverClassName="org.postgresql.Driver" url="jdbc:postgresql://127.0.0.1:5432"
username="postgres" password="yes" maxActive="20" maxIdle="10"
maxWait="-1" />
</Context>和,在WEB-INF/web.xml中
<resource-ref>
<description>postgreSQL Datasource example</description>
<res-ref-name>jdbc/postgres</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>为什么我必须把这两个都放进去才能使用JDBC呢?他们到底在做什么?除了Java代码之外,还有其他方法来做同样的事情吗?就像我说的,不是因为我想,而是因为我想了解他们做的更好。
发布于 2014-04-18 05:57:59
我不太明白
context.xml的目的
context.xml是从web.xml通过<context-param>标记调用的。在创建应用程序时,当您的contexts首先加载时,它将为 web.xml 创建在中配置的引用。
我不太明白
context.xml的目的
因此,context.xml的目的是增加代码的分离。您可以为了不同的目的而拥有不同的上下文。例如,对于数据库连接,使用其他框架等。
我可以删除
context.xml文件并在代码中以某种方式实例化DataSource吗?
是的,您可以通过在datasource本身中配置web.xml来实现这一点。
希望这能帮上忙!
发布于 2014-04-18 15:30:56
回答您的初始问题:
我不太明白context.xml的目的
在Tomcat中,您经常会看到"上下文“这个词。当您看到这一点时,它只是指您的应用程序(即上下文==,您的web应用程序)。因此,/META/context.xml是特定于应用程序的配置文件(实际上,它是配置文件之一,因为有其他)。
例如,在使用JDBC时,为什么我必须在web.xml中添加一个资源-ref,以及在context.xml中添加一个包含更多信息的资源?
不需要,您不需要向web.xml添加任何内容。如果在/META/context.xml中定义资源,Tomcat将创建您的资源并通过JNDI公开它。然后,您可以像从JNDI中检索任何资源一样检索它。
我可以删除context.xml文件并在代码中以某种方式实例化DataSource吗?
有可能。在Spring定义中看到Spring用户创建一个DataSource是很常见的。如果您不使用Spring,您仍然可以这样做,但这将是更多的工作。
不管您是如何做到这一点的,如果您在应用程序中设置了DataSource,就会失去一些灵活性。例如,您不能在多个应用程序之间共享DataSource,并且您的应用程序必须知道如何设置DataSource。如果在服务器配置中定义了DataSource (即使用资源标记),则应用程序不需要这些信息。
对圣克里什的回应:
因此,context.xml的目的是增加代码的分离。您可以为了不同的目的而拥有不同的上下文。例如,对于数据库连接,使用其他框架等。
上下文标记的目的是配置上下文(即应用程序)。它可能为您提供了将应用程序的某些方面(如DataSource )从代码中提取到配置中的能力,但这只是将配置外部化的好处。这不是这个文件的目的。
是的,您可以通过在web.xml本身中配置数据源来实现这一点。
不,使用Tomcat不能通过DataSource严格地配置web.xml。在web.xml中提供创建DataSource所需的所有信息是不可能的。因此,您需要为您的DataSource定义一个资源标记,在web.xml中指定您的DataSource是多余的。
https://stackoverflow.com/questions/23147836
复制相似问题