В данной статье мы рассмотрим пример работы с базой данных (далее – БД) с помощью сервлетов.
В качестве БД мы будем использовать PostgreSQL, а основу приложения возьмём из данной статьи.
Для начала, создадим БД. Открываем терминал (операционная система – Ubuntu 16.04 LTS – при использовании другой ОС – способ создания БД может отличаться) и выполняем следующую команду:
sudo -i -u postgres
После ввода пароля открываем консоль БД:
psql
И создаем саму базу данных:
postgres=# CREATE DATABASE servlets_tutorial;
Подключим нашу БД к Idea:
Внесем некоторые изменения, чтобы получилась следующая структура приложения:
Файл initDB.sql
CREATE TABLE IF NOT EXISTS developers (
id INT PRIMARY KEY,
first_name VARCHAR(50) NOT NULL,
last_name VARCHAR(100) NOT NULL,
specialty VARCHAR(100) NOT NULL,
experience INT NOT NULL,
salary DECIMAL NOT NULL
);
Файл populateDB.sql
INSERT INTO developers VALUES (1, 'Eugene', 'Suleimanov', 'Software Engineer', 3, '3000.00');
Поочередно выполним оба эти файла.
В результате мы получим следующую таблицу:
Добавим в наш pom.xml файл зависимости для postgres коннектора:
Файл pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>net.proselyte.tutorials</groupId>
<artifactId>ServletsTutorial</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>Servlets Tutorial</name>
<url>http://maven.apache.org</url>
<properties>
<javax.servlet.api.version>2.5</javax.servlet.api.version>
<tomcat.plugin.version>2.2</tomcat.plugin.version>
<postgres.connector.version>9.1-901.jdbc3</postgres.connector.version>
</properties>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${javax.servlet.api.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgres.connector.version}</version>
</dependency>
</dependencies>
<build>
<finalName>ServletsTutorial</finalName>
<plugins>
<!-- Tomcat plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>${tomcat.plugin.version}</version>
<configuration>
<path>/</path>
<port>8088</port>
</configuration>
</plugin>
</plugins>
</build>
</project>
Перейдём к созданию самого сервлета.
Класс DatabaseDemo.java
package net.proselyte.servletstutorial;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;
/**
* Simple servlet that demonstrates work with database.
*
* @author Eugene Suleimanov
*/
public class DatabaseDemo extends HttpServlet {
static final String JDBC_DRIVER = "org.postgresql.Driver";
static final String DATABASE_URL = "jdbc:postgresql://localhost:5432/servlets_tutorial";
static final String DATABASE_USER = "postgres";
static final String DATABASE_PASSWORD = "postgres";
static final String GET_ALL_DEVELOPERS_RECORDS = "SELECT * FROM developers";
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter writer = response.getWriter();
String title = "Database Demo";
String docType = "<!DOCTYPE html>";
try {
Class.forName(JDBC_DRIVER);
Connection connection = DriverManager.getConnection(DATABASE_URL, DATABASE_USER, DATABASE_PASSWORD);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(GET_ALL_DEVELOPERS_RECORDS);
writer.println(docType + "<html><head><title>" + title + "</title></head><body>");
writer.println("<h1>DEVELOPERS DATA</h1>");
writer.println("<br/>");
while (resultSet.next()) {
int id = resultSet.getInt(1);
String firstName = resultSet.getString(2);
String lastName = resultSet.getString(3);
String specialty = resultSet.getString(4);
int experience = resultSet.getInt(5);
int salary = resultSet.getInt(6);
writer.println("ID: " + id);
writer.println("First name: " + firstName + "<br/>");
writer.println("Last name: " + lastName + "<br/>");
writer.println("Specialty: " + specialty + "<br/>");
writer.println("Experience: " + experience + " years<br/>");
writer.println("Salary: $" + salary + "<br/>");
}
resultSet.close();
statement.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
writer.println("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
Файл web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Servlets Tutorial</display-name>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>net.proselyte.servletstutorial.SimpleServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>DatabaseDemo</servlet-name>
<servlet-class>net.proselyte.servletstutorial.DatabaseDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>DatabaseDemo</servlet-name>
<url-pattern>/DatabaseDemo</url-pattern>
</servlet-mapping>
</web-app>
В терминале выполним команду:
mvn tomcat7:run
Откроем браузер и перейдём по ссылке:
http://localhost:8088/DatabaseDemo
В результате мы получим следующую страницу:
На этом мы заканчиваем изучение работы с БД с помощью сервлетов.
В следующей статье мы рассмотрим работу с датой и временем.