K.Maebashi's BBS

ご自由に書き込んでください。雑談も可。
テスト書き込みの類はテスト用掲示板にどうぞ

[日付順表示] [日付順インデックス] [スレッド順インデックス]

新規投稿 | 開設者ホームページへ戻る | ヘルプ

[2265] Re:韓国からの読者です。
投稿者:(ぱ)こと管理人
2022/01/30 17:30:35

ドゥボーさん はじめまして。著者の前橋です。韓国からの投稿ありがとうございます。 私の本を読んでいただき光栄です。 ところで、私は韓国語がまったく分かりませんので、以下の2点について、 よければ教えていただけないでしょうか。 ①「普通の日本人には~」について 韓国語版: http://kmaebashi.com/seiha/korean1.png 日本語版(旧版): http://kmaebashi.com/seiha/japanese1.png 日本語版で「普通の日本人には~」となっている部分は、韓国語だとどのような 意味になっているのでしょうか? ざっとGoogle翻訳で見てみますと、 「普通のプログラマには~」(?)となっているように見えますが、 そんなニュアンスでよいのでしょうか? 「pfはintを返す関数へのポインタ」というような文章では、日本語と英語は、 語順が逆になります。なので日本語でCの宣言を読もうとすると逆に見えるし、 正しく読むなら英語で読めばよい、というのがここで書いていることです。 これは日本語の語順の話ですので、韓国語だとどうなのだろう、というのが 気になっています。 ②Table3.1について 韓国語版: http://kmaebashi.com/seiha/korean2.png 日本語版(旧版): http://kmaebashi.com/seiha/japanese2.png この部分の⑤のところは日本語版では「日本語に訳すと……」になっていますが、 ここを見ると、韓国語でも、語順は日本語と同じのように見えます。 韓国の方にとっても、「英語で読め」というアドバイスは、的外れにはなっていない、 と思ってよいでしょうか。 韓国語版のTable3.1には、日本語版にはある「英語的表現」の列が なくなっているようで、そこもちょっと不思議です。 あいさつの投稿に面倒くさい質問で返してしまって申し訳ありませんが、 よろしければ教えてください。 >度々この場所にお訪れします。 最近あまり投稿のない掲示板ですみませんが、お待ちしております。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2264] 韓国からの読者です。
投稿者:ドゥボー
2022/01/30 05:03:53

初めまして。韓国からの読者です。 中学生の頃、前橋さんの本である「C言語ポインタ完全制覇」の韓国語版を読んで、C言語を深く理解することができた記憶があります。そのおかげで20代後半になった今もAI研究者としてコンピューターの仕事を続けています。本当に有難うございます! 当時は日本語が分からなかったので、お礼を言うことができませんでしたが、最近、この本についての情報を調べてこの本の改訂版が出たのを遅く分かりました。おめでとうございます!最新のC言語の標準であるC99やC11についてもアップデートされたようで、また買って読むつもりです!今度は日本語の原書で読みます。この間、僕はJLPT N1の試験に合格しましたので日本語の練習もすることも兼ねて。 お礼を言うことが遅れてしまってすみません。そして、改めて有難うございます! 度々この場所にお訪れします。 是非お元気で。 韓国からの読者 ドゥボーより
[この投稿を含むスレッドを表示] [この投稿を削除]
[2263] Re:ブログの誤字について
投稿者:(ぱ)こと管理人
2022/01/27 01:31:18

>はてなブログ「K.Maebashi's はてなブログ」の方のコメントしたのですが、 >通知などが飛ばなくて気づかない可能性があるのでこちらにも投稿します。 ありがとうございます。修正しました。 通知は来るのですが、こんな夜中しか時間が取れなくて……
[この投稿を含むスレッドを表示] [この投稿を削除]
[2262] ブログの誤字について
投稿者:rike1019
2022/01/26 19:22:00

はてなブログ「K.Maebashi's はてなブログ」の方のコメントしたのですが、通知などが飛ばなくて気づかない可能性があるのでこちらにも投稿します。 誤字を見つけました。 xコード下記 oコード書き > 俺もまだこんな風にコード下記に熱中できるんだなあ、という感慨はありますが、それが、何度も書いたことがあり過去コードを貼り合わせたような言語処理系、というのはちょっと残念ですね。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2261] Re:レビューのお願い
投稿者:(ぱ)こと管理人
2021/12/14 08:28:28

