はじめまして。ご質問ありがとうございます。
>Mainを実行して、URL(
http://localhost:8001/makeTcpServer/ShowBBS)をたたくと、
>
>java.lang.ClassNotFoundException: ShowBBS
> at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:471)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
> at java.base/java.net.FactoryURLClassLoader.loadClass(URLClassLoader.java:899)
> at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
> at com.kokun.henacat.servletimpl.ServletService.createServlet(ServletService.java:17)
> at com.kokun.henacat.servletimpl.ServletService.doService(ServletService.java:56)
> at com.kokun.henacat.webserver.ServerThread.run(ServerThread.java:90)
> at java.base/java.lang.Thread.run(Thread.java:834)
このスタックトレースから分かることは、Hanecatから掲示板のクラス(ShowBBS)を
読み込もうとしてそれが見つからないのでエラーになっている、ということです。
Henacatでは、サーブレットのクラスファイルを置くパスをソース内にべた書きしているので、
Eclipseの設定とかが原因とも思えません。
>作成したクラスファイルは、WEBAPPS_DIR = "C:\\Henacat_0_1\\webapps"配下に
>設置しているのですが、そのほかに原因があるのでしょうか。
ここですが、
C:\Henacat_0_1\webapps\
の直下にShowBBS.classがあるような配置でしょうか。そうだとすると間違っています。
>書籍132ページのクラスファイルの部分が正確に理解できていない気もしていますが、ご教授いただけるとありがたいです。
書籍132ページにはこうあります。
>作成したクラスファイルの配置場所ですが、リスト3-15のWebApplication.javaの8 行目の
>WEBAPPS_DIRに設定されているディレクトリの下に、Webアプリケーション名(testbbs)の
>ディレクトリを作成し、その直下に入れてください(WEB-INFとかclassesディレクトリは不要)。
つまり、
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");
これで回答になっていますでしょうか?