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 を使用して同様のユーザーグループ管理を実装する

推薦する

React refの使用例

目次refとは何かrefの使い方DOM要素に配置するクラスコンポーネントに配置する関数コンポーネント...

マージンの重複問題を解決する方法

1. まず、2つ以上の隣接する通常フローブロック要素の垂直マージンの崩壊を引き起こす原因を知る必要が...

JS の 3 つの主要な問題、非同期性とシングルスレッドについて簡単に説明します。

目次シングルスレッド非同期シングルスレッドしかし、開発中にネットワーク リクエストやスケジュールされ...

Vue の一般的な問題と解決策の概要 (推奨)

Vue に限定されず、他の種類の SPA プロジェクトにも当てはまる問題がいくつかあります。 1....

MySQL binlog の使用方法の詳細な説明

binlog は、MySQL のすべての DML 操作を記録するバイナリ ログ ファイルです。 bi...

MYSQL 演算子の概要

目次1. 算術演算子2. 比較演算子3. 論理演算子4. ビット演算子5. 演算子の優先順位1. 算...

vue $http の get および post リクエストのクロスドメイン問題を解決する

Vue $http get および post リクエストのクロスドメイン問題まずconfig/ind...

Docker rocketmq デプロイメントの実装例

目次準備展開プロセスRocketMQ の初体験関連する質問ヘルプドキュメント私は最近 RocketM...

Windows での Tomcat サーバーのインストールに関するチュートリアル

1 ダウンロードして準備するまず、公式ウェブサイトからTomcatをダウンロードする必要があります。...

HTML の POST リクエストにおける a タグの 2 つの使用法の分析

HTML POST リクエストで a タグを使用する 2 つの例を次に示します。 1. ajaxを使...

mysql5.7 ユーザー権限の作成、ユーザーの削除、権限の取り消し

1. ユーザーを作成します。注文: 'password' によって識別される ...

実行中の Docker コンテナにボリュームを動的に追加する方法

以前、Docker コンテナの起動後にボリュームをマウントできるかどうか尋ねられたことがあります。m...

デザインリファレンス 美しく独創的なブログデザイン

以下にリストされているすべてのブログはオリジナルであり、独自にデザインされています。これらは、他者が...

JS でページのスクリーンショット機能を実装する方法

「ページのスクリーンショット」は、ページポスターの生成、ポップアップ画像の共有など、フロントエンドで...

MySQL テーブルにおける非主キー列オーバーフロー監視の詳細な説明

今日もまた罠に落ちてしまいました。 私は以前MySQLの主キーオーバーフローに遭遇したことがあり、そ...