>何か感想や意見を聞かせてください。 >ちなみにポインタはまだ理解してないので、全部値渡しにしています。 >宜しくお願い致します。 すみません、Cはともかく数学的にこれは私の能力を超えるので、 どなたかわかる方に見ていただくのがよいかと。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2259] Re:完全初心者のためのプログラミング入門 lesson04_4
投稿者:Hiroyuki Naito
2021/11/23 23:23:51

ご回答ありがとうございました。 varからletに変わってスコープが有効になるというのは知識としてはあったのですが、関数のスコープしか頭に入っていませんでした。while文やfor文のブロックスコープも有効になるということをご教授いただき、自分の知識も一段深まった気がいたします。 >>しかし、下記の2つのfor文でxについて2回宣言しているように思うのですが、 >>エラーにならないのは何故でしょうか。 > >これは、letで宣言された変数は、ブロックスコープを持つからです。 >for文の第1式で宣言された変数は、for文のブロックの中だけのスコープを持ちます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2258] Re:完全初心者のためのプログラミング入門 lesson04_4
投稿者:(ぱ)こと管理人
2021/11/23 20:02:16

>しかし、下記の2つのfor文でxについて2回宣言しているように思うのですが、 >エラーにならないのは何故でしょうか。 これは、letで宣言された変数は、ブロックスコープを持つからです。 for文の第1式で宣言された変数は、for文のブロックの中だけのスコープを持ちます。 よって、以下のプログラムは、 for (let i = 0; i < 10; i++) { console.log("i.." + i); } console.log("i.." + i); 「i..0」から「i..9」までは表示しますが、最後の、for文の後のconsole.log()の ところで、以下のエラーを出します。 Uncaught ReferenceError: i is not defined https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/let | let 文はブロックスコープのローカル変数を宣言します。 https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Statements/for | let で宣言された変数は文内のローカル変数になります。 このあたりは、JavaとかC++とかC#とかC99とかと同じで、JavaScriptもletが導入されて ようやく「普通の言語になった」感があります。 昔のJavaScriptではvarしか使えませんでしたが、varによる変数宣言は関数スコープで、 クロージャという仕組みと相俟って、初心者には訳の分からない結果を出すことが ありました…… 例) https://teratail.com/questions/205789
[この投稿を含むスレッドを表示] [この投稿を削除]
[2257] 完全初心者のためのプログラミング入門 lesson04_4
投稿者:Hiroyuki Naito
2021/11/22 21:20:38

お世話になります。 首記のプログラムで1つ質問をさせていただきますので、よろしくお願いいたします。 JavaScriptでは同じ変数と2度宣言すると、 Uncaught SyntaxError: Identifier 'x' has already been declared というエラーが発生します。 しかし、下記の2つのfor文でxについて2回宣言しているように思うのですが、 エラーにならないのは何故でしょうか。 19: for (;;) { 20: for (let x = 0; x <= 720; x += 10) { 21: context.drawImage(ufoImage, x, 10); 22: } 23: for (let x = 720; x >= 0; x -= 10) { 24: context.drawImage(ufoImage, x, 10); 25: } 26: }
[この投稿を含むスレッドを表示] [この投稿を削除]
[2256] Re:C言語体当り学習 filter.cプログラム
投稿者:Hiroyuki Naito
2021/06/27 09:08:27

ご回答ありがとうございました。 今まで^Zによって、キーボードからはEOF(-1)が出力されると思い込んでいました。 「getchar()が行頭の^Z(=26)をファイルの末尾と判断して、EOFを戻り値として 出力する」というご説明ですっきりしました。 >つまり、コマンドプロンプト上で^Zを入力すると、それが行頭である場合に限り >getchar()はEOFを返すが、そうでなければ^Zをそのまま返す、ただし、行内で >^Zより後ろの文字は返さない、ということになります。 >これは、コマンドプロンプトの端末ドライバの仕様ということになると思います。 ----- 中略 ----- >ファイルの末尾に来たらEOFを返す、というだけで、そのEOFはどこからも読み込まれる >わけではありません。Hiroyuki Naitoさんも試されたとおり、^Zは26であって >-1ではありません。 >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2255] Re:C言語体当り学習 filter.cプログラム
投稿者:(ぱ)こと管理人
2021/06/27 00:32:44

>123 >123 >^Z > >のように、 >123<enter>^Zと入力するとEOFを検知してプログラムが終了しますが、 >123^Z<enter>のように入力するとプログラムが終了しません。 本当ですね。正直なところ、この挙動は私は認識していませんでした。 ちなみに123^Z456<enter>と入力すると、プログラムは終了しませんが、 456は読み込まれません。 >if文の前にprintf(" %d ", ch);を挿入して文字コードを表示させると、 >前者の^Zは-1、後者の^Zは26と表示されます。^Zはよくひとつ前の状態に戻る >動作のショートカットキーに使われていたりするのが原因でしょうか。 後者の^Zの26は、ASCIIの制御文字におけるSUBで、これをキーボードから入力する 手段が^Zです。以下Wikipediaを参照してください。 https://ja.wikipedia.org/wiki/%E5%88%B6%E5%BE%A1%E6%96%87%E5%AD%97 つまり、コマンドプロンプト上で^Zを入力すると、それが行頭である場合に限り getchar()はEOFを返すが、そうでなければ^Zをそのまま返す、ただし、行内で ^Zより後ろの文字は返さない、ということになります。 これは、コマンドプロンプトの端末ドライバの仕様ということになると思います。 すっきりしない回答で申し訳ありません。 >また、getchar()は「標準入力から1文字読み込む」とありますが、EOF(FFFFFFFF) >という4バイトのコードに対してはどのような動作で読み込んでいるのでしょうか。 「C言語 体当たり学習徹底入門」では、getchar()について 『getchar()は、標準入力から1文字読み込み、その文字コードを返します。  ファイルの末尾に来たら、EOFを返します。』 と書きました。これはgetchar()(を含むCの標準ライブラリ)の仕様です。 ファイルの末尾に来たらEOFを返す、というだけで、そのEOFはどこからも読み込まれる わけではありません。Hiroyuki Naitoさんも試されたとおり、^Zは26であって -1ではありません。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2254] C言語体当り学習 filter.cプログラム
投稿者:Hiroyuki Naito
2021/06/25 23:45:12

首記のプログラムをダウンロードして、gcc+VSCode(ターミナルはcommnad prompt)で 実行してみました。 123 123 ^Z のように、 123<enter>^Zと入力するとEOFを検知してプログラムが終了しますが、 123^Z<enter>のように入力するとプログラムが終了しません。 if文の前にprintf(" %d ", ch);を挿入して文字コードを表示させると、 前者の^Zは-1、後者の^Zは26と表示されます。^Zはよくひとつ前の状態に戻る 動作のショートカットキーに使われていたりするのが原因でしょうか。 また、getchar()は「標準入力から1文字読み込む」とありますが、EOF(FFFFFFFF) という4バイトのコードに対してはどのような動作で読み込んでいるのでしょうか。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2253] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:Hiroyuki Naito
2021/06/13 23:52:20

ご回答ありがとうございました。 ポインタ演算*(p + i)が、array[i]の計算の「最適化の手を抜くために付けられた機能」という意味が理解できました。 今後はarray[i]の記法を活用していきたいと思います。 >はじめまして。読んでいただきありがとうございます。 > >>array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当する >>アドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」 >>に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わり >>の1回だけ」という意味をご教示いただけるとありがたいです。 > >「ループの終わりの1回だけ」というのは、たとえばループが100回回ったとして、 >各繰り返しの最後に1回、という意味です。つまり、100回ループが回れば、 >「p + 1要素のサイズ」という計算は100回は行います。 >ただし、ループの中に、array[i]が5回出てくるとすれば、最適化をろくにやらない >コンパイラなら、100回ループが回った時に「array + (i * 1要素のサイズ)」という計算は >500回行われます。それが100回で済むなら、*pの方が高速になるでしょう。 >コメントで「array[i]は、何度も登場する」と書いてあるのはそういう意図です。 > >これで回答になっていますでしょうか? > >
[この投稿を含むスレッドを表示] [この投稿を削除]
[2252] Re:ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:(ぱ)こと管理人
2021/06/12 20:36:48

