我是Servlets的新手,我尝试为数据库访问创建一个Helper类。我创建了这个简单的类,它或多或少都有效。我可以在“startUp”方法中没有任何问题地访问数据库,但是当我访问Servlets中的方法时,“dataSource”始终为null。 我做错了什么?
我正在使用带有Glassfish 4.1和Java 7的Netbeans。
Database.class
@Singleton
@Startup
public class Database {
@Resource( lookup = "jdbc/resBookStoreMySql" )
private DataSource dataSource;
@PostConstruct
private void startUp() {
System.err.println("=====================");
System.err.println(this.dataSource == null); //false
}
@Lock( LockType.READ )
public boolean isPasswordCorrect(String username, String password) {
boolean isPasswordCorrect = false;
System.err.println(this.dataSource == null); //true
// . . .
return isPasswordCorrect;
}
@Lock(LockType.READ)
public List<Book> getBooks() {
List<Book> books = new ArrayList<>();
System.err.println(this.dataSource == null); //true
// . . .
return books;
}
}
SomeServlet.jsp:
....
<jsp:useBean id="db" class="at.laubi.servlet.data.Database" scope="page" />
....
答案 0 :(得分:0)
通过使用useBean
,您实例化新的Database
对象,而不是注入它,然后@Resource
未被处理,这就是dataSource为空的原因。
正如其他人所建议的那样,你不应该直接在jsp中使用EJB,但如果你需要,则需要:
@Named("database")
添加到您的bean #{database.books}
来获取书籍列表