埋め込みコードブロック

インライン式にもいろいろあって、"<%~%>"で囲んだ場合は、単純な埋め込みコードブロックで、C#のコードを書いて実行できる。

ASP.NET inline expressions - ASP.NET | Microsoft Docs

HTMLタグと混在させることもできる。

for文とdivタグとResponse.Writeによるiの出力が混在しているけど、

ちゃんと実行、表示出来てる。
ちゃんと実行、表示出来てる。

ちゃんと実行、表示出来てる。
ソースを見ると、

divタグと数字が繰り返されてる。
divタグと数字が繰り返されてる。

divタグと数字が繰り返されてる。
空行になってるところは、出力しない"<%~%>"のところが空いてるからかな。

Sample/aspnet/inline_expressions/embedded_code_blocks/src/inline_expressions at master · bg1bgst333/Sample · GitHub

HttpServletResponse

既定のレスポンス情報は、doGetの第2引数として、HttpServletResponseインターフェースresponseとして渡される。

HttpServletResponse (Jakarta EE 8 仕様 API) - Javadoc

これを弄って、独自のレスポンスをつくるのだが、このresponseの実体はなんだろうか。

このようにクラス名を取得して出してみる。

実体はResponseFacade
実体はResponseFacade

実体はResponseFacadeというらしい。

ResponseFacade (Apache Tomcat 8.0.53 API Documentation)

確かにこれは、HttpServletResponseインターフェースを実装した形になっている。

Sample/servlet/HttpServletResponse/HttpServletResponse/src/HttpServletResponse at master · bg1bgst333/Sample · GitHub

IWbemServices::ExecQuery

IWbemServices::ExecQueryで、クエリを実行する。

IWbemServices::ExecQuery (wbemcli.h) - Win32 apps | Microsoft Docs
例: ローカルコンピューターから WMI データを取得する - Win32 apps | Microsoft Docs

IWbemServices.cppで、

第1引数は"WQL"、第2引数は"SELECT * FROM Win32_OperatingSystem"、ということでWQLでOS情報を列挙する。
結果として、第5引数のpEnumeratorにIEnumWbemClassObjectポインタが格納される。

CoCreateInstance OK!
pLocator = 0x02090828
pLocator->ConnectServer OK!
pServices = 0x0209cfb4
CoSetProxyBlanket OK!
pServices->ExecQuery OK!
続行するには何かキーを押してください . . .

成功。

Sample/com/IWbemServices/ExecQuery/src/IWbemServices at master · bg1bgst333/Sample · GitHub

インライン式

ASP.NETもやっていく。

Windows7でIISを(ホームページ)有効化する設定
IISサーバにサイトを追加する - Qiita

まずは、IISでWebサイトを公開できるようにしないと。

f:id:BG1:20220218135233p:plain
コントロールパネルから

コントロールパネルから、

プログラム
プログラム

プログラム、

機能の有効化
機能の有効化

機能の有効化、

インターネットインフォメーションサービスを押すと四角に
インターネットインフォメーションサービスを押すと四角に

インターネットインフォメーションサービスを押すと四角に。
で、OKを押す。

コンピュータから右クリックで管理
コンピュータから右クリックで管理

コンピュータから右クリックで管理、

IISマネージャー
IISマネージャー

IISマネージャー。

すでにDefault Web Siteがあるけど、Webサイトの追加を押す。
すでにDefault Web Siteがあるけど、Webサイトの追加を押す。

すでにDefault Web Siteがあるけど、Webサイトの追加を押す。

wwwrootフォルダをつくって、こんなサイトを追加。
wwwrootフォルダをつくって、こんなサイトを追加。

wwwrootフォルダをつくって、こんなサイトを追加。

エラー?!
エラー?!

エラー?!

IIS Web ページを開く際の HTTP エラー 403.14 | Microsoft Docs

ディレクトリの参照
ディレクトリの参照

ディレクトリの参照、

右の有効にするを押すと
右の有効にするを押すと

右の有効にするを押すと、

ディレクトリ一覧になる
ディレクトリ一覧になる

ディレクトリ一覧になる。
index.htmlに、