はじめまして。読んでいただきありがとうございます。 >array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当する >アドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」 >に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わり >の1回だけ」という意味をご教示いただけるとありがたいです。 「ループの終わりの1回だけ」というのは、たとえばループが100回回ったとして、 各繰り返しの最後に1回、という意味です。つまり、100回ループが回れば、 「p + 1要素のサイズ」という計算は100回は行います。 ただし、ループの中に、array[i]が5回出てくるとすれば、最適化をろくにやらない コンパイラなら、100回ループが回った時に「array + (i * 1要素のサイズ)」という計算は 500回行われます。それが100回で済むなら、*pの方が高速になるでしょう。 コメントで「array[i]は、何度も登場する」と書いてあるのはそういう意図です。 これで回答になっていますでしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2251] ポインタ完全制覇(第2版) p75 *pのループ中の計算
投稿者:Hiroyuki Naito
2021/06/12 17:25:08

本文p75の「*pがループの中に何度出現しても掛け算と足し算はループの終わりの1回だけで済む」で、引っかかっています。 array[i]は、ループ中に出現するたびごとに「array + (i * 1要素のサイズ)」に相当するアドレス計算を行うというのは理解できますが、*pでも「p + (p++ごとに1要素のサイズ)」に相当するアドレス計算を行っているように思えます。「掛け算と足し算はループの終わりの1回だけ」という意味をご教示いただけるとありがたいです。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2250] Re:テトリス風ゲームについて
投稿者:(ぱ)こと管理人
2021/05/10 23:03:04

はじめまして。反応が遅れましてすみません。 >http://kmaebashi.com/programmer/tetris/index.html >こちらのプログラムは、改造して配布しても良い物でしょうか? そういえばライセンス表記をしていなかったですが、以下のページの説明に 準じるということにします。ご自由にコピーしてください。 (なにしろテトリスなので、「名前を変える」必要もないと思います) http://kmaebashi.com/programmer/devlang/license.html よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2249] テトリス風ゲームについて
投稿者:SINch
2021/05/07 22:08:21

はじめまして http://kmaebashi.com/programmer/tetris/index.html こちらのプログラムは、改造して配布しても良い物でしょうか?
[この投稿を含むスレッドを表示] [この投稿を削除]
[2248] Re:オンラインブックについて
投稿者:bigen
2021/03/12 10:18:26

>おひさしぶりです。 > >>先日ご連絡したオンラインブックがいったんの完結ということになりました。 >>初めての書籍ということで書籍全体としてのバランスや文章、締めくくり方など拙い部分ばかりで恐縮ですが、ご報告させていただきます。 > >https://zenn.dev/bigen1925/books/introduction-to-web-application-with-python > >お疲れさまでした。これだけの量を書くのは大変だったと思います。 > >私も後ほどちょこちょこ読んでみます。 > ありがとうございます。 確かに本を書くというのは当初想像していたよりずっと大変で、改めて書籍を執筆される方の偉大さを身に沁みて理解いたしました・・・。 一方で、先人たちのこういった情報発信によって今の自分がありますので、これにめげず今後も情報発信を続けていこうと思います。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2247] Re:オンラインブックについて
投稿者:(ぱ)こと管理人
2021/03/10 01:00:21

おひさしぶりです。 >先日ご連絡したオンラインブックがいったんの完結ということになりました。 >初めての書籍ということで書籍全体としてのバランスや文章、締めくくり方など拙い部分ばかりで恐縮ですが、ご報告させていただきます。 https://zenn.dev/bigen1925/books/introduction-to-web-application-with-python お疲れさまでした。これだけの量を書くのは大変だったと思います。 私も後ほどちょこちょこ読んでみます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2246] オンラインブックについて
投稿者:bigen
2021/03/07 18:14:34

前橋先生 ご無沙汰しております。 先日ご連絡したオンラインブックがいったんの完結ということになりました。 初めての書籍ということで書籍全体としてのバランスや文章、締めくくり方など拙い部分ばかりで恐縮ですが、ご報告させていただきます。 https://zenn.dev/bigen1925/books/introduction-to-web-application-with-python 改めてきっかけを与えていただいた前橋先生に感謝を申し上げます。 前橋先生の書籍のおかげでエンジニアとして一つの壁を超えられたという感覚もあり、僕自身がプログラミングを楽しめるようになりました。 また、心のどこかで先人から教えてもらうばかりでなく、どこかで自分からも情報発信をしなければならないという気持ちもあったため、こうして今回オンラインブックという一つの形にできたことを嬉しく思います。 繰り返しにはなりますが、改めて感謝とお礼を申し上げさせていただくとともに、前橋先生の今後のご健勝をお祈りいたします。 
[この投稿を含むスレッドを表示] [この投稿を削除]
[2245] Re:オンラインブック執筆について
投稿者:bigen
2020/10/25 07:22:59

