Работа с базой данных
Для начала создадим БД. Открываем терминал (операционная система – 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
<
ame
>
<
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
В результате получим следующую страницу: