Windows」カテゴリーアーカイブ

Java開発環境構築8(挫折)

※Java開発環境構築7で「次はデータをデータベースに保存できるようにする。」と言ったが、結果的に実現できなかった。
理由は、MySQLがデフォルトでSSL接続を要求しているためだということはわかっている。試行錯誤の上、いったんあきらめることとした。
失敗に終わっている過程を示しておく。皆様に自分のスキル不足をお詫びする。申し訳ございません。

Java開発環境構築5に作成したデータベースmydbに、記事の保存用のtopicという名前のテーブルを作成する。

Enter password: hoge
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 8.0.21 MySQL Community Server – GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

mysql>

〇テーブルの作成
MySQLのクライアントを起動し、「USE mydb」でデータベースmydbを選択し、次のCREATE文を実行する。また動作確認用に1行データをINSERTしておく。

mysql> USE mydb;
Database changed
mysql> CREATE TABLE topic(
-> ID INTEGER NOT NULL AUTO_INCREMENT,
-> TITLE VARCHAR(100),
-> CONTENT VARCHAR(200),
-> POST_DATE TIMESTAMP NOT NULL,
-> PRIMARY KEY(ID)
-> );
Query OK, 0 rows affected (1.21 sec)

mysql> INSERT INTO topic(TITLE, CONTENT) VALUES(‘テスト’, ‘テストです’);
ERROR 1364 (HY000): Field ‘POST_DATE’ doesn’t have a default value
mysql>

「ERROR 1364」はMySQLのバージョンが変わったために起きたエラーなので、
設定ファイルを見つけようとしましたが、私には見つからず、ここでは

mysql> INSERT INTO topic(TITLE, CONTENT, POST_DATE) VALUES(‘テスト’, ‘テストです’, ‘2020-08-27 14:32:00’);
Query OK, 1 row affected (0.09 sec)

というように、仮の値を入れて対応してみた。

mysql> SELECT * FROM topic;
+—-+——–+————+———————+
| ID | TITLE | CONTENT | POST_DATE |
+—-+——–+————+———————+
| 1 | テスト | テストです | 2020-08-27 14:32:00 |
+—-+——–+————+———————+
1 row in set (0.03 sec)

mysql>exit

〇保存処理の追加
ここでは、Java開発環境構築7に作成した「SampleWeb0003」プロジェクトをコピー・ペーストして作業を進める。「パッケージ・エクスプローラー」ビュー上で、「SampleWeb0003」プロジェクトを右クリック→[コピー]する。そして、同ビュー上で右クリック→[貼り付け]する。プロジェクト名を「SampleWeb0004」として「コピー」を押す。

コンテキスト設定が「SampleWeb0003」プロジェクトと同じにならないよう、「SampleWeb0004」プロジェクト上で右クリック→[プロパティー]を選択し、「Webプロジェクトの設定」パネルで、「コンテキスト・ルート」を「SampleWeb0004」に変更する。

Webアプリケーションをサーバ上で動作させるために、このプロジェクトをWTPのサーバに設定する必要がある。「サーバー」ビューで「ローカル・ホストの Tomcat v9.0」サーバを選択し、右クリック→[追加および除去]を選択。次の画面で使用可能なプロジェクトの「SampleWeb0004」を選択し、「追加」ボタンを押す。「完了」を押して画面を閉じる。この操作を行わないと、このWEBアプリケーションは動作しないので、注意する。

〇変更するファイルの概要
「SampleWeb0004」プロジェクトに変更・追加するファイルは「JDBCドライバ」と「データベースとの接続処理を行うクラス」と「保存処理を追加するクラス」となる。

〇JDBCドライバの配置
「C:\Program Files (x86)\MySQL\Connector J 5.1\mysql-connector-java-5.1.49-bin.jar」をコピーし、「SampleWeb0004/WebContent/WEB-INF/lib」以下に配置する。

〇ConnectionManager.java
Java開発環境構築6で作成したものと同じで、パッケージ名だけ、「hoge」から「blog」となる。

package blog;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* シンプルなコネクション管理クラス
*/
public class ConnectionManager {
/**
* JDBCドライバのクラス名
*/
final static String DRIVER = “com.mysql.jdbc.Driver”;

/**
* データベースのURL
*/
final static String URL = “jdbc:mysql://localhost/mydb”;

/**
* データベースのユーザー
*/
final static String USER = “root”;

/**
* データベースのパスワード
*/
final static String PASS = “hoge”;

/**
* Connectionを取得
*/
public static Connection getConnection()
throws SQLException {
try{
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new IllegalStateException (
“fail to class load :”
+ e.getMessage());
}
Connection con = DriverManager.getConnection(URL, USER, PASS);
return con;
}
}

〇BlogControllerクラスの変更
Listでtopicsを保持するのをやめ、DBに保持してアクセスする。postTopic()メソッドとgetTopics()メソッドの中が大きく変わっている。

変更後のBlogController.java

package blog;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
// import java.util.Date;
import java.util.List;

