Code bị lỗi NullPointerException khi kết nối đến database

package com.xomtro.DemoWebService.config;

import java.sql.Connection;
import java.sql.DriverManager;

public class DBconnection {
    public Connection getConnect()
    {
        Connection con= null;
        String url="jdbc:mysql://localhost:3306/dhcnhn_pm?user=root&password=&useUnicode=yes&characterEncoding=UTF-8";

        try{
            Class.forName("com.mysql.jdbc.Driver");
            con = DriverManager.getConnection(url);
        }catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return con;
    }
package com.xomtro.DemoWebService.Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.xomtro.DemoWebService.Model.UserModel;
import com.xomtro.DemoWebService.config.DBconnection;
import com.xomtro.DemoWebService.service.UserService;

public class UserDao implements UserService {
    private Connection connection;
    private DBconnection connectDB;
    private ResultSet resultSet;
    private PreparedStatement preparedStatement;

    public UserDao() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void insert_user(UserModel user) {
        connection = connectDB.getConnect();
        String sql = "INSERT INTO `users`(`username`, `password`, `tengv`, `email`, `phone`,`id_role`,`id_khoa`) VALUES (?,?,?,?,?,?,?)";
        try {
            preparedStatement = connection.prepareStatement(sql);
            preparedStatement.setString(1, user.getUsername());
            preparedStatement.setString(2, user.getPassword());
            preparedStatement.setString(3, user.getTengv());
            preparedStatement.setString(4, user.getEmail());
            preparedStatement.setString(5, user.getPhone());
            preparedStatement.setInt(6, user.getId_role());
            preparedStatement.setInt(7, user.getId_khoa());
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                connection.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    
}
package com.xomtro.DemoWebService.Controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.xomtro.DemoWebService.Dao.UserDao;
import com.xomtro.DemoWebService.Model.UserModel;
import com.xomtro.DemoWebService.config.Md5Lib;

public class RegController extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public RegController() {
        super();
    }

    protected void doGet(HttpServletRequest rq, HttpServletResponse rs) throws ServletException, IOException {
        RequestDispatcher dispatcher = rq.getRequestDispatcher("/page/register.jsp");
        dispatcher.forward(rq, rs);
    }

    protected void doPost(HttpServletRequest rq, HttpServletResponse rs) throws ServletException, IOException {
        rq.setCharacterEncoding("UTF-8");
        UserModel user = new UserModel();
        Md5Lib md5=new Md5Lib();
        String username = rq.getParameter("username");
        String password = md5.md5(rq.getParameter("password"));
        String tengv = rq.getParameter("tengv");
        String email = rq.getParameter("email");
        String phone = rq.getParameter("phone");
        int id_role = 1;
        int id_khoa = 4;
        
        UserDao dao = new UserDao();
        user.setUsername(username);
        user.setPassword(password);
        user.setTengv(tengv);
        user.setEmail(email);
        user.setPhone(phone);
        user.setId_role(id_role);
        user.setId_khoa(id_khoa);
        dao.insert_user(user);
        RequestDispatcher rd = rq.getRequestDispatcher("/page/ok.jsp");
        rd.forward(rq, rs);
        

    }
}
Sep 21, 2017 5:28:46 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:DemoWebService' did not find a matching property.
Sep 21, 2017 5:28:46 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:HauiPM' did not find a matching property.
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version:        Apache Tomcat/8.0.46
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          Aug 10 2017 10:10:31 UTC
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server number:         8.0.46.0
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Windows 10
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            10.0
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          x86
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             C:\Program Files\Java\jre1.8.0_131
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_131-b11
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_BASE:         E:\JAVAWEB\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: CATALINA_HOME:         E:\apache-tomcat-8.0.46
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.base=E:\JAVAWEB\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dcatalina.home=E:\apache-tomcat-8.0.46
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dwtp.deploy=E:\JAVAWEB\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djava.endorsed.dirs=E:\apache-tomcat-8.0.46\endorsed
Sep 21, 2017 5:28:46 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dfile.encoding=Cp1252
Sep 21, 2017 5:28:46 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_131\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre1.8.0_131/bin/client;C:/Program Files/Java/jre1.8.0_131/bin;C:/Program Files/Java/jre1.8.0_131/lib/i386;E:\app\tuand\product\11.2.0\dbhome_1\bin;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files\Git\cmd;C:\Users\tuand\AppData\Local\Microsoft\WindowsApps;E:\eclipse;;.
Sep 21, 2017 5:28:47 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-nio-8080"]
Sep 21, 2017 5:28:47 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Sep 21, 2017 5:28:47 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-nio-8009"]
Sep 21, 2017 5:28:47 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
INFO: Using a shared selector for servlet write/read
Sep 21, 2017 5:28:47 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1054 ms
Sep 21, 2017 5:28:47 PM org.apache.catalina.core.StandardService startInternal
INFO: Starting service Catalina
Sep 21, 2017 5:28:47 PM org.apache.catalina.core.StandardEngine startInternal
INFO: Starting Servlet Engine: Apache Tomcat/8.0.46
Sep 21, 2017 5:28:48 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Sep 21, 2017 5:28:48 PM org.apache.jasper.servlet.TldScanner scanJars
INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
Sep 21, 2017 5:28:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["http-nio-8080"]
Sep 21, 2017 5:28:48 PM org.apache.coyote.AbstractProtocol start
INFO: Starting ProtocolHandler ["ajp-nio-8009"]
Sep 21, 2017 5:28:48 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1768 ms
Sep 21, 2017 5:29:28 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [RegController] in context with path [/DemoWebService] threw exception
java.lang.NullPointerException
    at com.xomtro.DemoWebService.Dao.UserDao.insert_user(UserDao.java:24)
    at com.xomtro.DemoWebService.Controller.RegController.doPost(RegController.java:46)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:94)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:504)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:502)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1132)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:684)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1539)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1495)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)