Idea Web プロジェクトはリソースから開始されますが、依然として 404 が表示されます

友人にプロジェクトを依頼し、自分のコンピュータで実行しようとすると、自動的に開かれた「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 は特定の順序で要素を検索し、見つかった場合はその要素を使用し、検索を続行しません。したがって、異なる場所にあるコンテキスト要素が優先されます。検索順序は次のとおりです。

  1. <CATALINA_HOME>/conf/context.xml ファイルで context 要素を見つけます。このファイルはすべての Web アプリケーションに適しています。
  2. <CATALINA_HOME>/conf/[enginename]/[hostname]/context.xml.default でコンテキスト要素を見つけます。すべての Web アプリケーションに適用されます。
  3. <CATALINA_HOME>/conf/[enginename]/[hostname]/[contextpath].xml ファイルを検索します。これは、単一の Web アプリケーションにのみ適用されます。
  4. Web アプリケーションの META-INF/context.xml ファイルで context 要素を見つけます。これは現在の Web アプリケーションにのみ適用されます。
  5. <CATALINA_HOME>/conf/server.xml ファイルのホスト要素でコンテキスト要素を見つけます。すべての Web アプリケーションのコンテキスト要素は、serverl.xml で構成できますが、優先順位が最も低いため、他のコンテキスト要素によって上書きされる可能性があります。

参考文献と引用

IDEA の Maven プロジェクトは Tomcat を正常に起動しますが、JSP ページには 404_idea starting tomcat404_Learn Well と表示されます。 yyy のブログ - CSDN ブログ

Tomcat を構成するアイデアの詳細 - Jianshu (jianshu.com)

tomcat_context docbase_Qianshuang のブログ - CSDN ブログの Context の path および docBase 属性

tomcat の基本_tomcat ホスト コンテキストの優先順位_Qianshuang のブログ - CSDN ブログ

侵害連絡先が削除されました

間違いは遠慮なく指摘してください

おすすめ

転載: blog.csdn.net/weixin_59537209/article/details/129804055