/**
* Blogを操作するビジネスロジック
*/
public class BlogController {

/**
* シングルトンのインスタンス
*/
private static BlogController controller = new BlogController();

/**
* このクラスのインスタンスを取得
* @return BlogControllerのインスタンス
*/
public static BlogController getInstanse(){
return controller;
}
private BlogController(){
}

/**
* トピックをポスト(登録)する
* @param topic トピック
*/
public void postTopic(Topic topic){
String sql = “INSERT INTO TOPIC(TITLE, CONTENT)”
+ ” VALUES(” + “‘” + topic.getTitle() + “‘”
+ “,'” + topic.getContent() + “‘” + “)”;
Connection con = null;
Statement smt = null;
try{
con = ConnectionManager.getConnection();
smt = con.createStatement();
smt.executeUpdate(sql);
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (smt != null){
try {
smt.close();
} catch (Exception ignore) {
}
}
if (con != null){
try {
con.close();
} catch (Exception ignore) {
}
}
}
}

/**
* 全部のトピックを取得する
* @return トピックのリスト
*/
public List<Topic> getTopics() {
String sql = “SELECT * FROM TOPIC”;
List<Topic> topics = new ArrayList<Topic>();

Connection con = null;
Statement smt = null;
ResultSet rs = null;
try{
con = ConnectionManager.getConnection();
smt = con.createStatement();
rs = smt.executeQuery(sql);
while (rs.next()) {
Topic topic = new Topic();
topic.setId(rs.getInt(“ID”));
topic.setPostDate(rs.getTimestamp(“POST_DATE”));
topic.setTitle(rs.getString(“TITLE”));
topic.setContent(rs.getString(“CONTENT”));
topics.add(topic);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (Exception ignore) {
}
}
if (smt != null) {
try {
smt.close();
} catch (Exception ignore) {
}
}
if (con != null) {
try {
con.close();
} catch (Exception ignore) {
}
}
}
return topics;
}
public static void main (String[] args) {
BlogController ctrl = BlogController.getInstanse();
List <Topic> topics = ctrl.getTopics();
for (int i = 0; i < topics.size(); i++) {
System.out.println(topics.get(i));
}
System.out.println(“END”);
}
}

動作確認用にmainメソッドを組み込んである。BlogController.javaを実行してみる。Eclipse上で、「””」が「””」と認識されたり、BlogController.javaの111行目のgetInstance()が正しく認識されないことや、PostServlet.javaやReadServlet.javaのgetInstance()正しく認識されないことがあったが、訂正した。また、index.jspやread.jspの文字列「掲示板」を「シンプルBlog」に訂正した。

〇Tomcatを再起動し、
http://localhost:8080/SampleWeb0004/index.jsp
にアクセスしてみる。

タイトルに「テスト2」
記事に「DBに残るか、テスト」
とし、投稿ボタンを押す。
しかし、記事は投稿できない。

【参考文献】
JavaデベロッパーのためのEclipse完全攻略[4.x対応版]
石黒 尚久 (著), 永井 正昭 (著), テクニカル書籍編集部 (著)

〇何とか、進めてみる。
https://qiita.com/KOJI-YAMAMOTO/items/55c2b08357082a72cda3 参照
「C:\eclipse\tmp」を作っておく。
「C:\WINDOWS\system32>cd C:\Program Files\Java\jdk-14.0.2\bin」の中に、「keytool.exe」が格納されていることを確認して、コマンドプロンプトを起動し、カレントディレクトリをJavaインストールフォルダ\binに移動し、
keytool -genkey -alias tomcat -keyalg RSA -keystore C:\eclipse\tmp\.keystore
を実行する。
***********************************************************
C:\Program Files\Java\jdk-14.0.2\bin>keytool -genkey -alias tomcat -keyalg RSA -keystore C:\eclipse\tmp\.keystore
キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名は何ですか。
[Unknown]: test
組織単位名は何ですか。
[Unknown]: test
組織名は何ですか。
[Unknown]: test
都市名または地域名は何ですか。
[Unknown]: tokyo
都道府県名または州名は何ですか。
[Unknown]: tokyo
この単位に該当する2文字の国コードは何ですか。
[Unknown]: 81
CN=test, OU=test, O=test, L=tokyo, ST=tokyo, C=81でよろしいですか。
[いいえ]: はい
90日間有効な2,048ビットのRSAのキー・ペアと自己署名型証明書(SHA256withRSA)を生成しています
ディレクトリ名: CN=test, OU=test, O=test, L=tokyo, ST=tokyo, C=81
C:\Program Files\Java\jdk-14.0.2\bin>
***********************************************************
作成したkeystoreファイルを適当なフォルダに配置する。
tomcatフォルダ配下にsslフォルダを作成してその中に格納する。
C:\eclipse\Tomcat\ssl

「server.xml」をテキストエディタで開く。
C:\eclipse\Tomcat\conf\server.xml

77行目に以下を記述する。
*****************************
<Connector
protocol=”org.apache.coyote.http11.Http11NioProtocol”
port=”8443″
maxThreads=”200″
scheme=”https”
secure=”true”
SSLEnabled=”true”
keystoreFile=”C:/eclipse/Tomcat/ssl/.keystore”
keystorePass=”hogehoge”
clientAuth=”false”
sslProtocol=”TLS”
/>
*****************************

tomcatを起動してhttpsでアクセスする。
https://localhost:8443/

※証明書不正のメッセージが表示されるが、そのまま続行する。
「詳細設定」ボタン→「localhost にアクセスする(安全ではありません)」をクリックする。Tomcatの画面が表示されれば、TomcatでのSSLを有効にする手順は完了。

「サーバー」ビューの下記リンクを右クリックし、削除する。
あらたにできた、下記リンクをクリックする。
「新規サーバー」ダイアログボックスが表示されたら、「サーバーのタイプを選択(S)」欄の「Apache」フォルダーから、先に準備した「Tomcat v9.0」を選択し、「サーバーのホスト名(H)にサーバー名入力(ここではデフォルトの「localhost」)して、「完了(F)」ボタンをクリックする。

Mon Aug 31 06:17:02 JST 2020 WARN: Establishing SSL connection without server’s identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn’t set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to ‘false’. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

どうしても、MySQLがSSL接続を要求するために、現時点で、
https://localhost:8443/dbblog/
https://localhost:8443/dbblog/read
が表示されるが、MySQLとの接続ができていないので、
https://localhost:8443/dbblog/post
には、記事が残らない。

Java開発環境構築7

※以下はJava開発環境構築1~6が終わった前提で話を進めている。

掲示板の作成

トップ画面と閲覧・投稿画面はJSPで作成し、トップ画面の「記事を読む」というリンクからのリクエストを受け取る閲覧サーブレットと閲覧・投稿画面の「投稿」ボタンからのリクエストを受け取る投稿サーブレットを作る。また、掲示板の1つの記事を保存するための(モデル)クラスと、そのデータとサーブレットとの間を取り持つ(コントローラ)クラスを作成する。SampleWeb0002と同じ手順でプロジェクトを作成する。
プロジェクトの種類は「動的Webプロジェクト」
名前は「SampleWeb0003」

〇「プロジェクト・エクスプローラー」ビューで、SampleWeb0003プロジェクトを選択、右クリック→[新規]→[サーブレット]を選択。次の画面で、
Javaパッケージ「blog」
クラス名「Topic」
と入力し、「完了」ボタンを押す。
掲示板の1記事を保存するための(モデル)クラスTopic.javaを作成する。
これは以下のプロパティー(フィールドおよび対応するセッタ・ゲッタ)を持つ単純なJavaクラスである。
・id 連番
・title タイトル
・content 内容
・postDate 投稿日時

Topic.java

package blog;

import java.util.Date;

/**
* トピックのビーン
*/
public class Topic {

/** 連番 */
private int id;
/** タイトル */
private String title;
/** 内容 */
private String content;
/** 投稿日 */
private Date postDate;

public String toString(){
return super.toString()
+ “,id=” + id
+ “,title=” + title
+ “,content=” + content
+ “,postDate=” + postDate
;
}

//
//単純なセッタ・ゲッタ
//
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Date getPostDate() {
return postDate;
}
public void setPostDate(Date postDate) {
this.postDate = postDate;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}

〇ビジネスロジックを書く
掲示板を処理するメインとなるコントローラクラスを作成する。このクラスでは、
・掲示板の一覧を取得する
・掲示板を投稿する
というビジネスロジックとなるメソッドを定義している。このクラスはnewが不要な唯一のインスタンスとなる、シングルトンクラスとして作っている。

BlogController.java

package blog;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
* 掲示板を操作するビジネスロジック
*/
public class BlogController {

/**
* シングルトンのインスタンス
*/
private static BlogController controller = new BlogController();

/**
* 連番用のカウンタ
*/
private int idCounter;

/**
* 掲示板のリスト
*/
private List<Topic> topics = new ArrayList<Topic>();

/**
* このクラスのインスタンスを取得
* @return BlogControllerのインスタンス
*/
public static BlogController getInstance(){
return controller;
}

private BlogController(){
}

/**
* トピックをポスト(登録)する
* @param topic トピック
*/
public void postTopic(Topic topic){
synchronized(this){
topic.setId(idCounter++);
topic.setPostDate(new Date()); //現在時間
topics.add(topic);
}
}

/**
* 全部のトピックを取得する
* @return トピックのリスト
*/
public List<Topic> getTopics() {
return new ArrayList<Topic>(topics);
}
}

〇サーブレットを作成する
次にユーザーからのリクエストを受け付けるサーブレットを作成する。ReadServletではトピックの一覧を取得し、リクエストスコープにtopicというキーで取得したデータをセットしている。画面遷移先は、/read.jsp
サーブレットのURLへのマッピングはweb.xmlファイルを使わずに、今まで同様@WebServletアノテーションで行う。

ReadServlet.java

package blog;

import java.io.IOException;
import java.util.List;

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(name = “read”, urlPatterns = “/read”)
public class ReadServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
perform(request, response);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
perform(request, response);
}

protected void perform(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
BlogController ctrl = BlogController.getInstance();
List<Topic> topics = ctrl.getTopics();

request.setAttribute(“topics”, topics);

request.getRequestDispatcher(“/read.jsp”).
forward(request, response);
}
}

〇もう1つのPostServletでは、「投稿」ボタンのリクエストにより送られてくるデータからトピックを作成し投稿処理を行っている。その後、ReadServletにディスパッチ(遷移)している。

PostServlet.java

package blog;

import java.io.IOException;

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(name = “post”, urlPatterns = “/post”)
public class PostServlet extends HttpServlet {

protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
perform(request, response);
}

protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
perform(request, response);
}

protected void perform(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String title = request.getParameter(“title”);
String content = request.getParameter(“content”);
Topic topic = new Topic();
topic.setTitle(title);
topic.setContent(content);
BlogController ctrl = BlogController.getInstance();
ctrl.postTopic(topic);
request.getRequestDispatcher(“/read”).
forward(request, response);
}
}

〇JSPファイルのテンプレートを日本語対応に設定する
アプリの画面表示内容を受け持つJSPを作成する。JSPファイルを作成するにあたって、テンプレートを利用できるが、デフォルトの設定では日本語の文字コードが使えるようになっていない。Eclipseでの設定を変更することにより対応できるので、まずこの設定を行う。
Eclipseのメニューから[ウィンドウ]→[設定]を選ぶと設定画面が表示されるので、左のリストから「Web」→「JSPファイル」を選ぶ。右側の設定画面の「エンコード」項目を「ISO 10646/Unicode(UTF-8)」に変更する(デフォルトでは「ISO Latin-1」になっている)。これで日本語(UTF-8)に対応したテンプレートが使えるようになる。

〇JSPを作成する
JSPを作成していく。index.jspはトップ画面。単に「掲示板を読む」という閲覧画面(ReadServlet)へのリンクがあるだけである。
「プロジェクト・エクスプローラー」ビューでSampleWeb0003プロジェクトのWebContentを選択し、右クリック→[新規]→[JSPファイル]を選択。次の画面でファイル名(index.jsp)を入力し「完了」を押す。表示されるJSPファイルの内容はUTF-8に対応したものとなっている。

index.jsp

<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=”UTF-8″>
<title>掲示板を読む</title>
</head>
<body>
<a href=”read”>掲示板を読む</a>
</body>
</html>

同様に、投稿と閲覧を兼用しているread.jspを作成する。画面上の方に投稿用のフォームがあり、「投稿」ボタンを押してサブミットすると、PostServletが呼ばれる。画面の下の方には、ReadServletでセットされたトピックを取得し、一覧表示している。

read.jsp

<%@ page language=”java” contentType=”text/html; charset=UTF-8″
pageEncoding=”UTF-8″%>
<%@ page import=”blog.Topic,java.util.List”%>
<!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=”UTF-8″>
<title>掲示板</title>
</head>
<body>
<h2>掲示板</h2>
<a href=”read”>リロード</a>
<form action=”post” method=”POST”>
<br> タイトル<input type=”text” name=”title” size=”40″>
<br>
<textarea name=”content” rows=”5″ cols=”40″></textarea>
<br> <input type=”submit” value=”投稿”>
</form>
<%
List<Topic> topics = (List<Topic>) request.getAttribute(“topics”);
if (topics != null) {
for (int i = topics.size() – 1; i >= 0; i–){
Topic topic = topics.get(i);
%>
<hr>
タイトル:<%=topic.getTitle()%>
(<%=topic.getPostDate()%>)
<pre><%=topic.getContent()%></pre>
<%
}
}
%>
</body>
</html>

〇エンコードフィルタ
基本的なプログラムはできたが、このままだと日本語が文字化けして表示されてしまう。これを回避し日本語のリクエストを正しく受け付けるために、エンコードフィルタのクラスを作成する。ここでは文字コードをUTF-8固定にしている。
フィルタとしてサーバから呼び出されるよう、クラスにWebFilterアノテーションを付加している。

EncordingFilter.java

package blog;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