と書いて、wwwrootの下に置く。

こうなる
こうなる

こうなる。
普通のhtmlは表示できるようになった。
次は、aspxファイルを用意し、

このように書く。
"<%~%>"の中に例えばC#スクリプトを書ける。
この"<%~"で始まるのがインライン式。

ASP.NET インライン式 | Microsoft Docs
最も単純な ASP.NET を書いてみよう! - はじめての ASP.NET - ASP.NET 入門

しかし、今度は404.3のエラーが出てしまう。

いろいろいじったけど、結局ASP.NETの機能が有効になってなかった。
いろいろいじったけど、結局ASP.NETの機能が有効になってなかった。

いろいろいじったけど、結局ASP.NETの機能が有効になってなかった。

今度はaspxも動いた
今度はaspxも動いた

今度はaspxも動いた。

Sample/aspnet/inline_expressions/inline_expressions/src/inline_expressions at master · bg1bgst333/Sample · GitHub

HttpServlet

いよいよ、Java Servletに入っていく。

HttpServlet (Jakarta EE 8 仕様 API) - Javadoc
CentOS7 java tomcat サーブレット JSP インストール | itcore 2019年
【Java & Tomcat】アプリケーションのフォルダ構成と出力確認

Java Servletのエントリポイントというか、GETされた時の処理などは、HttpServletクラスを継承したクラスで行う模様。

$ pwd
/home/bg1/project/cloud/github.com/Sample/servlet/HttpServlet/HttpServlet/src/HttpServlet
$ mkdir main
$ cd main/
$ pwd
/home/bg1/project/cloud/github.com/Sample/servlet/HttpServlet/HttpServlet/src/HttpServlet/main
$ mkdir WEB-INF
$ cd WEB-INF/
$ mkdir classes
$ mkdir lib
$ ls
classes  lib
$

プロジェクトのディレクトリをmainとすると、その下にWEB-INFディレクトリを作り、さらにその下にclassesとlibディレクトリを作る。
(今回というかしばらくlibは使わないけど。)

$ ls
classes  lib
$ cd classes/
$ ls
$ vi ServletMain.java

で、classesの下で、ServletMain.javaを開いて、

HttpServletを継承したServletMainを定義し、doGetで"ABCDE"を含むHTMLを返す。

$ sudo cp -r /home/bg1/project/cloud/github.com/Sample/servlet/HttpServlet/HttpServlet/src/HttpServlet/main /var/lib/tomcat/webapps/

main一式を/var/lib/tomcat/webapps/の下に持ってくる。

$ ls -al
合計 32
drwxrwxr-x. 8 root   tomcat 4096  x月 xx xx:xx .
drwxr-xr-x. 3 root   tomcat 4096  x月 xx xx:xx ..
drwxr-xr-x. 3 tomcat tomcat 4096  x月 xx xx:xx ROOT
drwxr-xr-x. 7 tomcat tomcat 4096  x月 xx xx:xx examples
drwxr-xr-x. 5 root   tomcat 4096  x月 xx xx:xx host-manager
drwxr-xr-x. 3 root   root   4096  x月 xx xx:xx main
drwxr-xr-x. 6 root   tomcat 4096  x月 xx xx:xx manager
drwxr-xr-x. 5 tomcat tomcat 4096  x月 xx xx:xx sample
$

mainがrootになってるので、

$ sudo chown tomcat main
$ sudo chgrp tomcat main

オーナーとグループをtomcatに。

$ ls
ROOT  examples  host-manager  main  manager  sample
$ cd main/
$ cd WEB-INF/
$ cd classes/
$ ls
ServletMain.java
$ sudo vi ServletMain.java
$ sudo javac ServletMain.java -classpath /usr/share/tomcat/lib/tomcat-servlet-4.0-api.jar
$ ls
ServletMain.class  ServletMain.java
$

ServletMain.javaをjavacでコンパイル
(CATALINA_HOMEとかパスが全然通ってないので仕方なくclasspathを直接指定・・・。後で直すつもり・・・。)

$ cd ..
$ ls
classes  lib
$ sudo vi web.xml

