2012-03-09 65 views
1

我试图做一个+用SpringMVC JDBC “样板” 的作品..JdbcTemplate类是空

当我访问home.vis我得到的控制台输出

:空(getJdbcTemplate()=> NULL)

为什么?

源:

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>SpringHello</display-name> 
    <servlet> 
    <servlet-name>dispatcher</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>dispatcher</servlet-name> 
    <url-pattern>*.vis</url-pattern> 
    </servlet-mapping> 
    <resource-ref> 
    <description>DB Connection</description> 
    <res-ref-name>jdbc/satmDataSource</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
    <res-auth>Container</res-auth> 
    </resource-ref> 
    <welcome-file-list> 
    <welcome-file>redirect.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 

调度-servlet.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:tx="http://www.springframework.org/schema/tx" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
         http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
         http://www.springframework.org/schema/context 
         http://www.springframework.org/schema/context/spring-context-2.5.xsd 
         http://www.springframework.org/schema/mvc 
         http://www.springframework.org/schema/mvc/spring-mvc-2.5.xsd 
         http://www.springframework.org/schema/jee 
         http://www.springframework.org/schema/jee/spring-jee-2.5.xsd 
         http://www.springframework.org/schema/tx 
         http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> 

    <description>Spring Hello World</description> 
    <jee:jndi-lookup id="dataSource" jndi-name="jdbc/satmDataSource" /> 
    <bean name="/home.vis" class="it.almaviva.springhello.web.HomeController" /> 
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> 
     <property name="prefix" value="WEB-INF/jsp/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
    <bean id="testDao" class="it.almaviva.springhello.dao.TestDao"> 
     <property name="dataSource" ref="dataSource" /> 
    </bean> 
</beans> 

TestDao.java

package it.almaviva.springhello.dao; 

import org.springframework.jdbc.core.support.JdbcDaoSupport; 

public class TestDao extends JdbcDaoSupport { 
    public int lookup() { 
     System.out.println(getJdbcTemplate()); 
     return 0; 
    } 
} 

HomeController.java

package it.almaviva.springhello.web; 

import it.almaviva.springhello.dao.*; 

import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

import org.springframework.web.servlet.ModelAndView; 
import org.springframework.web.servlet.mvc.Controller; 

public class HomeController implements Controller { 

    @Override 
    public ModelAndView handleRequest(HttpServletRequest arg0, 
      HttpServletResponse arg1) throws Exception { 
     ModelAndView mv = new ModelAndView("home"); 

     TestDao jdbc = new TestDao(); 
     mv.addObject("msg", jdbc.lookup()); 

     return mv; 
    } 

} 

谢谢!

回答

5

不要在控制器中实例化TestDao,注入它。这是依赖注入的关键。

public class HomeController implements Controller { 

    private TestDao testDao; 

    public void setTestDao(TestDao testDao) { 
     this.testDao = testDao; 
    } 

<bean name="/home.vis" class="it.almaviva.springhello.web.HomeController"> 
    <property name="testDao" ref="testDao"/> 
</bean> 

顺便说一句,你的代码写在Spring 2.0中应用的风格,一种风格,现在已经过时。新的Spring应用程序应使用@Controller注释样式(16.3 Implementing Controllers)编写。此外,自动装配(4.9 Annotation-based container configuration)和组件扫描(4.10 Classpath scanning and managed components)可减少您必须编写的锅炉板的数量。

+0

完美!谢谢 – frx08 2012-03-10 08:51:38