/**
* リクエストエンコード用フィルタ
*/
@WebFilter(filterName = “EncordingFilter”, urlPatterns = {“/*”})

public class EncordingFilter implements Filter {
public void init (FilterConfig config)
throws ServletException {
}

public void doFilter(ServletRequest request,
ServletResponse response,
FilterChain chain)
throws IOException, ServletException{
request.setCharacterEncoding(“UTF-8”);
chain.doFilter(request, response);
}

@Override
public void destroy(){
}
}

〇次に「サーバー」ビューでTomcat 9サーバを選択し、右クリック→[追加および除去]を選択。次の画面で使用可能なプロジェクトのSampleWeb0003を選択し、「追加」ボタンを押す。「完了」を押して画面を閉じる。

〇Tomcatを再起動し、
http://localhost:8080/SampleWeb0003/index.jsp
にアクセスしてみる。
閲覧・投稿画面でタイトルと内容を書き込み、「投稿」ボタンを押すと画面の下にそれらの情報が追加で表示されていくのがわかる。
しかし、現状では投稿されたデータをメモリ上に保持しているため、Tomcatを再起動するとデータが消えてしまう。次はデータをデータベースに保存できるようにする。

【引用文献】
JavaデベロッパーのためのEclipse完全攻略[4.x対応版]
石黒 尚久 (著), 永井 正昭 (著), テクニカル書籍編集部 (著)

Java開発環境構築6

※以下はJava開発環境構築1~5が終わった前提で話を進めている。

JavaプログラムからMySQLとの接続

〇Javaアプリケーションから、MySQLにJDBCを利用してアクセスするにはJDBCドライバが必要。

〇JDBCドライバは以下の場所に配置されている。
C:\Program Files (x86)\MySQL\Connector J 5.1\mysql-connector-java-5.1.49-bin.jar

〇これをSampleWeb0002プロジェクトのWebContent/WEB-INF/libフォルダにコピーする。(Javaリソース/ライブラリー/Web AppライブラリーフォルダにもJDBCドライバが追加されているはず)

〇接続用クラスの作成
データベースと接続し、コネクションを取得するクラスを作成。mainメソッドも作成し、それを使って実際にデータを取り出すテストをしてみる。
SampleWeb0002プロジェクトのJavaリソース/srcのhogeパッケージに新規クラスConnectionManagerを以下のように作成する。

〇ConnectionManager
package hoge;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
* シンプルなコネクション管理クラス
*/
public class ConnectionManager {
/**
* JDBCドライバのクラス名
*/
final static String DRIVER = “com.mysql.jdbc.Driver”;

/**
* データベースのURL
*/
final static String URL = “jdbc:mysql://localhost/mydb”;

/**
* データベースのユーザー
*/
final static String USER = “root”;

/**
* データベースのパスワード
*/
final static String PASS = “hoge”;

/**
* Connectionを取得
*/
public static Connection getConnection()
throws SQLException {
try{
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
e.printStackTrace();
throw new IllegalStateException (
“fail to class load : ”
+ e.getMessage());
}
Connection con = DriverManager.getConnection(URL, USER, PASS);
return con;
}

/**
* 接続確認テスト
*/
public static void main(String[] args) throws SQLException {
Connection con = getConnection();
Statement smt = con.createStatement();
ResultSet rs = smt.executeQuery(“select * from account”);
while(rs.next()){
String s = “NAME=” + rs.getString(“NAME”)
+ “,MONEY=” + rs.getString(“MONEY”) ;
System.out.println(s);
}
smt.close();
con.close();
System.out.println(“END”);
}
}

〇接続確認のためにJSPからデータベースにアクセスする。
select_sample.jspという名前のファイルをWebContent直下に作成する。

<%@page contentType="text/plain; charset=Windows-31J"%>
<%@page import="hoge.ConnectionManager, java.sql.*"%>
<% try{ Connection con = ConnectionManager.getConnection(); Statement smt = con.createStatement(); ResultSet rs = smt.executeQuery("select * from account"); while(rs.next()){ String s = "NAME=" + rs.getString("NAME") +",MONEY=" + rs.getString("MONEY"); out.println(s); } smt.close(); con.close(); }catch(SQLException e){ e.printStackTrace(); } %>

Tomcatを起動し、ブラウザで
http://localhost:8080/SampleWeb0002/select_sample.jsp
にアクセスして、
NAME=サンディー,MONEY=3000
NAME=パトリック,MONEY=2000
NAME=ボブ,MONEY=1000
が表示されれば、OK。

※Java開発環境構築1でインストールした「JDK」「Eclipse」「Tomcat」「MySQL」が連携できることを確認しました。

【引用文献】
JavaデベロッパーのためのEclipse完全攻略[4.x対応版]
石黒 尚久 (著), 永井 正昭 (著), テクニカル書籍編集部 (著)

Java開発環境構築5

※以下はJava開発環境構築1~4が終わった前提で話を進めている。

MySQLでデータベースを作る

〇Java開発環境構築1でデスクトップ上に作った[MySQL 8.0 Command Line Client]で、MySQLを起動し、パスワード「hoge」を入力。

mysql> CREATE DATABASE mydb;
mysql> USE mydb;
mysql> CREATE TABLE account (
-> NAME VARCHAR(100) PRIMARY KEY,
-> MONEY INTEGER
-> );
mysql> INSERT INTO account VALUES(‘ボブ’,1000);
mysql> INSERT INTO account VALUES(‘パトリック’,2000);
mysql> INSERT INTO account VALUES(‘サンディー’,3000);
mysql> EXIT

以上で、データベースの設定は完了。

Java開発環境構築4

※以下はJava開発環境構築1・2・3が終わった前提で話を進めている。

Javaサーブレットの作成

〇「プロジェクト・エクスプローラー」ビューで、SampleWeb0002プロジェクトを選択、右クリック→[新規]→[サーブレット]を選択。次の画面で、
Javaパッケージ「hoge」
クラス名「MyServlet」
と入力し、「次へ」ボタンを押す。

〇次の画面でサーブレットマッピングの指定を行う。
名前「myserv」
に変更すると、URLマッピングは自動的に「/myserv」に変更される。
「完了ボタン」を押す。

〇作成したMyServlet.javaのdoGetメソッドを次のコードに書き換える。
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
//response.getWriter().append(“Served at: “).append(request.getContextPath());←コメントアウトする
response.getWriter().println(“hello”);←書き加える
}

〇上記の変更を保存し、サーバを再起動し、ブラウザから、
http://localhost:8080/SampleWeb0002/myserv
にアクセスする。「hello」とブラウザに出力されればOK。

Java開発環境構築3

※以下はJava開発環境構築1・2が終わった前提で話を進めている。

WTPでのWebアプリケーション開発

〇WTP(Web Tools Platform)は、eclipse.orgのプロジェクトで、WebやJavaEEアプリケーションの開発支援を行う各種ツールを提供している。WTPの開発は主にJava EEパースペクティブで行う。Eclipseのメニューから、[ウィンドウ]→[パースペクティブ]→[パースペクティブを開く]→[その他]を選択。次の画面でJava EEパースペクティブを選択。「Eclipse IDE for Java EE Developers」を利用している場合は、Java EEパースペクティブがデフォルトのパースペクティブなので、最初から開かれている。

〇まずはじめにプロジェクトを作成
Eclipseのメニューから[ファイル]→[新規]→[動的Webプロジェクト]を選択
〇プロジェクトの作成画面
プロジェクト名「SampleWeb0002」
ターゲット・ランタイム「Apache Tomcat v9.0」を選択
動的webモジュールバージョンはWebアプリケーションのバージョン「4.0」を選択
(web.xmlでマッピングを行う場合は「2.5」)
構成はプロジェクト・ファセットと呼ばれるプロジェクトの各種設定をひとまとめにして名前を付けたもの「Apache Tomcat v9.0 デフォルト構成」を選択
「完了」を押してプロジェクトの作成を完了
※ここで「次へ」を選択して、その他のオプションを設定することができる
「プロジェクト・エクスプローラー」ビューで、プロジェクトが作成されたことを確認
表示されない場合は、右クリック→「リフレッシュ」またはF5を実行
HTMLやJSPはWebContent以下に作成する。
JavaクラスのソースプログラムはJavaリソースの/src以下に作成していく。

〇次に「サーバー」ビューでTomcat 9サーバを選択し、右クリック→[追加および除去]を選択。次の画面で使用可能なプロジェクトのSampleWeb0002を選択し、「追加」ボタンを押す。「完了」を押して画面を閉じる。以上で、JSPやサーブレットを作成・実行するための下準備は完了。

Java開発環境構築2

JSPを使ったWebアプリケーションの作成手順

〇「Java開発環境構築1」の設定後、Eclipse内で、Tomcatを利用できるように設定する。
「ウィンドウ(W)」→「設定(P)」
「設定」ダイアログボックスを表示して、「サーバー」欄の「ランタイム環境」を選択。
右側に表示された「サーバー・ランタイム環境」にある「追加(A)」ボタンをクリック。
「新規サーバー・ランタイム環境」ダイアログボックスが表示されたら、「ランタイム環境のタイプを選択(R)」欄で「Apache Tomcat v9.0」を選択して、「次へ(N)」ボタンをクリックする。
「Tomcatサーバー」の画面では、「Tomcatインストール・ディレクトリー(D)」にあるインストール先の文字列をコピーして、「完了(F)」ボタンをクリックする。
画面が戻るので、「サーバー・ランタイム環境」欄に、選択したTomcatが表示されていることを確認したら、「適用して閉じる」ボタンをクリックする。
〇新規サーバーを作成する。
「サーバー」ビューの下記リンクをクリックする。
「新規サーバー」ダイアログボックスが表示されたら、「サーバーのタイプを選択(S)」欄の「Apache」フォルダーから、先に準備した「Tomcat v9.0」を選択し、「サーバーのホスト名(H)にサーバー名入力(ここではデフォルトの「localhost」)して、「完了(F)」ボタンをクリックする。
〇動的Webプロジェクトの作成
Eclipseのメニューから、「新規(N)」→「動的Webプロジェクト」を選択する。「新規動的Webプロジェクト」ダイアログボックスが表示されたら、「プロジェクト名(M)」欄に任意のプロジェクト名を入力(ここでは、SampleWeb0001)し、「ターゲット・ランタイム(U)」では、先ほど設定したTomcatの該当バージョン(Apache Tomcat v9.0)を選択して、「完了(F)」ボタンをクリックする。
「パッケージ・エクスプローラー」内に生成された「SampleWeb0001」プロジェクトにある「WebContent」フォルダを右クリックして、「新規(N)」→「JSPファイル」をクリックする。「新規JSPファイル」ダイアログボックスが表示されたら、「ファイル名(M)」に任意のファイル名を入力(ここではSample0001.jsp)して、「完了(F)」ボタンをクリックする。
生成されたJSPファイル(Sample0001.jsp)をダブルクリックして、エディターに表示されたソースプログラム内のタグ部分に「Hello JSP」と入力する。
〇Tomcatサーバーを起動する(デスクトップに作成したTomcat9.exeのショートカットは使わない)
「サーバー」ビューのTomcatサーバーを右クリックして、ショートカットメニューから、「追加および除去(A)」を選択する。「追加および除去」ダイアログボックスが表示されたら、、「使用可能(A)」欄にある現在編集中のプロジェクト(SampleWeb0001)を選択して、「追加(D)」ボタンをクリックし、「構成済み(C)」へ移動して、「完了(F)」ボタンをクリックする。
「サーバー」ビューのTomcatサーバーを右クリックして、ショートカットメニューから、「開始(S)」を選択してサーバーを起動する。
ブラウザを開き、以下のURLを入力する。
http://localhost:8080/SampleWeb0001/Sample0001.jsp
ブラウザに文字列「Hello JSP」が表示されたら完成。

Java開発環境構築1

01. JDK のインストール

「Java SE – Downloads Oracle Technology Network Oracle」ウェブサイト
http://www.oracle.com/technetwork/java/javase/downloads/index.html
にて、「Java Platform, Standard Edition」の「JDK DOWNLOAD」をクリックし、
「Java SE Development Kit 14」の欄の「Accept License Agreement」をチェックして、
「Windows x64」のJDK、「jdk-14_windows-x64_bin.exe」をダウンロードし、インストールする。
※インストール先のオプションはデフォルトで、変更しない。
環境変数 JAVA_HOME と Path に通しておく。
エクスプローラー内のPCを右クリックし、プロパティを選択。
システムの画面中のシステムの詳細設定を選ぶ。
システムのプロパティの画面中の環境変数ボタンを押す。
システムの環境変数内に「JAVA_HOME」を作成し、
「JAVA_HOME」→「C:¥Program Files¥Java¥jdk-14」
とする。
同じくシステムの環境変数内の「Path」を編集する。
「Path」→「%JAVA_HOME%¥bin」
とする。

02. Eclipse のインストール

フォルダ「C:¥eclipse」とさらにその中に、
フォルダ「C:¥eclipse¥workspace」を作成しておく。
「Eclipse 日本語化 | MergeDoc Project」ウェブサイト
http://mergedoc.osdn.jp/
より、Eclipse 2020 の Ultimate の Full Edition をダウンロードする。
「Pleiades All in One Eclipse ダウンロード」→「pleiades-2020-03-ultimate-win-64bit-jre_20200322.zip」
https://sevenzip.osdn.jp/
より、7-Zip 20.00 alpha (2020-02-06)をダウンロード・インストールする。
上記のPleiadesのファイルを「C:¥eclipse」フォルダ内にコピーし、7-Zipで、展開。
※他の解凍ツールを使う場合は、ファイル名が長くなり、使えなくなることに注意する。
「C:¥eclipse¥pleiades¥eclipse¥eclipse.exe」を管理者権限で実行すれば、Eclipseが起動する。
Eclipseの起動時に workspace の場所を求められるので、「C:¥eclipse¥workspace」を指定する。
「C:¥eclipse¥pleiades¥eclipse¥eclipse.exe」のショートカットをデスクトップ上に作成し、管理者権限で実行出来るようにする。

03. Tomcat のインストール

「Apache TomcatR – Welcome!」ウェブサイト
http://tomcat.apache.org/
にて、最新版のTomcat(Tomcat 9.0.34 Released)をダウンロードする。
「32-bit/64-bit Windows Service Installer (pgp, sha512)」を「C:¥eclipse」にダウンロードし、インストールする。
JDKのインストール先として「C:¥Program Files¥Java¥jdk-14」を指定。
フォルダー「C:¥eclipse¥Tomcat」を作成し、Apache Tomcat Destination Folder として、「C:¥eclipse¥Tomcat」を指定。
Tomcat を起動するには、環境変数「CATALINA_HOME」を定義し、
インストール場所「C:¥eclipse¥Tomcat」を指定する。
環境変数「Path」に「%CATALINA_HOME%¥bin」を追記する。
さらに、環境変数「Path」に「C:¥eclipse¥Tomcat¥lib¥tomcat-coyote.jar」を追記する。
「C:¥eclipse¥Tomcat¥bin¥Tomcat9.exe」を管理者権限で起動して、
「Server startup in XXXX ms」の行がコマンドプロンプトに表示されたら起動。
http://localhost:8080/
で起動を確認。コマンドプロンプトの画面を消すと、Tomcatは終了。
「Tomcat9.exe」はデスクトップ上にショートカットを置いておくと便利。

04. MySQLのインストール

MySQL  MySQL Downloads ウェブサイト
http://www.mysql.com/downloads/
から、MySQL Community (GPL) Downloads
→MySQL Community Server
→MySQL Community Server 8.0.19
→Windows(x86,32 & 64-bit),MySQL Installer MSI
→MySQL Installer 8.0.19
→Windows (x86, 32-bit), MSI Installer」
=「mysql-installer-community-5.7.14.0.msi」
をダウンロードする。その際、下方の「No thanks, just start my download.」を選ぶ。
「mysql-installer-community-8.0.19.0.msi」を「C:¥eclipse」に格納し、ダブルクリック
○Choosing a Setup Type
「Custom」→「Next」
○Select Products and Feature
「MySQL Servers」→「MySQL Server 8.0.19 – X64」を選択
さらに、
「MySQL Connectors」→「Connector/J 5.1」X86版を選択し、
※「Connector/J 5.1」は32bit版しかない。
さらに、
「MySQL Connectors」→「Connector/ODBC 8.0.19 – X64」を選択しておき、
「Next」
○Installation
「Execute」し、製品名の左側に緑のチェックがついたら「Next」
○Product
インストールの準備ができるので「Execute」
完了したら「Next」
○「Next」
○「High Availability」で「Standalone MySQL Server / Classic My SQL
replication」を選択して「Next」
○デフォルトで「Next」
○「Authentication Method」で「Use Strong Password Encryption」を選んで「Next」
○Acconts and Roles
MySQLのROOTユーザーのパスワード「hoge」を入力して「Next」 ※1
○Windows Service
デフォルトで「Next」
○Apply Server Configration
設定処理の一覧が表示されるので「Execute」
処理が終わると一覧の右に緑のチェックがつくので「Finish」
○Product Configration
再度、この画面が表示されるので「Next」
○Install Complete
「Finish」
以上で、MySQLのインストールは終了。
スタートメニューの[MySQL]→[MySQL 5.7 Command Line Client]が、
MySQLを操作するツールなので、ショートカットをスタート画面に置く。

※個々の動作確認はできましたが、うまく連携しているか否かはわかりません。
今後、アプリケーションを作ることで確認したいと思います。

【追記】2020年08月01日(土)

「MySQL Installer」の画面で、Microsoft Windows用の「MySQL Installer 8.0.21」、「Windows (x86, 32-bit), MSI Installer」には、「mysql-installer-web-community-8.0.21.0.msi」と「mysql-installer-community-8.0.21.0.msi」が選べるようになった。私は「mysql-installer-community-8.0.21.0.msi」をダウンロードすることにした。

MySQLインストール終了後、スタートメニューの[MySQL]→[MySQL 8.0 Command Line Client]のショートカットを作るには、スタートメニューの[MySQL]→[MySQL 8.0 Command Line Client]を右クリックして「その他」→「ファイルの場所を開く」とショートカットがあるので、それをデスクトップ上にコピーした。

【改訂】2020年08月19日(水)
文中の※1:MySQLのROOTユーザーのパスワードを「hoge」とした。

ホームグループアイコンを表示しない

1. Windows キー + X キー > 「services.msc」と入力
2. サービス一覧が表示されたら [HomeGroup Listener] をダブルクリック
3. [スタートアップの種類] 欄を [無効] に変更して [OK]
4. サービス一覧から [HomeGroup Provider] をダブルクリック
5. こちらも同様に [スタートアップの種類] 欄を [無効] に変更して [OK]
6. PC を再起動

参照サイト
https://answers.microsoft.com/ja-jp/windows/forum/all/windows-10/184fb85e-a30b-4cce-9704-250362bad575

WindowsでLinux(WSL, LAMP, WordPress)

WSLとはWindows Subsystem for Linuxのこと。
仮想OSとかエミュレーターではなく、ネイティブで動作するのが特徴。

≪前編≫
Windowsメニュー右にある検索窓から”con”と入力してコントロールパネルを検索し起動します。

コントロールパネルから「プログラム」→「プログラムと機能」を開き、左ペインの「Windowsの機能の有効化または無効化」をクリックする。

[Linux 用 Windows サブシステム]にチェックを入れ、「OK」をクリックする。

「今すぐ再起動」をクリックして、PCを再起動する。

Edgeで、「https://aka.ms/store/」

Microsoft Store
「WindowsでLinuxを実行する」
「Windows Subsystem for Linux (WSL) に Linux ディストリビューション
をインストールして、実行できます。」
から、Ubuntu をインストール

Ubuntu のウィンドウが開くので、

user:*******
password:********

$ sudo su –
pass

#

管理者権限で入れました。

# apt install apache2

# /etc/apache2/apache2.conf
このファイルの末尾に以下の記述を追加します。

AcceptFilter https none
AcceptFilter http none

ファイルを編集したあと以下のコマンドでApacheを再起動します。

# service apache2 restart
ちなみにApacheを停止する場合は以下を実行します。

# service apache2 stop

Edgeで、「http://localhost」が表示されればOK

ApacheのWebサイトを表示するルートフォルダは以下です。
/var/www/html/
ここにページを表示するためのファイルを置きます。
WordPressもここにインストールします。

exitして、

$ sudo apt install mysql-server
ディスクスペース消費を確認してくるので”y”を入力します。

[エラー] Sub-process /usr/bin/dpkg returned an error code (1)

エラーになった
dpkg: error processing package mysql-server (–configure):
dependency problems – leaving unconfigured
Errors were encountered while processing:
mysql-server-8.0
mysql-server
ので、
$ sudo apt remove mysql-server
$ sudo apt autoremove
$ sudo apt install mysql-server

$ sudo apt remove mysql-server-8.0
$ sudo apt autoremove
$ sudo apt install mysql-server-8.0

エラーになったので、
$ sudo dpkg –configure -a

エラーになったので、
Ubuntuでは/var/lib/dpkg/info配下に、パッケージのインストール前、インストール後に実行するためのスクリプトファイルや、その他パッケージに関する情報を含むファイルが置かれています。そしてこのディレクトリにある問題のパッケージ(ここではmysql-server-5.7)のpreinstとprerm(インストール前用スクリプトファイル)、postinstとpostrm(インストール後用スクリプトファイル)の削除します。その後でapt updateやapt upgradeが正常に実行できるようになりました。
具体的には、以下のコマンドを実行します。
$ cd /var/lib/dpkg/info
$ sudo mv mysql-server-8.0.post* /tmp
$ sudo mv mysql-server-8.0.pre* /tmp
$ sudo mv mysql-server.post* /tmp
$ sudo mv mysql-server.pre* /tmp

$ sudo su –

# apt update
# apt upgrade

インストールができたらMySQLのバージョンを確認します。
$ mysql –version
mysql Ver 8.0.20-Oubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))

