@demon123
developer

Spring MVC + JDBC, не могу подключится?

Есть приложение на Spring MVC, которая подключается к бд, берет данные и вытаскивает в html формате.
Использую JDK 8, Tomcat 8. Перепробывал много различных вариантов, так и не нашел решение. Изначально была такая ошибка
Servlet.init() for servlet dispatcherServlet threw exception
решил ее, поставив над классомSchoolDAOImpl annotation @Component
На этом мои приключения не заканчиваются.
Следующая ошибка:
c7abb78e12c342b6a2d035b39fb13f39.PNG

1) Controller
package com.springapp.mvc.controller;
import java.io.IOException;
import java.util.List;
 
import com.springapp.mvc.dao.SchoolDAO;
import com.springapp.mvc.model.School;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
 
 
@Controller
public class MainController {
 
    @Autowired
    public SchoolDAO schoolDAO;
 
    @RequestMapping(value="/", method = RequestMethod.GET )
    public  ModelAndView listSchools(ModelAndView model) throws IOException{
        List<School> listSchools = schoolDAO.list();
        model.addObject("listSchools", listSchools);
        model.setViewName("home");
 
        return model;
    }
}


2) DAO implementation
package com.springapp.mvc.dao;
 
import com.springapp.mvc.model.School;
import org.springframework.stereotype.Component;
 
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
 
@Component
public class SchoolDAOImpl implements SchoolDAO {
 
    private DataSource dataSource;
 
    public void setDataSource(DataSource dataSource) {
        this.dataSource = dataSource;
    }
 
    @Override
    public List<School> list() {
        String query = "select * from test.school";
        List<School> listSchools = new ArrayList<School>();
        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        try{
            con = dataSource.getConnection();
            ps = con.prepareStatement(query);
            rs = ps.executeQuery();
            while(rs.next()){
                School aSchool = new School();
                aSchool.setSchool__id(rs.getInt("school__id"));
                aSchool.setUid(rs.getString("uid"));
                aSchool.setGeom(rs.getString("geom"));
                aSchool.setP8c8d9d76(rs.getString("p8c8d9d76"));
                aSchool.setP1bbc78dc(rs.getInt("p1bbc78dc"));
                listSchools.add(aSchool);
            }
        }catch(SQLException e){
            e.printStackTrace();
        }finally{
            try {
                if (rs != null) {
                    rs.close();
                }
                if (ps != null) {
                    ps.close();
                }
                if (con != null) {
                    con.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return listSchools;
    }
}


3) Spring configuration
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans.xsd[/url] [url]http://www.springframework.org/schema/context[/url] http://www.springframework.org/schema/context/spring-context.xsd">
 
    <context:annotation-config />
 
       <context:component-scan base-package="com.springapp.mvc" />
 
       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
           <property name="prefix" value="/WEB-INF/pages/" />
           <property name="suffix" value=".jsp" />
       </bean>
 
       <bean id="schoolDAO" class="com.springapp.mvc.dao.SchoolDAOImpl">
           <property name="dataSource" ref="dataSource" />
       </bean>
 
       <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="root" />
           <property name="password" value="root" />
       </bean>
</beans>


4) Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <display-name>SpringMVC</display-name>
    <context-param>
        <param-name>contextClass</param-name>
        <param-value>
            org.springframework.web.context.support.AnnotationConfigWebApplicationContext
        </param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
 
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextClass</param-name>
            <param-value>
                org.springframework.web.context.support.AnnotationConfigWebApplicationContext
            </param-value>
        </init-param>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>com.springapp.mvc</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
 
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
</web-app>


Если посмотреть в логах, на вот эти строки
java.lang.NullPointerException
    com.springapp.mvc.dao.SchoolDAOImpl.list(SchoolDAOImpl.java:31)
    com.springapp.mvc.controller.MainController.listSchools(MainController.java:23)

то он выделяет вот эти
// тут находится null
con = dataSource.getConnection();
// и тут
 List<School> listSchools = schoolDAO.list();


З.Ы: Извеняюсь, что логи в изображение, хотел еще добавить pom.xml, но тостер не позволил.
  • Вопрос задан
  • 3149 просмотров
Решения вопроса 1
@demon123 Автор вопроса
developer
Спасибо всем, проблема решена.
Создал новый проект, добавил все библиотеке через зависимости maven.
Скорее всего проблема было в том, что я добавил в проект spring jdbc jar файлы другой версии, а в мавене другая версия была(и они может быть конфликтовали).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы