使用Tomcat时,我始终将web.xml
视为一种.htaccess
或httpd.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代码中呢?就像我说的那样,不是因为我想,而是因为我想了解他们做得更好。
答案 0 :(得分:2)
从我不太了解
的目的context.xml
context.xml
到web.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是多余的。