MySQLを起動して動作確認します。
# service mysql start
# mysql

mysql>

①へ
エラーになったら、やり直す。

$ sudo apt update
$ sudo apt install mysql-client
必要なら
$ sudo apt install mysql-server

サーバー起動
$ sudo service mysql start

初期化
$ sudo mysqld –initialize

初期ルートパスを所得
$ grep ‘temporary password’ /var/log/mysql/error.log
このパスワードを使って、rootパスワードを変更していく。
何も聞かれないので、

以下に従い、rootパスワードを変更する。

************************************************************

# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 初期パスワードを入力する→********

The existing password for the user account root has expired. Please set a new password.

New password: 新しいパスワードを入力する→********

Re-enter new password: 再度同じ新しいパスワードを入力する→********

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No: y

There are three levels of password validation policy:

LOW Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password: ポリシーに沿った新しいパスワードを入力→********

Re-enter new password: 再度新しいパスワードを入力する→********

Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user, a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.

Normally, root should only be allowed to connect from
‘localhost’. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named ‘test’ that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y Success.

– Removing privileges on test database…
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

************************************************************

設定ファイルは CentOS であれば /etc/my.cnf です。 [mysqld] 節に次のものを追加します。

[mysqld]
…(略)
character-set-server = utf8
default_password_lifetime = 0

