友人にプロジェクトを依頼し、自分のコンピュータで実行しようとすると、自動的に開かれた「localhost/login.jsp」で 404 エラーが表示されました。
背景
プロジェクトは圧縮されて友人から直接送信されたため、プロジェクト設定ファイルも保持されました。自分のコンピュータを使用する場合は、一部の設定を変更する必要があります。主に Maven 関連のパスとローカルの Tomcat パスが変更されました (バージョンは不一致です)。
質問
エラーが報告された構成を変更した後、プロジェクトを直接実行します。自動的に開かれるURLは「localhost/login.jsp」ですが、パスが間違っているという404エラーが表示されます。
そこで、事前チェックを行い、元のポート 80 を 8080 に変更し、Maven でクリーンアップして再パッケージ化しました。再実行しても 404 エラーが表示されます。次に、Baidu は、ターゲット フォルダー内のすべてのリソースが完了していることを確認し、実行時に現在のプロジェクトが実際にデプロイされましたが、結果は同じでした。手がかりがないので、ログから手がかりを探すしかありません。ログ内の CATALINA_BASE のパス「C:\Users\Admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\login_jsp_project」がわかりにくかったので、関連情報の検索を続けました。
最後に、友人が自分のコンピュータで「localhost/xxx」を使用してプロジェクト リソースに直接アクセスできることを発見しました。これは、彼のプロジェクトが Tomcat のルート ディレクトリにデプロイされていることを意味します。私のプロジェクトは「/project_war」の下にデプロイされており、「localhost/project_war/xxx」にアクセスする必要があるため、次のステップはそれを設定する場所を見つけることです。
解決
1. ターゲットディレクトリに対応するリソースがありません(これは私が遭遇した問題ではなく、記録されています)
tomcat を Idea 上で直接実行するか、Maven でパッケージ化すると、プロジェクトのルート ディレクトリにターゲット フォルダーが生成されます。ターゲット フォルダーの下の project-1.0-SNATSHOT および project-1.0-SNATSHOT.war は、tomcat 上で実行されるプロジェクト フォルダーです。
ファイル名はpom.xmlで定義されます。
アクセスしたいリソースが上記のプロジェクトフォルダーに存在するかどうかを確認し、存在しない場合は webapps からコピーしてください。
2. 仮想ディレクトリを構成します (私が遭遇した問題)
ログ情報のCATALINA_BASEパスに従ってフォルダーを開きます。
CATALINA_BASE の使用: "C:\Users\Admin\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\login_jsp_project"
CATALINA_HOME の使用: "D:\Apache-tomcat-9.0.20"
(ログ情報のCATALINA_HOMEはtomcatのインストールディレクトリを表し、CATALINA_BASEは作業ディレクトリまたはプロジェクトディレクトリを表します)
次に、「conf\Catalina\localhost」の下にある xxx.xml を開くと、次の内容が表示されます。
<?xml version="1.0"?>
<Context docBase="D:\project\target\project-1.0-SNAPSHOT.war" path="/project_war"/>
context タグを使用すると、ローカル システム上のディレクトリを、Web ブラウザからアクセスできる仮想ディレクトリにマップできます。path 属性は、 Web アプリケーションの仮想パスを指定します。docBase 属性は、仮想ディレクトリが配置されているローカル システムのディレクトリ アドレスを指定するために使用されます。絶対アドレスまたは webapps ディレクトリを基準とした相対アドレスを使用できます。
上記の内容を例に挙げると、「localhost/project_war/xxx」にアクセスすると、コンピュータ上のディレクトリ「D:\project\target\project-1.0-SNAPSHOT.war」内のxxxリソースにアクセスします。
場所を見つけたら、対応するパスが正しいかどうかを確認できます。
このパスは、Idea の [Run] -> [Edit Configurations] で設定し、[Deployment] をクリックします。
次のアプリケーション コンテキストは、プロジェクトを実行するときに、上記のコンテキスト タグの path 属性に書き込まれるアイデアです。値が空の場合、プロジェクトはデフォルト プロジェクトとして設定されます。つまり、「localhost/xxx」にアクセスするだけです。 , このとき、コンテキストタグのパスは「」
プロジェクトを再度実行すると、友人がプロジェクトを開いたときと同じ効果が得られます。
追加の補足
Context は、仮想ホスト host 上で実行される単一の Web アプリケーションを表し、context 要素を構成することで Web アプリケーションを柔軟に公開できます。コンテキストはさまざまな場所で設定できますが、Tomcat は特定の順序で要素を検索し、見つかった場合はその要素を使用し、検索を続行しません。したがって、異なる場所にあるコンテキスト要素が優先されます。検索順序は次のとおりです。
- <CATALINA_HOME>/conf/context.xml ファイルで context 要素を見つけます。このファイルはすべての Web アプリケーションに適しています。
- <CATALINA_HOME>/conf/[enginename]/[hostname]/context.xml.default でコンテキスト要素を見つけます。すべての Web アプリケーションに適用されます。
- <CATALINA_HOME>/conf/[enginename]/[hostname]/[contextpath].xml ファイルを検索します。これは、単一の Web アプリケーションにのみ適用されます。
- Web アプリケーションの META-INF/context.xml ファイルで context 要素を見つけます。これは現在の Web アプリケーションにのみ適用されます。
- <CATALINA_HOME>/conf/server.xml ファイルのホスト要素でコンテキスト要素を見つけます。すべての Web アプリケーションのコンテキスト要素は、serverl.xml で構成できますが、優先順位が最も低いため、他のコンテキスト要素によって上書きされる可能性があります。
参考文献と引用
Tomcat を構成するアイデアの詳細 - Jianshu (jianshu.com)
tomcat_context docbase_Qianshuang のブログ - CSDN ブログの Context の path および docBase 属性
tomcat の基本_tomcat ホスト コンテキストの優先順位_Qianshuang のブログ - CSDN ブログ
侵害連絡先が削除されました
間違いは遠慮なく指摘してください