お返事ありがとうございます。 >導入部分を拝読しました。 > >Webアプリケーションの挙動を理解するためにWebサーバを作るというのは >私の独創でもないですし、まったく問題ないと思います。 ありがとうございます! あまり早くないペースでの更新になると思いますが、執筆を進めさせていただきます。 >言語も違うとのことなので、私も読んでみたいです。楽しみにしております。 温かいお言葉ありがとうございます。 とても励みになります。 オンラインブックとはいえ、一冊の書籍のようなまとまった文章を公開するのは初めての経験ですので、拙い言葉にはなるとは思いますが精一杯取り組ませていただきます。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2244] Re:オンラインブック執筆について
投稿者:(ぱ)こと管理人
2020/10/24 14:44:21

はじめまして。 >内容として先生の書籍と似通う部分も多くなりますので、先生にご許諾をいただけた >場合のみ続編を執筆しようと思っております。 >お手数ではありますが、もしお時間が許すようでしたら、是非ご確認とお返事を >いただけると幸いです。 導入部分を拝読しました。 Webアプリケーションの挙動を理解するためにWebサーバを作るというのは 私の独創でもないですし、まったく問題ないと思います。 言語も違うとのことなので、私も読んでみたいです。楽しみにしております。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2243] Re:P.17:終了のマークとして0を送付について
投稿者:くまきち
2020/10/21 23:14:26

ありがとうございます。 とりあえず、HTTP1.0については理解することができました!
[この投稿を含むスレッドを表示] [この投稿を削除]
[2242] オンラインブック執筆について
投稿者:bigen
2020/10/21 18:31:49

はじめまして。 昨年、前橋先生の書籍 - Webサーバを作りながら学ぶ 基礎からのWebアプリケーション開発入門 を読み、本当に勉強になりました。 まずは感謝を述べさせてください。 あまりに勉強になったので、社内でこれを題材に勉強会等を行っていたのですが、 「この本もっと皆に紹介したい!」 という思いとともに、 - python/Djangoしか経験のないメンバーが多く、Javaやサーブレットを扱うことがハードル - 自分の使い慣れたフレームワーク(Django)のトピックをからめながらだと理解しやすい - 書籍ではなくZennなどのオンラインブックであれば今の若いエンジニアユーザーにリーチしやすいのではないか などのことを感じ、先生の書籍をベースにpython/Djangoを題材としたオンラインブックを書いてみたいと思うようになりました。 先立ちまして、先生の書籍から受けた影響、寄せる思いなどを書いた導入記事を公開しました。 https://zenn.dev/bigen1925/books/e6c9492a82f5e2e10fca/viewer/422445 まだ導入記事以外は執筆しておりません。 また執筆中は無料公開とし、執筆完了後に様子をみて有料化も検討していますが、まだはっきりとは決めていません。 内容として先生の書籍と似通う部分も多くなりますので、先生にご許諾をいただけた場合のみ続編を執筆しようと思っております。 お手数ではありますが、もしお時間が許すようでしたら、是非ご確認とお返事をいただけると幸いです。 もし許諾に関しまして別途お話させていただいく場があったほうが良いようでしたら、Linkに記載のメールアドレス(<at> -> @)までご連絡いただいても構いません。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2241] Re:P.17:終了のマークとして0を送付について
投稿者:(ぱ)こと管理人
2020/10/20 23:13:34

>大分時間が経ってしまいましたが、回答は理解できました。 おひさしぶりです。反応が遅くなりましてすみません。 >一方で、Server側をApacheに置き換えたとき、Clientからの送信終了を表す”0”は >不要になっています(P.27)。Apacheは何をもってClientがリクエストを送り終えたことを >判断しているのでしょうか? TcpServer.javaのような手抜きプログラムとは違い、ApacheはまともなWebサーバなので、 HTTPリクエストを解釈できます。HTTPリクエストは、p.24のリスト1-7にあるとおり、 GETの場合は(普通は)ボディはつかないので空行で終わります。よって、 空行でリクエストの終わりを判定することができます。この本で作っている 簡易WebサーバModoki01.java(リスト1-16)では、実際そのようにしてリクエストの 終わりを判定しています(59行目)。 POSTの場合はボディが付くので、Content-Lengthヘッダのサイズを使います。 この本ではリスト3-17の66行目でContent-Lengthを取得し、69行目のreadToSize()の 呼び出しでそのサイズだけ読み込んでいます。 ――というのは実はHTTP1.0相当の、簡易版の実装で、HTTP1.1では サーバはGETメソッドでもボディを受け取ることが可能でなければならず(そして 無視しなければならず)、POSTメソッドでもContent-Lengthは必須ではありません。 動的にデータを作りながら連続して送るとき、ヘッダの時点ではサイズを確定できない、 という事情があるわけですが、それを受け取るのは本書の(かつ私の能力の)範囲を 越えます。 興味があれば以下を参照ください(RFC2616なので微妙に古いですが問題ないでしょう)。 https://triple-underscore.github.io/rfc-others/RFC2616-ja.html#section-4.4
[この投稿を含むスレッドを表示] [この投稿を削除]
[2240] Re:P.17:終了のマークとして0を送付について
投稿者:くまきち
2020/10/16 12:03:28

