Tomcatのデフォルトパスの設定によって発生するプロジェクトURLの競合を解決する方法の詳細な説明

Tomcatのデフォルトパスの設定によって発生するプロジェクトURLの競合を解決する方法の詳細な説明

序文

Tomcat は優れた Java コンテナですが、避けられない小さな落とし穴もいくつかあります。ここでそれらを記録しておきます。

始める

質問

  • 複数のプロジェクトをデプロイした後の URL パスの競合

シナリオの説明

1. webapps には、projectA と projectB という 2 つのプロジェクトがあります。管理情報インターフェースを除き、他の 2 つのプロジェクトにはセキュリティ検証メカニズムがあります。

2. projectA はフロントエンドとバックエンドに分離されていないため、Java プロジェクト内にも静的リソースが存在します。静的リソースでインターフェース要求を行う場合、パッケージ名は書き込まれません。たとえば、ログインする場合、js コードはサーバーの IP + ポート + 現在設定されている URL (/login) を連結しますが、/login の前に /projectA を追加しません。したがって、ローカルマシンでのテストでは問題はなく、このような問題はデプロイ時にのみ発生します。これも問題であり、以下で解決します。

3.projectBは通常通り実行中のプロジェクトです

シナリオ2の解決策

Tomcat で設定ファイルを開き、<Host> タグに <Context> を追加して、それをサーバーのデフォルトのアクセス パスとして設定します。これにより、パッケージ名を回避できますが、この方法は非常に非公式であり、推奨されません。

<ホスト名="localhost" appBase="webapps"
      unpackWARs="true" autoDeploy="true">

    <!-- SingleSignOn バルブ、Web アプリケーション間で認証を共有
       ドキュメント: /docs/config/valve.html -->
    <!--
    <Valve クラス名="org.apache.catalina.authenticator.SingleSignOn" />
    -->

    <!-- アクセス ログはすべての例を処理します。
       ドキュメント: /docs/config/valve.html
       注: 使用されるパターンは、pattern="common" を使用するのと同じです -->
    <Valve クラス名="org.apache.catalina.valves.AccessLogValve" ディレクトリ="logs"
        プレフィックス="localhost_access_log" サフィックス=".txt"
        パターン="%h %l %u %t &quot;%r&quot; %s %b" />
    <コンテキスト パス="" docBase="/usr/tomcat8.6/webapps/sc_edu" デバッグ="0" リロード可能="true"/>

  </ホスト>

コードの説明

<コンテキスト パス="" docBase="/usr/tomcat8.6/webapps/sc_edu" デバッグ="0" リロード可能="true"/>
  • path と doBase を一緒に使用すると、指定されたパッケージ パスが示されます。簡単にするために、docBase を直接アンインストールできます。
  • tomcat を再起動し、パッケージ内のリソースに ip+port で直接アクセスできることをテストします。ただし、他のパッケージ内のリソースにアクセスすると、URL のあいまいさが発生します。当初は projectB にアクセスしたかったのですが、projectA にマップされていました。このような問題が発生するのは一部の URL のみです。

そこで、別のTomcatをインストールし、直接パスマッピングを必要とするプロジェクトのみをデプロイするという解決策があります。

これにより、Tomcatが配置されているディレクトリに戻り、cpコマンドでコピーされます。

$> cp -r tomcat8.5/ tomcat8.6/

次に、tomcat8.5 の projectA を tomcat8.6 に移動します。

tomcat8.5を削除します

<コンテキスト パス="" docBase="/usr/tomcat8.6/webapps/sc_edu" デバッグ="0" リロード可能="true"/>

tomcat8.6 では、service.xml に次の変更を加える必要があります。

tomcat8.5 と異なり、ポートが競合しない限り、シャットダウンに対応するポートを 8006 に変更します。

<サーバーポート="8006" シャットダウン="シャットダウン">

リクエストに対応するポートを変更します。原理は上記と同じです