上がって、WEB-INFの下で、web.xmlを開いて、

こう書く。
servlet-nameとしてはmainだが、実際にはServletMain.classが実行される。
URLのパターンとしては"/main"、ただし、webappsの下のmainの下に置いてるので、"http://ホスト名:8080/main/main"でアクセスする。

$ sudo systemctl restart tomcat

tomcatを再起動して、

こうなる
こうなる

こうなる。

Sample/servlet/HttpServlet/HttpServlet/src/HttpServlet at master · bg1bgst333/Sample · GitHub

systemctl start tomcat

Fedoraで、JavaServlet環境を準備する。
tomcatを起動するところまで。

CentOS7 java tomcat サーブレット JSP インストール | itcore 2019年

これを参考に、まずはJDK

JDKのリンクをクリック
JDKのリンクをクリック

JDKのリンクをクリック。

x64 RPM Packageかな
x64 RPM Packageかな

x64 RPM Packageかな。
ダウンロードしたら、

$ cd ダウンロード
$ ls
jdk-17_linux-x64_bin.rpm
$ sudo rpm -ivh jdk-17_linux-x64_bin.rpm
[sudo] bg1 のパスワード:
警告: jdk-17_linux-x64_bin.rpm: ヘッダー V3 RSA/SHA256 Signature、鍵 ID ec551f03: NOKEY
Verifying...                          ################################# [100%]
準備しています...              ################################# [100%]
更新中 / インストール中...
   1:jdk-17-2000:17.0.2-ga            ################################# [100%]
$

これで入ったかな。

$ java --version
java 17.0.2 2022-01-18 LTS
Java(TM) SE Runtime Environment (build 17.0.2+8-LTS-86)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.2+8-LTS-86, mixed mode, sharing)
$

バージョン17だから大丈夫かな。
続いて、Tomcatのインストール。

$ sudo yum install tomcat tomcat-webapps tomcat-admin-webapps
[sudo] bg1 のパスワード:
メタデータの期限切れの最終確認: x:xx:xx 時間前の xxxx年xx月xx日 xx時xx分xx秒 に実施しました。
依存関係が解決しました。
=============================================================================================================================
 Package                                Architecture          Version                           Repository              Size
=============================================================================================================================
インストール:
 tomcat                                 noarch                1:9.0.39-1.fc31                   updates                 90 k
 tomcat-admin-webapps                   noarch                1:9.0.39-1.fc31                   updates                 74 k
 tomcat-webapps                         noarch                1:9.0.39-1.fc31                   updates                324 k
依存関係のインストール:
 ecj                                    noarch                1:4.14-2.fc31                     updates                2.6 M
 tomcat-el-3.0-api                      noarch                1:9.0.39-1.fc31                   updates                106 k
 tomcat-jsp-2.3-api                     noarch                1:9.0.39-1.fc31                   updates                 63 k
 tomcat-lib                             noarch                1:9.0.39-1.fc31                   updates                5.3 M
 tomcat-servlet-4.0-api                 noarch                1:9.0.39-1.fc31                   updates                280 k
 apache-commons-daemon                  x86_64                1.2.0-2.fc31                      fedora                  54 k
 javapackages-tools                     noarch                5.3.0-6.fc31                      fedora                  32 k
 tomcat-taglibs-standard                noarch                1.2.5-8.fc31                      fedora                 410 k
弱い依存関係のインストール:
 tomcat-native                          x86_64                1.2.23-1.fc31                     updates                 82 k

トランザクションの概要
=============================================================================================================================
インストール  12 パッケージ