************************************************************

①以下のコマンドで今の認証の内容をチェックします。
mysql> SELECT user,authentication_string,plugin,host FROM mysql.user;

パスワード認証を有効にするため以下のコマンドでパスワードを設定します。
mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘********’;
以下のコマンドで有効にします。

mysql> FLUSH PRIVILEGES;
mysql> exit;

以降mysqlコマンドを使用するときはrootパスワードを入力します。
$ sudo mysql -u root -p

PHPをインストールする。
$ sudo apt install php libapache2-mod-php php-mysql
$ sudo service apache2 restart

ApacheのWebサイトを表示するルートフォルダに簡単なPHPコードが書かれたファイルを置いてブラウザで表示します。

viエディタでPHPファイルを作成します。

$ sudo vi /var/www/html/info.php
エディタが起動したら以下の内容を記述してファイルを保存します。

<?php
phpinfo();
?>
ファイルが保存できたらブラウザで表示してみます。

http://localhost/info.php
PHPの情報が表示されれば正しく動作しています。

動作確認できればこのファイルはいらないので削除しておきましょう。
$ sudo rm /var/www/html/info.php

次にPHPでマルチバイト文字を扱うためと、各ロケールに対応したプログラミングを行えるようにするため以下のパッケージをインストールします。
$ sudo apt install php-mbstring