大分時間が経ってしまいましたが、回答は理解できました。 ありがとうございました。 一方で、Server側をApacheに置き換えたとき、Clientからの送信終了を表す”0”は不要になっています(P.27)。Apacheは何をもってClientがリクエストを送り終えたことを判断しているのでしょうか? 良ければ教えてください。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2239] Re:eclipseでHenacatを作成したい
投稿者:こー
2020/08/18 11:06:21

解決しました。 ご教授いただきありがとうございました。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2238] Re:eclipseでHenacatを作成したい
投稿者:(ぱ)こと管理人
2020/08/18 00:58:03

>※ここが原因かもしれません。 >ShowBBS.java、PostBBS.java、Message.javaの3つは、"chapter3"というパッケージの中にあります。 であれば、.classファイルは >C:\Henacat_0_1\webapps\makeTcpServer\chapter3 の下に置いたうえで、Main.javaは以下のようにします。 WebApplication app = WebApplication.createInstance("makeTcpServer"); app.addServlet("/ShowBBS", "chapter3.ShowBBS"); app.addServlet("/PostBBS", "chapter3.PostBBS"); そのうえで、 http://localhost:8001/makeTcpServer/ShowBBS を叩けば表示できると思います。 前回書いたとおり、addServletの 第1引数の"/ShowBBS"がパス、つまり以下のURLの最後の部分、 http://localhost:8001/makeTcpServer/ShowBBS を指すので、第1引数を変えなければ、叩くURLはこのままで構いません。 第2引数がクラス名です。パッケージを使っているならパッケージ名が要ります。 つまり完全限定クラス名「chapter3.ShowBBS」にする必要があります。 >>④長くなっても構いませんので、修正したクラスのソースを丸ごとここに貼ってください。 あ、すみません。ここは、修正した掲示板のソースコード(ShowBBS.javaとかPostBBS.javaとか) のつもりでした。これで動くと思いますが、まだ動かないようであれば貼ってください。 なお、当然ですが、ShowBBS.javaの中の out.println("<form action='/testbbs/PostBBS' method='post'>"); とか、PostBBS.javaの中の response.sendRedirect("/testbbs/ShowBBS"); とかは、それぞれmakeTcpServerに直す必要があります。念のため。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2237] Re:eclipseでHenacatを作成したい
投稿者:こー
2020/08/17 14:01:09

ご回答いただきありがとうございます。 >①「当方が独自につけたアプリケーション名」を含む、クラスファイルを置いた > 正確な場所 > >C:\Henacat_0_1\webapps\makeTcpServer\ > >これで合っていますか? ※を参照願います >②そのフォルダに置いたクラスファイルのファイル名すべて ShowBBS.class Message.class PostBBS.class の3つです。 >③List3-13 Main.javaの8~10行目に相当する箇所のソースコード WebApplication app = WebApplication.createInstance("makeTcpServer"); app.addServlet("/ShowBBS", "ShowBBS"); app.addServlet("/PostBBS", "PostBBS"); となります。 >パッケージを使っているならパッケージ名が要りますし、 >その場合はクラスファイルの置き場所もパッケージに沿ったフォルダ構成に >なっていなければいけません。 ※ここが原因かもしれません。 ShowBBS.java、PostBBS.java、Message.javaの3つは、"chapter3"というパッケージの中にあります。 そのため、フォルダ構成を以下のように変更しました。 C:\Henacat_0_1\webapps\makeTcpServer\chapter3 そのうえで、http://localhost:8001/makeTcpServer/chapter3/ShowBBSをたたいたところ、 C:\webserver\error_documentに格納した404.htmlが表示されました。 (リスト3-14:ServerThread.javaの87行目でNoSuchFileExceptionがcatchされました。) >④長くなっても構いませんので、修正したクラスのソースを丸ごとここに貼ってください。 Main.java package com.kokun.henacat.webserver; import java.net.ServerSocket; import java.net.Socket; import com.kokun.henacat.servletimpl.WebApplication; public class Main { public static void main(String[] args) throws Exception{ WebApplication app = WebApplication.createInstance("makeTcpServer"); app.addServlet("/ShowBBS", "ShowBBS"); app.addServlet("/PostBBS", "PostBBS"); try(ServerSocket server = new ServerSocket(8001)){ for(;;) { Socket socket = server.accept(); ServerThread serverThread = new ServerThread(socket); Thread thread = new Thread(serverThread); thread.start(); } } } } 変更はMain.javaのみです。 よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2236] Re:eclipseでHenacatを作成したい
投稿者:(ぱ)こと管理人
2020/08/16 23:52:36

