【发布时间】:2010-02-25 10:19:28
【问题描述】:
我正在尝试部署一个简单的 spring 应用程序。它需要一个用户名(来自一个 jsp),将该值插入到一个数据库中,并在一个新的 jsp 页面上显示一个问候语,上面写着hello!, [username]。
我的环境是:
- 操作系统:windows xp 专业版
- Db:MS 访问(这只是一开始的尝试,打算转向 mySQL)
- IDE:日食
- 服务器:Tomcat 6
我收到如下错误:
Feb 25, 2010 11:21:04 AM org.springframework.web.servlet.FrameworkServlet processRequest SEVERE: Could not complete request java.lang.IllegalArgumentException: dataSource is required
at org.springframework.jdbc.support.JdbcAccessor.afterPropertiesSe(JdbcAccessor.java:130)
at org.springframework.jdbc.core.JdbcTemplate.<init>(JdbcTemplate.java:122)
at SpringClasses.Profile.setUsername(Profile.java:32) ………
applicationContext文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="Profile" class="SpringClasses.Profile">
<property name="dataSource"><ref bean="dataSource"/></property>
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" singleton="true" destroy-method="close">
<property name="driverClassName" value="sun.jdbc.odbc.JdbcOdbcDriver"/>
<property name="url" value="jdbc:odbc:usernamedb"/>
<property name="username" value="admin"/>
<property name="password" value=""/>
</bean>
</beans>
</code>
我在控制面板->管理工具->odbc源->用户DSN下设置了DSN(usernamedb)。问题似乎出在dataSource的URL上。
控制器类和bean类的相关java代码如下
来自 ProfileFormController.java 类:
protected ModelAndView onSubmit(Object command)
{
Profile profile = (Profile) command;
String greeting = "Hello," + profile.getUsername() + "!";
profile.setUsername(profile.getUsername());
return new ModelAndView("greetingDisplay", "greeting", greeting);
}
来自 Profile.java 类:
private String username;
private JdbcTemplate jt;
private DataSource dataSource;
public Profile() {
}
public Profile(String username) {
this.username = username;
}
public String getUsername() {
return username;
}
public String setUsername(String username) {
int rowsInserted;
setDataSource(dataSource);
jt = new JdbcTemplate(dataSource);
rowsInserted = jt.update("insert into username_db (username) values(?)",new Object[] {username});
//System.out.println("In Profile.getUsername, num. of rows inserted:"+rowsInserted);
return username;
}
public void setDataSource(DataSource dataSource) {
this.jt = new JdbcTemplate(dataSource);
}
在 web.xml 中配置 Profile bean 如下:
<bean id="profileFormController" class="SpringClasses.ProfileFormController">
<property name="commandName">
<value>profile</value
</property>
<property name="formView">
<value>profile</value>
</property>
<property name="successView">
<value>greetingDisplay</value>
</property>
</bean>
在 ProfileFormController 中,我将构造函数设置如下:
public ProfileFormController() {
setCommandClass(Profile.class);
setCommandName("profile"); }
也在 web.xml 中添加了 contextLoaderServlet。
我错过了什么?非常感谢您的帮助。
谢谢
尼图。
【问题讨论】:
-
显示如何配置控制器,以及从何处获取配置文件命令
-
已编辑以提供来自 web.xml 的配置详细信息
-
虽然在问题中提到 Access 很有用,但我认为该标签没有用,因为您的问题与数据存储有关。
-
David:我想知道我提供的 URL 格式是否正确。
-
我不知道你指的是什么网址。我没有在 Spring 或 Java 中编程,所以我并没有真正查看代码,只是看看那里是否有连接字符串,我没有看到。