[Servlet/Ajax]NoClassDefFoundErrorの解決方法[Eclipse]

どうも新米エンジニアのnoyです。
ServletとAjaxを使って非同期通信できるwebアプリを作っているのですが、
エラー解決に少々時間がかかったので記録を残します。

開発環境
　エディター：Eclipse 2019-03 (4.11.0)
　Webサーバー：Apache Tomcat v9.0 
　言語：Java
　ライブラリ：
　　・jquery-3.4.1.min.js
　　・jackson-annotations-2.9.9.jar
　　・jackson-core-2.9.9.jar
　　・jackson-databind-2.9.9.jar

#エラー内容
**Servletからajaxにレスポンスを返そうとしたところ、HTTPステータス 500 – Internal Server Errorが発生**

<img width="756" alt="スクリーンショット 2019-07-01 20.08.17.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/de454805-f2b3-dab1-cad2-c78d599ca72a.png">
Chromeのディベロッパーツール「console」タブ

「500エラーってなに？！」となり、わんやわんやと少々時間を潰してしまいましたが、

<img width="1122" alt="スクリーンショット 2019-07-01 20.09.04.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/2932ce14-0f40-5ec5-ac62-234bf68c0276.png">
エラーをクリックしていくと例外報告を発見。
「根本原因
java.lang.NoClassDefFoundError: com/fasterxml/jackson/databind/ObjectMapper」

あれ？ObjectMapperを定義しているファイルはimportしてるはずなんだけど....
そう思いながらEclipseを色々見直してると「問題」タブで以下の警告を発見。

<img width="1251" alt="スクリーンショット_2019-07-01_21_22_33.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/93275d59-05d9-4cbd-fa29-ab1e8518d3a5.png">

あれ、クラスパスに追加してるはずのjackson-XXXXXX-2.9.9.jarファイルが参照されてないのかも...？

#原因
**ObjectMapper(Jacksonのクラス)が定義されているファイル（jackson-XXXXXX-2.9.9.jar）を参照することができず、java.lang.NoClassDefFoundErrorとなっているため。**


※ Jacksonとは…Java用のJSONパーサーライブラリの１つ。JavaオブジェクトとJSONの相互変換ができる。

ということで「eclipse クラスパス・エントリー は、エクスポートまたは公開されません。」でググってみたところ、以下のページを見て解決できました。

https://codeday.me/jp/qa/20190201/208565.html
「spring-mvc – Eclipseの警告：XXXXXXXXXXX.jarはエクスポートまたは公開されません。ランタイムClassNotFoundExceptionsが発生する可能性があります」


#解決策
**jackson-XXXXXX-2.9.9.jarファイルを参照ライブラリーから削除し、WEB-INF / libフォルダに直接格納する。**

<img width="654" alt="スクリーンショット_2019-07-01_21_37_20.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/6d83b90a-492b-da91-2bda-6f82f02d1224.png">

<img width="668" alt="スクリーンショット_2019-07-01_21_43_15.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/41513985-d192-d02d-471f-bcedb12953d2.png">

参照ライブラリーにある、3つのjackson-XXXXXX-2.9.9.jarファイルを「ビルド・パスから除外」で削除。


<img width="739" alt="スクリーンショット_2019-07-01_21_52_25-2.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/4e4dbff7-b2e3-4ef6-3c2a-24d245812ac4.png">

WebContent/WEB-INF/libフォルダに3つのjackson-XXXXXX-2.9.9.jarファイルを直接ドラッグ&ドロップ。

<img width="428" alt="スクリーンショット 2019-07-01 21.50.10.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/8386640d-2a24-69bc-9350-01565e486938.png">

「ファイルをコピー」を選択して「OK」

<img width="387" alt="スクリーンショット 2019-07-01 21.55.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/1600e698-382f-f1d6-3dde-ceb10bd7fb71.png">

ファイルが格納されました。

<img width="830" alt="スクリーンショット_2019-07-01_22_20_36.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/1d29791e-9310-2c5e-98eb-29f754eafde5.png">

3つのjackson-XXXXXX-2.9.9.jarファイルに関する警告が消えています。（今は残り2項目については無視）

<img width="581" alt="スクリーンショット 2019-07-01 22.24.53.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/187718/5d82caf2-7f8d-d2c2-3549-e7c47fe9bd09.png">

500エラーも消えてServletが実行できました。