我是Spring的新手,我正在研究CAS。我需要查询数据库以进行用户身份验证,但我使用servlet作为控制器。因此,我需要知道是否有任何方法可以在该servlet中设置SimpleJdbcTemplate并使用它来查询数据库。如果有如何配置web.xml文件或任何其他文件。
谢谢你。
答案 0 :(得分:3)
直接向JdbcTemplate
或Servlet
注入或访问Controller
并不是一个好主意。
您可以在中间插入DAO
图层并将JdbcTemplate
注入您的DAO将是更好的方法。
为了使用JdbcTemplate
,您需要在配置中的某个位置定义DataSource
(Spring上下文通过xml或Annotations)。
如果您有UserDao
,那么您的弹簧配置如下
<bean class="com.xxx.dao.UserDAOImpl" id="userDAO">
<property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean class="org.springframework.jdbc.core.JdbcTemplate" id="jdbcTemplate">
<constructor-arg ref="dataSource"/>
</bean>
and here you need to difine your "dataSource" there are multiple ways to configure it, You may get better help from google.
现在,您的UserDaoImpl
看起来像
public class UserDAOImpl implements UserDAO {
private JdbcTemplate jdbcTemplate;
//setter and getter for jdbcTemplate
public List<Map<String, Object>> getUsers() {
String query = "select * from user";
return jdbcTemplate.queryForList(query, new HashMap<String, String>());
}
}
在您的Servlet中,您需要使用ServiceLocator
在servlet类中
...
public UserDAO getUserDao() {
return ServiceLocator.getBean(UserDAO.class);
}
...
同样有多种方法可以设计ServiceLocator
,这是简单的实现。
public class ServiceLocator implements ApplicationContextAware {
private static ApplicationContext applicationContext;
/**
* @return Returns the applicationContext.
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
public static <T> T getBean(Class<T> requiredType) throws BeansException {
return getApplicationContext().getBean(requiredType);
}
/**
* @param applicationContext The applicationContext to set.
*/
public void setApplicationContext(ApplicationContext applicationContext) {
ServiceLocator.applicationContext = applicationContext;
}
}
最后,所有这些作品都是独立的,您需要单独阅读,您将在Google或Spring论坛上获得更多精确的帮助。