Web-Systemaufbau (Super Basic) ②: AP-Serveraufbau und Grundbetrieb und [Web-Systemaufbau (Super Basic) ③: DB-Serveraufbau und Grundbetrieb] Erstellen Sie ein Websystem mit dem Web- / AP-Server und dem DB-Server unter (https://qiita.com/MARTOON/items/b037ba8161790c874e94).
--AP-Server - EC2:t2.micro - OS:Red Hat Enterprise Linux 8 (HVM), SSD Volume Type --Disk: Allzweck-SSD (GP2) 10 GB - Tomcat:Apache Tomcat 9 - Java:JDK 1.8
Die Sicherheitsgruppeneinstellungen sind nett.
Befolgen Sie die nachstehenden Anweisungen.
Ec2 auf DB-Server-Melden Sie sich als Benutzer an
Wechseln Sie zum Root-Benutzer
$ sudo su -
Melden Sie sich bei MySQL an
#mysql -uroot -ppassword
Bestätigung autorisierter Benutzer
> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
Verbindungsbenutzer erstellen
> CREATE USER 'appuser'@'%' IDENTIFIED BY 'appuser';
Ändern Sie die Berechtigungen des Benutzers
> GRANT ALL ON *.* TO 'appuser'@'%';
Stellen Sie sicher, dass der Appuser von überall aus für die Verbindung bereit ist
> select user,host from mysql.user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| appuser | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
Treiber herunterladen
# curl -O https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.12/mysql-connector-java-8.0.12.jar
Platzieren Sie den Treiber im lib-Verzeichnis von Tomcat
# mv mysql-connector-java-8.0.12.jar /opt/apache-tomcat-9.0.30/lib/
Setzen Sie einen symbolischen Link auf den Treiber
# cd /opt/apache-tomcat-9.0.30/lib/
# ln -s mysql-connector-java-8.0.12.jar mysql-connector-java.jar
Abrufen von SQL-Informationen zum Registrieren von Beispieldaten in der Datenbank
# curl -O https://downloads.mysql.com/docs/world.sql.zip
Installation entpacken
# yum install -y unzip
SQL-Datei entpacken
# unzip world.sql.zip
Geben Sie Beispieldaten in die DB ein
# mysql -uappuser -pappuser < world.sql
Melden Sie sich bei MySQL an
# mysql -uappuser -pappuser
Stellen Sie sicher, dass die Weltdatenbank hinzugefügt wurde
> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
| world |
+--------------------+
Überprüfen Sie die in der Weltdatenbank enthaltenen Tabellen
> use world;
> show tables;
+-----------------+
| Tables_in_world |
+-----------------+
| city |
| country |
| countrylanguage |
+-----------------+
Die Definition jeder Tabelle ist wie folgt.
> desc city;
+-------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+----------------+
| ID | int(11) | NO | PRI | NULL | auto_increment |
| Name | char(35) | NO | | | |
| CountryCode | char(3) | NO | MUL | | |
| District | char(20) | NO | | | |
| Population | int(11) | NO | | 0 | |
+-------------+----------+------+-----+---------+----------------+
> desc country;
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
| Code | char(3) | NO | PRI | | |
| Name | char(52) | NO | | | |
| Continent | enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') | NO | | Asia | |
| Region | char(26) | NO | | | |
| SurfaceArea | decimal(10,2) | NO | | 0.00 | |
| IndepYear | smallint(6) | YES | | NULL | |
| Population | int(11) | NO | | 0 | |
| LifeExpectancy | decimal(3,1) | YES | | NULL | |
| GNP | decimal(10,2) | YES | | NULL | |
| GNPOld | decimal(10,2) | YES | | NULL | |
| LocalName | char(45) | NO | | | |
| GovernmentForm | char(45) | NO | | | |
| HeadOfState | char(60) | YES | | NULL | |
| Capital | int(11) | YES | | NULL | |
| Code2 | char(2) | NO | | | |
+----------------+---------------------------------------------------------------------------------------+------+-----+---------+-------+
> desc countrylanguage;
+-------------+---------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+---------------+------+-----+---------+-------+
| CountryCode | char(3) | NO | PRI | | |
| Language | char(30) | NO | PRI | | |
| IsOfficial | enum('T','F') | NO | | F | |
| Percentage | decimal(4,1) | NO | | 0.0 | |
+-------------+---------------+------+-----+---------+-------+
Erstellen Sie eine einfache Webanwendung mit JSP- und Java-Programmen und führen Sie sie auf dem AP-Server aus. Wenn Sie den Ländernamen auf dem Webbildschirm eingeben und suchen, können Sie die 5 großen Städte und ihre Bevölkerung sowie die Amtssprache und deren Nutzungsverhältnis finden. Es ist ein Programm, das während einer DB-Suche angezeigt wird.
world.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<title>requestForm</title>
</head>
<body>
<p>Suchen Sie nach Großstädten und Amtssprachen in jedem Land</p>
<%--Senden Sie Text mit der GET-Methode--%>
<form action="./WorldServlet">
<p>
Bitte geben Sie den Ländernamen ein (auf Englisch):<input type="text" name="text1"><br>
Beispiel) Geben Sie Japan für Japan ein
</p>
<input type="submit" value="Suchausführung">
</form>
</html>
WorldServlet.java
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.NumberFormat;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/WorldServlet")
public class WorldServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
*Konstrukteur.
*/
public WorldServlet() {
super();
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String inputText = ""; //Speichervariable für Text 1
inputText = request.getParameter("text1");
String servername = "172.31.45.98";
String databasename = "world";
String user = "appuser";
String password = "appuser";
String serverencoding = "UTF-8";
String url = "jdbc:mysql://" + servername + "/" + databasename + "?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B9:00&rewriteBatchedStatements=true";
Connection con = null;
try {
Class.forName( "com.mysql.cj.jdbc.Driver" ).newInstance();
con = DriverManager.getConnection( url, user, password );
Statement stat = con.createStatement();
String sqlStr1 = "select country.name, city.name, city.population from city inner join country on city.countrycode=country.code where country.name='" + inputText + "' order by city.population desc limit 5;";
String sqlStr2 = "select country.name, countrylanguage.language, countrylanguage.percentage from country inner join countrylanguage on country.code=countrylanguage.countrycode where country.name='" + inputText + "' order by countrylanguage.percentage desc limit 1;";
System.out.println("sqlStr1: " + sqlStr1);
System.out.println("sqlStr2: " + sqlStr2);
ResultSet resultset1 = stat.executeQuery( sqlStr1 );
String country_name = null;
String city_name = null;
Integer city_population = 0;
String countrylanguage_language = null;
Double countrylanguage_percentage = 0.0;
//Generieren Sie eine NumberFormat-Instanz
NumberFormat nfNum = NumberFormat.getNumberInstance(); //Kommerziell getrenntes Format
NumberFormat nfPer = NumberFormat.getPercentInstance(); //Prozentformat
//Festlegen des Inhalts, der auf dem Bildschirm ausgegeben werden soll
//Stellen Sie ein, dass der Ausgabeinhalt HTML ist
response.setContentType("text/html");
//UTF den Zeichencode des Ausgabebildschirms-Auf 8 setzen
response.setCharacterEncoding("UTF-8");
//Holen Sie sich eine Writer-Klasseninstanz, die auf dem Bildschirm ausgegeben werden soll
PrintWriter pw = response.getWriter();
//HTML ausgeben
pw.println("<html>");
pw.println("<head>");
pw.println("<title>Ergebnis eingeben</title>");
pw.println("</head>");
pw.println("<body>");
pw.println("<h1>Suchergebnisse</h1>");
pw.println("<h2>" + inputText + "Großstädte und ihre Bevölkerung sind:</h2>");
pw.println("<table border='1'>");
pw.println("<tr>");
pw.println("<th>Name einer Stadt</th>");
pw.println("<th>Population</th>");
pw.println("</tr>");
while( resultset1.next() )
{
/*getString()Die Methode ist der im Argument angegebene Feldname(Säule)Holen Sie sich den Wert als String*/
city_name = resultset1.getString("city.name");
city_population = resultset1.getInt("city.population");
System.out.print("Name einer Stadt:" + city_name);
System.out.print("Städtische Bevölkerung:" + city_population);
pw.println("<tr>");
pw.println("<th>"+ city_name +"</th>");
pw.println("<th>"+ nfNum.format(city_population) +"Mann</th>");
pw.println("</tr>");
}
pw.println("</table>");
resultset1.close();
ResultSet resultset2 = stat.executeQuery( sqlStr2 );
pw.println("<h2>" + inputText + "Die offizielle Sprache und ihre Nutzungsrate sind wie folgt</h2>");
pw.println("<table border='1'>");
pw.println("<tr>");
pw.println("<th>Offizielle Terminologie</th>");
pw.println("<th>Nutzungsverhältnis</th>");
pw.println("</tr>");
while( resultset2.next() )
{
/*getString()Die Methode ist der im Argument angegebene Feldname(Säule)Holen Sie sich den Wert als String*/
countrylanguage_language = resultset2.getString("countrylanguage.language");
countrylanguage_percentage = resultset2.getDouble("countrylanguage.percentage");
System.out.print("Offizielle Terminologie:" + countrylanguage_language);
System.out.print("Nutzungsverhältnis:" + countrylanguage_percentage);
pw.println("<tr>");
pw.println("<th>"+ countrylanguage_language +"</th>");
pw.println("<th>"+ nfPer.format(countrylanguage_percentage / 100) +"</th>");
pw.println("</tr>");
}
pw.println("</table>");
resultset2.close();
stat.close();
con.close();
pw.println("</body>");
pw.println("</html>");
}
catch( SQLException e ){
/*Ausgabe der Fehlermeldung*/
System.out.println( "Connection Failed. : " + e.toString() );
/*Ich werde eine Ausnahme werfen*/
try {
throw new Exception();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}catch (ClassNotFoundException e){
/*Ausgabe der Fehlermeldung*/
System.out.println("Der Treiber konnte nicht geladen werden" + e);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally{
try{
if( con != null ){
con.close();
}
}
catch(Exception e){
/*Ausgabe der Fehlermeldung*/
System.out.println( "Exception2! :" + e.toString() );
/*Ich werde eine Ausnahme werfen*/
try {
throw new Exception();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
<servlet-name>WorldServlet</servlet-name>
<servlet-class>WorldServlet.WorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WorldServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Platzieren Sie die Anwendung wie folgt.
/opt/apache-tomcat-9.0.30/webapps/world
world
├── WEB-INF
│ ├── lib
│ │ └── World.jar
│ └── web.xml
└── world.jsp
Starten Sie den Tomcat-Dienst neu
# service tomcat restart
Redirecting to /bin/systemctl start tomcat.service
Vom Browser zum Webserver "Public DNS:8080/world/world.Verbindung zu "jsp"
Stellen Sie sicher, dass die erstellte Webseite angezeigt wird und die Verarbeitung korrekt ausgeführt wird.