>いいえ、webapps\testbbs\に配置しております。 >(実際にはtestbbsでなく当方が独自につけたアプリケーション名) 了解しました。「独自につけたアプリケーション名」はmakeTcpServerであると 先の投稿にもありましたね。失礼しました。 本と変えたのであれば、変えたところを教えてください。 具体的には、 ①「当方が独自につけたアプリケーション名」を含む、クラスファイルを置いた  正確な場所 C:\Henacat_0_1\webapps\makeTcpServer\ これで合っていますか? ②そのフォルダに置いたクラスファイルのファイル名すべて ③List3-13 Main.javaの8~10行目に相当する箇所のソースコード 元は以下: > 8: WebApplication app = WebApplication.createInstance("testbbs"); > 9: app.addServlet("/ShowBBS", "ShowBBS"); >10: app.addServlet("/PostBBS", "PostBBS"); アプリケーション名やクラス名を変えたのなら、ここも変えないと動きません。 ただ、8行目のtestbbsをmakeTcpServerに変えていないのだとすれば、 そもそもサーブレットへのリクエストだと認識されずNot Foundが返るので、 8行目は変えてあるはずですね。 9行目と10行目は、リクエストのパスとクラス名の対応付けをしています。 第1引数の"/ShowBBS"がパス、つまり以下のURLの最後の部分、 http://localhost:8001/makeTcpServer/ShowBBS 第2引数がクラス名です。パッケージを使っているならパッケージ名が要りますし、 その場合はクラスファイルの置き場所もパッケージに沿ったフォルダ構成に なっていなければいけません。 ④長くなっても構いませんので、修正したクラスのソースを丸ごとここに貼ってください。 よろしくお願いいたします。
[この投稿を含むスレッドを表示] [この投稿を削除]
[2235] Re:eclipseでHenacatを作成したい
投稿者:こー
2020/08/16 13:04:20

ご回答いただきありがとうございます。 >C:\Henacat_0_1\webapps\ >の直下にShowBBS.classがあるような配置でしょうか。そうだとすると間違っています。 いいえ、webapps\testbbs\に配置しております。 (実際にはtestbbsでなく当方が独自につけたアプリケーション名) >C:\Henacat_0_1\webapps\testbbs\ >の下にShowBBS.class, PostBBS.class, Message.classを配置するのが正解です。 >testbbsフォルダが必要なのは、WebApplication.javaで以下のようにWEBAPPS_DIRにdirを >くっつけたパスからクラスを検索しているからで、 > >20: Path pathObj = fs.getPath(WEBAPPS_DIR + File.separator + dir); >21: this.classLoader >22: = URLClassLoader.newInstance(new URL[]{pathObj.toUri().toURL()}); > >このdirの出処は、List3-13 Main.javaの8行目のこの呼び出しです。 > > 8: WebApplication app = WebApplication.createInstance("testbbs"); > 9: app.addServlet("/ShowBBS", "ShowBBS"); >10: app.addServlet("/PostBBS", "PostBBS"); > >これで回答になっていますでしょうか? ご教授いただいた部分、理解することができました。 しかし、その上で確認をしても誤っている箇所が見つかっておりません。 何かその他に考えうることはありますでしょうか。 お手数おかけしますが、よろしくお願いします。
[この投稿を含むスレッドを表示] [この投稿を削除]