<コネクタ ポート="8081" プロトコル="HTTP/1.1"
        接続タイムアウト = "20000"
        リダイレクトポート="8443" />

<Host> タグの内容がコピーされ、対応するマッピング パスに変更する必要があります。

この方法では、2 つの Tomcat を同時に実行することができ、起動とシャットダウンは互いに影響を及ぼしません。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Tomcat での jar のロードに関する異常な問題の分析と解決
  • Apache、Tomcat、Nginx サーバーの詳細な理解と比較分析
  • Linux で Tomcat を実行するいくつかの方法の説明
  • Tomcat 7.0 で仮想ディレクトリを設定し、仮想パスを構成する方法
  • IDEAリモートデバッグを使用したTomcatの説明
  • TomcatはLog4jを使用してcatalina.outログを出力します。
  • Tomcat でのコネクタ構成
  • Tomcatのデフォルトプログラム公開パスの使用と変更についての説明
  • Eclipse プロジェクトを IDEA にインポートし、Tomcat にデプロイするための詳細な手順
  • Tomcat サーバーが tomcat7w.exe を開けない場合の解決策

<<:  MySQL 5.7.18 のダウンロードとインストールの詳細な手順

>>:  Mysql 5.7.18 MySQL proxies_priv を使用して同様のユーザーグループ管理を実装する

推薦する

MySQL 5.7.17 zip インストールおよび設定チュートリアル MySQL 起動失敗の解決策

MySQL 5.7.17、現在最新バージョンのようです、ダウンロードアドレスここで、プラットフォーム...

Ubuntu で apt-get を使用して mysql をインストールおよび完全にアンインストールする方法の詳細な説明

1. mysqlをインストールします。 udo apt-getでmysql-serverをインストー...

CSS 複合セレクタの具体的な使用法

交差点セレクター交差セレクターは、直接接続された 2 つのセレクターで構成されます。最初のセレクター...

ページングクリックコントロールを実装するネイティブJS

これは、ネイティブJSを使用してページングクリックコントロールを実装する必要がある面接の質問です。参...

Linux システムの最適化 (カーネルの最適化) に関するいくつかの提案

スワップを無効にするサーバーがデータベース サービスまたはメッセージ ミドルウェア サービスを実行し...

Ubuntu の仮想環境に Django をインストールする方法

Ubuntu コマンドライン ウィンドウで次の操作を実行します。 1. 仮想環境をインストールする...

CSS3は、欠けた角の長方形、折り畳まれた角の長方形、欠けた角の境界線を実装しています。

序文数日前、偶然、コーナーの四角形が欠落している機能に遭遇しました。最初に頭に浮かんだのは、必要な場...

入力ボックスの値を取得する方法のReactの例

入力ボックスの値を取得する複数の方法最初の方法は、制御されていないコンポーネントの取得です2番目の方...

HTML チュートリアル、HTML デフォルト スタイル

html 、アドレス、引用、本文、 dd 、 div 、 dl 、 dt 、フィールドセット、フォ...

mysqladmin を使用して MySQL インスタンスの現在の TPS と QPS を取得する方法

mysqladmin は管理と操作を行う公式の mysql クライアント プログラムです。MySQL...

仮想マシンを作成し、VMware に Redhat Linux オペレーティング システムをインストールする (グラフィック チュートリアル)

VMware で仮想マシンを作成し、Redhat Linux オペレーティング システムをインスト...

Vueはシンプルなショッピングカートの例を実装します

この記事では、参考までに、シンプルなショッピングカートケースを実装するためのVueの具体的なコードを...

MySQL における EXISTS と IN の使用法の比較

1. 使用法: (1)EXISTSの使用 ucsc_project_batch a から、存在する場...

Vue.jsクラウドストレージで画像アップロード機能を実現

序文ヒント:以下はこの記事の主な内容です。以下のケースを参考にしてください。 1. オブジェクトスト...

sqlite を mysql スクリプトに移行する方法

さっそく、コードを直接投稿します。具体的なコードは次のとおりです。 パーレル # # https:/...