PHP拡張モジュールであるmbstringを有効にするため以下のコマンドを実行します。
$ sudo phpenmod mbstring

そしてApacheを再起動します。
$ sudo service apache2 restart

phpMyAdminをインストールする
phpMyAdminを以下のコマンドでインストールします。

$ sudo apt install phpmyadmin

Webサーバーを選択する画面が表示されるとapache2にカーソルを持っていきスペースキーで*印を付けて選択します。TABキーで、OKにあわせて、ENTER。

データベースの設定画面が表示されるとそのままYesを選択してEnterキーを押します。

アプリケーションパスワードの設定画面が表示されると任意のパスワードを入力し、TABキーで、OKにあわせて、ENTER。
********

インストールが完了したら、以下をブラウザのアドレスバーに入力してphpMyAdminにアクセスしてください。

http://localhost/phpmyadmin
phpMyAdminのログイン画面が表示されます。

MySQLインストール時に設定したrootパスワードを使ってrootユーザーでログインします。
ログインできると画面が表示されます。
以上でWSLへのLAMP環境の作成は完了です。

エラーの時は・・・

「みんなこの問題に遭遇するんだ。一度WSLを閉じて再起動し、 sudo service mysql start, sudo dpkg –configure -a を実行すると完了するよ」
という感じに見受けられます。

ということで、

WSLを再起動
sudo service mysql start を実行
sudo dpkg –configure -a を実行
してみましょう。それでどうでしょう?

WSLを再起動
$ sudo service mysql start
$ sudo mysql -u root -p
WSLを再起動
sudo dpkg –configure -a
WSLを再起動
http://localhost/phpmyadmin

エラーになったので、
config.inc.phpを探す。
/etc/phpmyadmin/config.inc.php
にあることがわかる。

# vi /etc/phpmyadmin/config.inc.php

https://codeaid.jp/blog/wsl-lamp-wp1/ 参照

≪後編≫
WordPressの最新バージョンを公式サイトよりダウンロードします。
セキュリティソフトを外して、
# cd /var/www/html
# wget https://ja.wordpress.org/latest-ja.tar.gz
# tar xvzf latest-ja.tar.gz
wordpressフォルダ内にデフォルトで含まれているサンプルの設定ファイルをコピーして設定ファイルを作成します。
# cp ./wordpress/wp-config-sample.php ./wordpress/wp-config.php
wordpressフォルダとファイルの所有権をApacheの「www-data」に変更します。
# chown -R www-data:www-data /var/www/html/wordpress
テーマやプラグインが変更できるようにwordpress配下の「wp-content」ディレクトリのグループに書き込み権限を追加します。
# chmod g+w /var/www/html/wordpress/wp-content
テーマとプラグインのディレクトリ配下のすべてのファイルにApacheの書き込み権限を追加します。
# chmod -R g+w /var/www/html/wordpress/wp-content/themes
# chmod -R g+w /var/www/html/wordpress/wp-content/plugins

前編でインストールしたphpMyAdminコンソールを使ってデータベースを作成します。

# service mysql start
# service apache2 restart
# apt install phpmyadmin

root
********

http://localhost/phpmyadmin

phpMyAdminへrootでログインして”wordpress”という名前でデータベースを作成します。(データベース名は任意でいいです。ここでは”wordpress”で例として作成しています)
phpMyAdmin画面でデータベースタブを選択します。
作成するデータベース名を入力し、utf8_general_ciを選択して作成します。

WordPressの設定ファイルを修正します。
# vi /var/www/html/wordpress/wp-config.php

/** WordPress のためのデータベース名 */
define(‘DB_NAME’, ‘wordpress’);
/** MySQL データベースのユーザー名 */
define(‘DB_USER’, ‘root’);
/** MySQL データベースのパスワード */
define(‘DB_PASSWORD’, ‘rootのパスワード’);
・・・
define(‘FS_METHOD’,’direct’);
先程作成したWordPressで使うデータベース名とユーザー名とパスワードを入力し、設定ファイル下部にテーマやプラグインのアップデートが直接ダウンロードできるよう
「define(‘FS_METHOD’,’direct’);」
を記述して保存します。

WordPressをインストール
http://localhost/wordpress

サイトのタイトル:********
ユーザー名:********
パスワード:********
メールアドレス:********@********

まとめ
作成した環境でWordPressのテーマやプラグインを開発する場合などでファイルを書き換えるときは、WSLからCLIでコマンド操作するのが基本的な方法になります。

今のところWSLからWindowsのファイルへアクセスできますが、WindowsからWSL環境へアクセスできません。

例えば、プラグインの開発作業で動作確認しながらファイル修正するような作業をするには、Windows環境で修正したファイルをWSLのUbuntuでWordPress環境のwp-content/pluginsフォルダ配下にファイルをコピーする操作をします。

WSLからWindowsのファイルへは、「/mnt/c」からCドライブへアクセスできます。

「/mnt」はWindowsシステムがマウントしているドライブが表示されますが、USBやネットワークドライブは表示されないようです。

今後はWindowsからWSL環境のファイルへアクセスできるようになるという情報も出ているので、そうなればWidnowsから直接WordPressのテーマやプラグインファイルを直接修正できるようになります。

それから、WordPressの更新、テーマやプラグインのインストール・更新のときにもし以下のようなSSLでエラーが発生した場合

curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to ubuntu.com:443
Windowsにセキュリティソフトを入れていれば、それが原因でこのエラーが発生します。

一度セキュリティソフトを停止してから再度実行してください。

前編にも記載しましたが、WSLのUbuntuはsystemctlコマンドが使えないためこれによる自動起動設定ができません。

利用する際はコマンド操作でMySQLとApacheを起動してください。

https://codeaid.jp/blog/wsl-lamp-wp2/ 参照

Visual Studio Code の使い方

【インストール】

https://code.visualstudio.com/

にて、画面右上の「Download」をクリック。

「Download Visual Studio Code」画面になるので、
Windows10用のSystem Installerの64bitをダウンロードする。

画面左下の「ファイルを開く」を選ぶ。セットアップが始まる。
追加タスクの選択画面で、すべてを選択し、インストール。

【日本語化】

