我正在尝试创建简单的网络应用程序。并停留在数据源注入上。似乎有几个问题。那么我就从我的困惑开始吧。据我了解,有两种(至少)方法将 DataSource 注入 Servlet:
web.xml sample
<resource-ref>
<res-ref-name>jdbc/MyDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<injection-target>
<injection-target-class>ua.test.TestServlet</injection-target-class>
<injection-target-name>dataSource</injection-target-name>
</injection-target>
</resource-ref>
@资源 sample
public class TestServlet extends HttpServlet{
@Resource
private DataSource dataSource;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
我的困惑:web.xml
在我的简单项目中,Tomcat 7 不起作用。在我看来,web.xml
该选项应该可以工作,因为 Java 5 之前没有注释。请解释一下。
Update:
数据源配置
<Resource name="jdbc/MyDB"
type="javax.sql.DataSource"
auth="Container"
username="SA"
password=""
driverClassName="org.hsqldb.jdbcDriver"
url="jdbc:hsqldb:file:~/database/my_db"
/>
尝试取出injection-target
进入web.xml
并使用name
属性上的@Resource
注解:
public class TestServlet extends HttpServlet {
@Resource(name = "jdbc/MyDB")
private DataSource dataSource;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
这在我的 Tomcat 7.0.50 本地测试中有效。如果您正在寻找无注释的方法,我还没有得到它的工作,即使它应该给出他们的变更日志1.
EDIT
我仍然没有找到解决方案,但我很好奇为什么这不起作用,所以我看了一下injection-target
代码。我发现它加载了context.xml
首先输入,并从中获取设置web.xml
,但选择不覆盖它在其中找到的配置context.xml
因为它已经看到了jdbc/MyDB
入口。我不知道如何获得injection-target
设置成context.xml
或数据库设置如driverClassName
into web.xml
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)