New to Spring, I have rushed into it due to the needs of my project. I was successfully able to use most of the features of Spring when using it as a Java application but am not getting the desired results in a web-application.
I am trying to initialize my datasource in applicationContext.xml:
<context:annotation-config />
<context:component-scan base-package="learn.spring.webapp.dao" />
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/postgres" />
<property name="username" value="postgres" />
<property name="password" value="postgres" />
</bean>
<bean id="template" class="org.springframework.jdbc.core.JdbcTemplate"
autowire="constructor" />
web.xml:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
I was successfully able to initialize Spring in my application but fail to autowire jdbctemplate in my dao class.
package learn.spring.webapp.dao;
import learn.spring.webapp.model.Manga;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Component;
@Component
public class MangaDao {
@Autowired
private JdbcTemplate jdbcTemplate;
public void insert(Manga manga){
String sql = "insert into manga_list values (?,?)";
jdbcTemplate.update(sql,
new Object[]{manga.getName(), manga.getAuthor()}); //Null Pointer exception
}
}
I want to autowire the template
bean with JdbcTemplate
in my dao package. I get a NullPointerException
when I try to use the JdbcTemplate
. MangaDao
is being called from a servlet. I think I might not be using the autowired annotations correctly. Please advice.
Edit:
The servlet code that calls the DAO is:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
MangaDao md=new MangaDao();
Manga manga=new Manga();
manga.setName("Bleach");
manga.setAuthor("Kubo Tite");
md.insert(manga);
}
And the stackTrace is as follows:
SEVERE: Servlet.service() for servlet TesterServlet threw exception
java.lang.NullPointerException
at learn.spring.webapp.dao.MangaDao.insert(MangaDao.java:16)
at learn.spring.webapp.controller.TesterServlet.doGet(TesterServlet.java:33)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)