Extensions(四角いマークのアイコン)をクリック。

パネルが開くので検索ボックスに「Japanese Language Pack」と入力。

→「Install」をクリック。

再起動後、「Ctrl+Shift+P」を押し、「display」と入力。

「Configure Display Language」を選択 →「ja」を選択。

再起動して利用。

【印刷】

Extensions(四角いマークのアイコン)をクリック。

パネルが開くので検索ボックスに「PrintCode」と入力。

→「Install」をクリック。

ファイルを選択後、「F1」を押し、「PrintCode」と入力。

WordPressのため、Fedora30 を Fedora31に

WordPressをアップデートしようとすると、
PHPのバージョンが古いというエラーが出るようになった。
私は面倒なので、OSのバージョンアップを行った。

*********************************************************

Windowsパソコンの「Tera Term」から接続して

# dnf upgrade –refresh

# dnf install dnf-plugin-system-upgrade

# dnf system-upgrade download –releasever=31

#dnf clean packages

#dnf system-upgrade reboot

ここで「Tera Term」の接続が「off」となり、

サーバーのモニターを確認して気長~に待つ。

Fedora31では、「root」以外のユーザーからログインする必要があるので、

Fedora30で、「root」以外のユーザーを作っておく必要がある。

参照サイト https://blog.canpan.info/hofu_nanboku/archive/455

*********************************************************

この後、WordPressのアップグレードを行うが、できればサーバーとは別のパソコンで、WordPressの管理画面を開いておきたい。
アップグレードができたか、エラーの内容は何かを簡単に確認することができる。
私はWordPressのディレクトリをバックアップしてから、アップグレードした。
アップグレードの際、ディレクトリの所有権はWordPressの管理者に設定し、アップグレードが完了したら、元に戻した。
できたらデータベースもバックアップした方が良いと思う。

GNU C Compiler

「Windows」のデスクトップ上の「Tera Term」のショートカットを用いる
(「Windows」に「Tera Term」をインストールしておく)。
「Linux」のサーバに、一般ユーザーでログインする
(いきなり「root」で、ログインすると、ルートディレクトリで作業することに注意)。
ユーザーディレクトリの中で、スーパーユーザーに交代する。

$ su
パスワード:
#

「GCC」ディレクトリを作成する。

# mkdir GCC
# cd GCC

# vi hello.c

#include <stdio.h>
main () {
printf(“Hello, world.\n”);
}

コンパイル

# gcc hello.c

実行

# ./a.out
Hello, world.

UNIXでは「./」と、カレントディレクトリを指定しないと、
カレントディレクトリのコマンドは実行されない。

「a.out」以外のファイル名にしたい場合は、

# mv a.out hello

とするか、コンパイル時に

# gcc hello.c -o hello

のように指定する。
実行ファイル名に「test」を使用しない
(「test」はUNIXのコマンドなので)。

実行

# ./hello
Hello, world.

PERL環境構築

64bitのWindows 7 Home Premiumが入ったノートPCに「ActivePerl 5.20.1 Build 2000 (64-bit)」をインストールした。
自動的に、環境変数Pathに「C:\Perl64\site\bin;C:\Perl64\bin;」が設定された。
「C:\PERL」フォルダを作成し、そちらを作業フォルダとした。
「C:\PERL」フォルダのショートカット「PERL」をデスクトップ上に作成した。
PERLのソースファイルは「.pl」という拡張子で、命名する。
最も簡単なプログラム「hello.pl」は、以下の記述となる。

************************************************************
#! C:\Perl64\bin
print “Hello, world!\n”;
************************************************************

デスクトップ上にコマンドプロンプトをコピーし、作業フォルダを「C:\PERL」とした。
上記のプログラムを実行するには、コマンドプロンプト上でソースファイル名を指定すれば良い。

C:\PERL>hello.pl
Hello, world!

さらに、下記のコマンドで、「C:\PERL」フォルダ内に、「hello.pl」の実行結果「Hello, world!」を「hello.txt」というファイルに保存できる。

C:\PERL>hello.pl > hello.txt

※WordPressでは「半角¥マーク」が、「\」(バックスラッシュ)になっているので、ご注意ください。

LATEXの利用(Windows7 64bit)

abtexinst_0_85r1

をダウンロードし、チェックリストを全部チェックする設定で、その他はデフォルトでインストールする。インストールにはかなりの時間を要する。

「TeXworks」の左上が「pdfpLaTex」の状態で、「01.tex」を作成。

************************************************

\documentclass{jsarticle}

\begin{document}

start

\end{document}

************************************************

と記述し、左上の→を押すと、「01.pdf」ができる。

pdfファイルの関連付けが変わっていたら、「adobe」に戻すといい。

Windows10

2015年07月29日(水)、Windows 10へのアップグレードが可能となった。

アップグレードを予約したPCには、すぐに配信されるものと思っていた。

しかし、なかなか、インストールできるようにはならなかった。

そこで、下記のサイトを参照し、ツールを利用して、アップグレードした。

https://www.microsoft.com/ja-jp/software-download/windows10

Windows8.1Pro(32bit)からWindows10へのアップグレードには時間がかかった。

上記サイトのツールを使うとインストールメディア作成のためのISOイメージもダウンロードできるが、メディアを使ったアップグレードは私は現時点で成功していない。2017

WORDで2ページ目からページ番号を振るには

Wordで、1ページ目に表紙を作った場合など、ページ番号は2ページ目から付けたい時ってありますよね。
その場合、下記の方法で設定できます。

1.ツールバーの「挿入」から「ページ番号」を選択。
2.「ページ番号」の設定画面が出たら、下の「最初のページにページ番号を挿入する」のチェックを外す。
3.「書式」ボタンを押す。
4.「連続番号」の「開始番号」を選択し、番号に「0」を入力。
5.「OK」ボタンで「ページ番号の書式」画面を閉じ、もう一度「OK」ボタンで「ページ番号」画面を閉じる。

これで、ページ番号が0ページから連番に振られ、最初のページにはページ番号が挿入されないため、2ページ目から「1・2・3…」と連番でページ番号が振られます。

参照サイト http://cswmoon.blog12.fc2.com/blog-entry-98.html

Windows10のSendToの場所

ファイルを右クリックした時に表示される「送る(N)」が登録されているのは、

「C:\Users\[ユーザー名]\AppData\Roaming\Microsoft\Windows\SendTo」

内に表示されるショートカットです。

こちらに、テキストエディタ(例:TeraPad.exe)などの
ショートカットを入れておくと便利でしょう。

Windows10においてiTunesでiPhoneを同期できない

この場合は、デバイスマネージャーを開き
ポータブルデバイス内に認識している「AppleiPhone」を右クリックして
「ドライバーソフトウェアの更新」を選択
「コンピューターを参照してドライバソフトウェアを検索します」を選択し
「C:\Program Files\Common Files\Apple\Mobile Device Support\Drivers」
を指定しますと、「usbaapl 64.inf」が有りますので
このドライバーに更新します
すると「USB (Universal Serial Bus) コントローラ」の中に
「Apple Mobile Device USB Driver」が認識され
iPhoneが同期可能になります。

http://giantcone.blog.jp/archives/33267645.html 参照