ダウンロードサイズの合計: 9.5 M
インストール済みのサイズ: 12 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/12): tomcat-admin-webapps-9.0.39-1.fc31.noarch.rpm                                        114 kB/s |  74 kB     00:00    
(2/12): tomcat-9.0.39-1.fc31.noarch.rpm                                                      134 kB/s |  90 kB     00:00    
(3/12): tomcat-el-3.0-api-9.0.39-1.fc31.noarch.rpm                                           263 kB/s | 106 kB     00:00    
(4/12): tomcat-jsp-2.3-api-9.0.39-1.fc31.noarch.rpm                                          161 kB/s |  63 kB     00:00    
(5/12): tomcat-native-1.2.23-1.fc31.x86_64.rpm                                               180 kB/s |  82 kB     00:00    
(6/12): tomcat-servlet-4.0-api-9.0.39-1.fc31.noarch.rpm                                      419 kB/s | 280 kB     00:00    
(7/12): tomcat-webapps-9.0.39-1.fc31.noarch.rpm                                              313 kB/s | 324 kB     00:01    
(8/12): apache-commons-daemon-1.2.0-2.fc31.x86_64.rpm                                         79 kB/s |  54 kB     00:00    
(9/12): javapackages-tools-5.3.0-6.fc31.noarch.rpm                                            66 kB/s |  32 kB     00:00    
(10/12): ecj-4.14-2.fc31.noarch.rpm                                                          609 kB/s | 2.6 MB     00:04    
(11/12): tomcat-taglibs-standard-1.2.5-8.fc31.noarch.rpm                                     484 kB/s | 410 kB     00:00    
(12/12): tomcat-lib-9.0.39-1.fc31.noarch.rpm                                                 1.0 MB/s | 5.3 MB     00:05    
-----------------------------------------------------------------------------------------------------------------------------
合計                                                                                         1.3 MB/s | 9.5 MB     00:07    
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
  準備             :                                                                                                     1/1
  インストール中   : tomcat-servlet-4.0-api-1:9.0.39-1.fc31.noarch                                                      1/12
  scriptletの実行中: tomcat-servlet-4.0-api-1:9.0.39-1.fc31.noarch                                                      1/12
  インストール中   : tomcat-el-3.0-api-1:9.0.39-1.fc31.noarch                                                           2/12
  scriptletの実行中: tomcat-el-3.0-api-1:9.0.39-1.fc31.noarch                                                           2/12
  インストール中   : tomcat-jsp-2.3-api-1:9.0.39-1.fc31.noarch                                                          3/12
  scriptletの実行中: tomcat-jsp-2.3-api-1:9.0.39-1.fc31.noarch                                                          3/12
  インストール中   : tomcat-taglibs-standard-1.2.5-8.fc31.noarch                                                        4/12
  インストール中   : javapackages-tools-5.3.0-6.fc31.noarch                                                             5/12
  インストール中   : apache-commons-daemon-1.2.0-2.fc31.x86_64                                                          6/12
  インストール中   : tomcat-native-1.2.23-1.fc31.x86_64                                                                 7/12
  インストール中   : ecj-1:4.14-2.fc31.noarch                                                                           8/12
  インストール中   : tomcat-lib-1:9.0.39-1.fc31.noarch                                                                  9/12
  scriptletの実行中: tomcat-1:9.0.39-1.fc31.noarch                                                                     10/12
  インストール中   : tomcat-1:9.0.39-1.fc31.noarch                                                                     10/12
  scriptletの実行中: tomcat-1:9.0.39-1.fc31.noarch                                                                     10/12
  インストール中   : tomcat-admin-webapps-1:9.0.39-1.fc31.noarch                                                       11/12
  インストール中   : tomcat-webapps-1:9.0.39-1.fc31.noarch                                                             12/12
  scriptletの実行中: tomcat-webapps-1:9.0.39-1.fc31.noarch                                                             12/12
  検証             : ecj-1:4.14-2.fc31.noarch                                                                           1/12
  検証             : tomcat-1:9.0.39-1.fc31.noarch                                                                      2/12
  検証             : tomcat-admin-webapps-1:9.0.39-1.fc31.noarch                                                        3/12
  検証             : tomcat-el-3.0-api-1:9.0.39-1.fc31.noarch                                                           4/12
  検証             : tomcat-jsp-2.3-api-1:9.0.39-1.fc31.noarch                                                          5/12
  検証             : tomcat-lib-1:9.0.39-1.fc31.noarch                                                                  6/12
  検証             : tomcat-native-1.2.23-1.fc31.x86_64                                                                 7/12
  検証             : tomcat-servlet-4.0-api-1:9.0.39-1.fc31.noarch                                                      8/12
  検証             : tomcat-webapps-1:9.0.39-1.fc31.noarch                                                              9/12
  検証             : apache-commons-daemon-1.2.0-2.fc31.x86_64                                                         10/12
  検証             : javapackages-tools-5.3.0-6.fc31.noarch                                                            11/12
  検証             : tomcat-taglibs-standard-1.2.5-8.fc31.noarch                                                       12/12

