context.xml的说明

时间:2014-04-18 05:16:33

标签: java tomcat servlets jdbc

使用Tomcat时,我始终将web.xml视为一种.htaccesshttpd.conf等价物。似乎很自然地可能需要某种方式来配置Web服务器。

但是,我不太明白context.xml的目的。例如,在使用JDBC时,为什么我必须在resource-ref中添加web.xml,在Resource中添加context.xml更多信息?我可以删除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代码中呢?就像我说的那样,不是因为我想,而是因为我想了解他们做得更好。

2 个答案:

答案 0 :(得分:2)

  

我不太了解context.xml

的目的
context.xmlweb.xml标记调用

<context-param>当您在创建应用程序时首先加载web.xml,并且它将为其中配置的contexts创建的参考。

  

我不太了解context.xml

的目的

因此,context.xml的目的是添加代码分离。你可以为不同的目的设置不同的上下文。例如,对于数据库连接,使用其他框架等,

  

我可以删除context.xml文件并以某种方式在我的代码中实例化DataSource吗?

是的,您可以通过在datasource本身配置web.xml来实现这一目标。

希望这会有所帮助!!

答案 1 :(得分:2)

初步问题:

  

我不太了解context.xml的目的

在Tomcat中,您经常会看到术语&#34; Context&#34;。当您看到它时,它只是指您的应用程序(即Context ==您的网络应用程序)。因此, /META-INF/context.xml 是特定于您的应用程序的配置文件(实际上,它是配置文件之一,因为有others)。

  

例如,在使用JDBC时,为什么我必须在web.xml中添加resource-ref,在context.xml中添加更多信息的资源?

你不是。您不需要向web.xml添加任何内容。如果在 /META-INF/context.xml 中定义资源,Tomcat将创建您的资源并通过JNDI公开它。然后,您可以像检索JNDI中的任何资源一样检索它。

  

我可以删除context.xml文件并以某种方式在我的代码中实例化DataSource吗?

可能。看到Spring用户在他们的Spring bean定义中创建一个DataSource是很常见的。如果你不使用Spring,你仍然可以这样做,但这会更有效。

无论您如何操作,如果在应用程序中设置DataSource,都会失去一些灵活性。例如,您无法跨多个应用程序共享DataSource,您的应用程序必须知道如何设置DataSource。如果您在服务器的配置中定义DataSource(即使用Resource标签),那么您的应用程序不需要此信息。

由san krish回复:

  

因此,context.xml的目的是添加代码分离。你可以为不同的目的设置不同的上下文。例如,对于数据库连接,使用其他框架等,

Context标记的目的是配置上下文(即您的应用程序)。它可能使您能够将应用程序的某些方面(如DataSource)从代码中提取出来并进入配置,但这只是外部化配置的好处。这不是此文件的目的。

  

是的,您可以通过在web.xml中配置数据源来实现。

不,使用Tomcat,您无法严格通过web.xml配置DataSource。它无法提供创建DataSource所需的web.xml中的所有信息。因此,您需要为DataSource定义Resource标记,并且在web.xml中指定DataSource是多余的。