インストール済み:
  tomcat-1:9.0.39-1.fc31.noarch                                  tomcat-admin-webapps-1:9.0.39-1.fc31.noarch                
  tomcat-webapps-1:9.0.39-1.fc31.noarch                          tomcat-native-1.2.23-1.fc31.x86_64                          
  ecj-1:4.14-2.fc31.noarch                                       tomcat-el-3.0-api-1:9.0.39-1.fc31.noarch                    
  tomcat-jsp-2.3-api-1:9.0.39-1.fc31.noarch                      tomcat-lib-1:9.0.39-1.fc31.noarch                          
  tomcat-servlet-4.0-api-1:9.0.39-1.fc31.noarch                  apache-commons-daemon-1.2.0-2.fc31.x86_64                  
  javapackages-tools-5.3.0-6.fc31.noarch                         tomcat-taglibs-standard-1.2.5-8.fc31.noarch                

完了しました!
$

インストールできた。

$ sudo jps -mv
51406 Jps -mv -Dapplication.home=/usr/java/jdk-17.0.2 -Xms8m -Djdk.module.main=jdk.jcmd
$ sudo systemctl start tomcat
$ sudo jps -mv
51474 Jps -mv -Dapplication.home=/usr/java/jdk-17.0.2 -Xms8m -Djdk.module.main=jdk.jcmd
51436 Bootstrap start -agentpath:/usr/lib/abrt-java-connector/libabrt-java-connector.so=abrt=on, -Djavax.sql.DataSource.Factory=org.apache.commons.dbcp.BasicDataSourceFactory -Dcatalina.base=/usr/share/tomcat -Dcatalina.home=/usr/share/tomcat -Djava.endorsed.dirs= -Djava.io.tmpdir=/var/cache/tomcat/temp -Djava.util.logging.config.file=/usr/share/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
$

tomcatを起動して、jpstomcatが動いているか確認。
こうなっていればOK。

$ vi tomcat_fw.sh
$ cat tomcat_fw.sh
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
firewall-cmd --permanent --list-all
$ sudo sh tomcat_fw.sh
success
success
FedoraWorkstation
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports: 1025-65535/udp 1025-65535/tcp 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

$ sudo sh -x tomcat_fw.sh
+ firewall-cmd --permanent --add-port=8080/tcp
Warning: ALREADY_ENABLED: 8080:tcp
success
+ firewall-cmd --reload
success
+ firewall-cmd --permanent --list-all
FedoraWorkstation
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client mdns samba-client ssh
  ports: 1025-65535/udp 1025-65535/tcp 8080/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

$

あとはファイアウォール設定。
"-x"付け忘れて再度呼んだら、"Warning: ALREADY_ENABLED: 8080:tcp"って言われちゃったが・・・。

Tomcatが動いてれば、こんなのが出る。
Tomcatが動いてれば、こんなのが出る。

Tomcatが動いてれば、こんなのが出る。

CoSetProxyBlanket

WMIでは、プロキシのセキュリティ設定も必要らしい。
CoSetProxyBlanketで設定する。

CoSetProxyBlanket function (combaseapi.h) - Win32 apps | Microsoft Docs
WMIを使用してディスプレイの接続方法を取得

CoSetProxyBlanket.cppで、

とすると、

CoCreateInstance OK!
pLocator = 0x01f30828
pLocator->ConnectServer OK!
pServices = 0x01f3cfb4
CoSetProxyBlanket OK!
続行するには何かキーを押してください . . .

となる。
これでプロキシのセキュリティ設定も完了。

Sample/com/CoSetProxyBlanket/CoSetProxyBlanket/src/CoSetProxyBlanket at master · bg1bgst333/Sample · GitHub